이 질문을하는 방법을 모르겠으므로 예제를 통해 내가 할 수있는 한 분명 할 것입니다.스키마 : 양방향 관계? 어떤 테이블/엔티티가 '환경 설정'을 소유해야합니까?
페이스 북과 같은 앱에서 프로필은 여러 개의 ProfilePictures를 가질 수 있습니다. 주어진 시간에 이들 중 하나가 "선택된"ProfilePicture입니다 (ProfilePicture가 업로드되었다고 가정).
본능적으로, 나는이 같은 모델 것 :
Table: Profile
--------------
ProfileID
SelectedProfilePictureId //fk to ProfilePicture
Name, Age, Etc
Table: ProfilePicture
---------------------
ProfilePictureId
ProfileId //fk to Profile, indicating which Profile this picture belongs to
Url, DateTaken, Etc
을이 시점에서, 이러한 테이블은 서로 지적하고 그냥 나에게 "잘못된"것으로 보인다. 그것은 쉽게 SelectedProfilePictures없이 프로필을 쿼리하거나 프로필의 SelectedPicture를 얻을 수 있지만 삽입과 업데이 트가 좀 어색합니다.
이 나쁜 형태입니까? 프로필 테이블이 ProfilePicture 테이블과 완전히 독립적이어야합니까? 데이터베이스 설계 이론에 따라 이것을 모델링하는 "올바른"방법이 있습니까, 아니면 프로그래머의 강점입니까?
Sql Server 2008 R2에서 순환 참조를 사용할 수있게 만들었지 만, 약간의 해킹이었습니다 (예를 들어, 새 ProfilePicture를 만들고 프로필의 SelectedProfileId 필드를 설정할 수는 없었습니다). – smalltowndev
기본적으로 Profile 테이블이 더 이상 ProfilePicture 테이블을 참조하지 않기 때문에 세 번째 테이블이 순환 참조를 깰 것이라고 말하는 것입니까? 그리고 PreferredPictures 테이블은 각각의 Profiles와 ProfilePictures 테이블과 일대일 관계를 가질 것입니다.PreferredPictures 테이블의 기본 키는 무엇입니까? (매우 많은 질문에 대해 유감스럽게 생각한다!) – smalltowndev
그것은 이해된다. .. 정보와 ascii 예술에 감사드립니다! 나는이 사이트에서 15 개의 "평판"을 얻을 수있게 되 자마자 당신의 답을 upvote 할 것입니다. – smalltowndev