2010-05-20 5 views
1

시나리오가 있습니다. 독립 항목을 나타내는 두 개 이상의 테이블이 있습니다. 수 있습니다 사용자 및 회사많은 테이블과 관련된 일대 다 관계

두 테이블 모두 저장된 주소가 필요합니다. 각각 하나 이상의 주소를 가질 수 있습니다.

일반적으로 1 : 많은 시나리오의 주소 테이블 woudl에는 UserId 또는 CompanyId가있어 1 대 다수 관계를 생성합니다. 이 경우

나는 내가 주소 테이블은 사용자 ID와 회사 ID 모두를 가질 수

  1. 생각할 수있는 몇 가지 방법이 있고 하나는 각 레코드에 대해 사용됩니다.

  2. 이 키는 사용자 ID 또는 회사 ID있을 것 ObjectId가와 개체 유형 그래서 개체 ID를 사용할 수 있으며, 개체 유형은 사용자 또는 회사

  3. 가 ObjectTable를 만들고 사용자 및 회사에 ObjectId가 추가 될 woudl. 주소는 OjbectId가됩니다.

나는 이러한 솔루션을 정말로 좋아하지 않습니다. 나는 여기에 최선의 접근 방식이 궁금합니다.

또 다른 참고로 나는 내 데이터 액세스 레이어에 대한 사용자 linqtosql을 사용합니다. 독특한 합성 ID (예를 들어, 자동 증가)로,

어드레스 테이블 :

답변

2

Linq-to-SQL에 대한 영향에 대해서는 잘 모르겠지만이 문제를 해결하기위한 하나의 모델은 Junction Tables을 여러 개 사용하는 것입니다.

귀하의 경우 AddressId 및 UserID라는 두 개의 열과 AddressId 및 CompanyId 열이있는 AddressCompanies라는 테이블이있는 AddressUsers라는 테이블이 있습니다.

1

은 다 대다 이동합니다.

고유 한 합성 id (예 : autoincrement), user_id 외래 키 및 주소 외래 키를 갖는 user_address 테이블.

고유 한 합성 id (예 : autoincrement), company_id 외래 키 및 주소 외래 키가있는 company_address 테이블.

(. 이것은 사용 사례 없음) 사용자 (또는 기업) 하나의 주소를 가질 수 있다면, 당신은 단지 사용자 테이블에 address_id 외래 키 (또는 TEH 회사 테이블이 없습니다.)

1

당신이 가지고있는 것은 다형성 연관입니다. 나는 linqtosql에 익숙하지 않지만이 유형의 관계에 대한 참조 무결성을 지원한다면 두려운 것이 아니라 어떤지도 든 상관 없다.

표준 연습에서는 대개 다형성 연관성을 역전하여 극복 할 수 있습니다. 사용자와 회사가 각각 하나의 교차점 (교차점) 테이블을 가지고 주소에 합류해야합니다. 이것은 교차 테이블의 각 행이 하나의 User와 하나의 Address를 참조하는 many to many 관계와 유사합니다.

교차 테이블을 사용하는 경우에는 다 대다 (일대 다 유지) 교차 테이블의 주소 키에 고유 제한 조건을 적용하십시오.

ORM 문제가있는 경우 UserAddress 및 CompanyAddress와 조인하는 상위 주소 테이블을 사용하십시오.

1

tpdi의 조언을 따르는 것이 좋지만 사용자/회사와 주소 사이에 일대일 관계를 많이 사용하는 것이 좋습니다. 적어도 모든 주요 데이터 유형은 동일합니다.

내 대답을 추가하는 가장 큰 이유는 응답으로 ObjectID 및 ObjectType - 특성 분할 저장에 대한 두 번째 제안은 좋지 않은 아이디어입니다.

이 Celko 게시물을 읽었습니다. http://www.tdan.com/view-featured-columns/9852