2011-09-23 6 views
1

다음은 시나리오입니다.ERD - 엔티티 관계 다이어그램 - 복잡하고 까다로운 관계

완전히 다른 두 엔티티는 동일한 방식으로 세 번째 엔티티와 독립적으로 관련됩니다. ERD에서 어떻게 표현합니까? 또는 (강화 ER)

예 :

  • 학생 BOOK
  • DEPARTMENT가 (같은 라이브러리에서) 책을 "빌려"(도서관에서) "빌려".

'BORROWS'관계를 두 번 정의하면 다이어그램의 모양이 어색하고 서툴기 때문에 구현의 복잡성도 커집니다.

동시에 STUDENT와 DEPARTMENT는 relationship-instance에서 상호 관련이 없으므로 3 자 관계를 선언 할 수 없습니다.

그러나 더 나은 방법을 찾을 수 없습니다.

어떻게 해결할 수 있습니까?

답변

1

위키 백과를 믿는다면 Enhanced ER은 상속을 허용합니다. 왜 적절한 관계가있는 BORROWER 엔티티가 없으며 STUDENT와 DEPARTMENT 하위 클래스에 하위 클래스가 있습니까?

+0

답장 aix에 감사드립니다. 확실히 해결책입니다. 구현 중 테이블 생성과 같은 복잡성에 대해 궁금합니다. 프로그래밍 컨텍스트에서 그렇다면 가장 적합한 해결책이 될 것입니다. DB 컨텍스트에서 여전히 확실하지 않습니다. – Firefox

+0

@Firefox : "다이어그램에서 어색하고 어색한 외형"을 제외하고 해결하려는 실제 문제는 무엇입니까? – NPE

+0

구현 중에 덜 복잡하지만 모든 요구 사항을 충족시키는 솔루션을 찾고 있습니다. 내가 말했을 때, 어색하고 서투른, 그것은 DB의 여러 테이블로 이어지는 두 개의 중복 관계 사례였습니다. – Firefox

0

비슷한 문제가 발생했습니다. 회사 또는 사람이 제품을 주문할 수있는 곳입니다.

order이 있는데 person 또는 company에 속할 수 있습니다. 그렇다면 관계를 어떻게 연결 하시겠습니까? 주문에 companyIdpersonId 외래 키가 있다고 생각하지만 어떻게 독점성을 부여합니까? 반환 된 데이터는 반드시 동일하지는 않습니다. 예를 들어 company에는 first name/last name 필드가 없습니다.

나는 그것이 firstname/lastname 중 문자열을 빌드 name 반환함으로써 수행하고, person의 경우 수있을 것 같아요, 그리고 company의 경우에 companyname 필드를 사용합니다.

+1

일반화로 해냈습니다. 예를 들어, 귀하의 경우 Customer 테이블을 생성했을 것입니다. Person & Company는 하위 클래스입니다. 고객에게 고객 ID가 있습니다. OrderInfo는 customerId를 가리키며, 여기서 주문자가 회사/사람인지를 파생시킬 수 있습니다. – Firefox