2012-08-14 4 views
2

경험 부족으로 디자인 딜레마가 발생했습니다.여러 가지 유형의 소유자가있는 엔티티에서 매핑을 설계하는 방법

서버라는 테이블이 있습니다. 한 칼럼에서이 서버의 "소유자"로 외래 키를 보유해야합니다. 그러나 소유자는 공급 업체 또는 고객이 될 수 있습니다. 그래서 3 가지 가능성이 있습니다

1) 당신 같은

VendorServer_Id | Server_Address 

CustomerServer_Id | Server_Address 

문제가 소유자의 각 유형에 대한 테이블을 작성 소유자

Server_Id | Server_Address | Vendor_Id | Customer_Id 

2) 각 유형의 열을 넣어 테이블이나 컬럼의 수는 소유자 유형의 수와 함께 증가하고 있습니다. 기존 솔루션은 무엇입니까?

답변

1

다음은 접근 방식의 단점입니다.
이 경우 새 소유자 유형이 내일 그림으로 등장하면 해당 ID를 유지하기 위해 새 열을 만들어야합니다. 또한 모든 행에서 정규화 된 모양이 아닌 vendor_id 또는 customer_id가 될 수 있습니다.
Sol 2. 향후 도입 될 새로운 소유자 유형에 대한 새 표를 작성해야합니다. 이것은 실제로 비싸지 만 Sol 1보다 좋습니다.
나는

Server_Detail을 다음과 같이 두 개의 테이블을 유지 보수 제안 :

Server_Id | Server_Address | Owner_Id 

Owner_Detail을 : Server_Detail

Owner_Id | Owner_Id_Type 

Owner_IdOwner_Detail 테이블에 Owner_Idforeign key입니다.

코드에 Owner_Typeenum으로 정의 할 수 있습니다. 코드는 오늘 VendorCustomer입니다. Owner_Id의 값은 Owner_Type 값을 기준으로 해석해야합니다.
또한


아래
Owner_Id_Type | Description 

Owner_Type을위한 테이블을 만들고 Server 표와 foreign key을 소개하는 것이 현명합니다. 이렇게하면 제한된 Owner_Type 만 허용됩니다.

+0

하지만이 솔루션을 사용하는 경우 Owner_Id는 ForeignKey가 아닙니다. – kommradHomer

+0

업데이트 내 대답은 지금 – sundar

+0

감사합니다.하지만 Owner_Id에 존재하지 않는 값을 쓰는 것에 제약이 없습니다. – kommradHomer

관련 문제