2016-10-08 5 views
1

안녕 내가 해결할 필요가 다음과 같은 데이터베이스 설계 문제가 있습니다.데이터베이스 ERD 루프 쿼리

섹션은 많은 직원

각 섹션이 여러 전화 번호

각 직원이 자신의 내부 전화 번호가를 고용하고있다.

저는 전화, 직원 및 섹션의 세 가지 항목을 만들었습니다. 전화 엔터티는 전화 번호가있는 번호를 PK로 저장합니다. 그러나 내가 만든 ERD에는 세 엔티티 사이에 루프가 있습니다. 어떤 간단한 해결책은 전화 실체를 사용하여 루프를 피하기 위해?

Phone Loop ERD Image

+0

전화에 sectionNumberFK가있는 이유는 무엇입니까? Section 엔티티에 Staff처럼 phoneNumber에 대한 참조가 있어야합니다. –

+0

Section과 Staff의 관계를 제거하고 각 전화 번호에 섹션이 할당 될 때 전화 번호 속성을 사용하여 섹션 번호 속성을 찾을 수 있습니까? – Ableman

+0

각 섹션에는 여러 개의 숫자가 있으므로 3NF에 있어야하므로 ERD에 다중 값 속성을 가질 수 없습니다. – Ableman

답변

1

ERD 루프에 대한 내 이해가 귀하의 것과 다릅니다. 내 이해에서, ERD 루프는 외래 키 참조가 끝없이 돌아 다닐 때입니다. 귀하의 경우, Section에 Staff에 대한 FK 참조가있는 경우 루프가 생깁니다. 그런 다음 섹션 참조 직원, 직원 참조 전화 및 전화 참조 섹션, 루프.

당신이 그런 식으로 모델을 만들지 않았습니다. 귀하의 경우에 그렇게 잘못되었을 수 있습니다. 직원을 참조하는 섹션과 함께 다른 방법으로 올바르게 모델링했습니다.

정말 루프가 없습니다. 직원은 전화와 섹션 모두를 참조하지만 이들은 독립적 인 관계입니다.

그렇다면 왜 아직도 문제가 있습니까?

+0

안녕하세요. 의견에 감사드립니다. 예, 그렇습니다.하지만이 프로젝트에서 작업하고있는 일부 사람들은 이미지의 ERD에 루프가 있는지 확실하지 않았습니다. 그 문제를 해결해 주셔서 감사합니다. – Ableman

0

당신은 대부분 전화 및 섹션 사이의 관계를 제거 할 수 있습니다. 한 명의 직원이 각 전화에 대해서만 답변을하면 이미 문제가 해결 된 것입니다. 해당 전화에 응답하는 직원 구성원을 기준으로 섹션에있는 전화를 알 수 있습니다.

전화가 둘 이상의 직원에 의해 응답 될 수있는 경우 해당 다 대다 관계를 나타 내기 위해 연관 테이블이 필요합니다.

각 스탭 멤버의 기본 전화 번호를 계속 추적해야하는 경우 특정 테이블의 전화 번호가 특정 사용자의 기본 번호임을 나타내는 "IsPrimary"플래그를 연결 테이블에 추가 할 수 있습니다. 이 경우 직원 구성원이 둘 이상의 기본 전화를 가지지 않도록 적어도 직원 구성원 참조에 대한 연관 테이블에 고유 한 제약 조건을 적용하고자 할 것입니다.

전화가 둘 이상의 직원 구성원의 기본이 될 수 없도록 고유 제한 조건을 추가 할 수도 있습니다.

업데이트는 대부분 전화 번호가 두 기관에서 고유하도록 할 것, 두 전화 엔티티 두 개의 전화 엔티티를하기로 결정하더라도

를 처리한다. 상호 배타적 인 하위 유형을 구현하여이를 수행 할 수 있습니다. 이를 수행하는 방법에 대한 좋은 설명은 여기에서 찾을 수 있습니다. How to Implement Referential Integrity in Subtypes

일단 하위 유형이 있으면 원래 모델을 사용할 수 있습니다. SectionPhone은 부속 유형 중 하나이며 현재 귀하의 전화 항목에있는 것입니다. StaffPhone은 Staff 테이블에 의해 참조되는 다른 부속 유형이됩니다.

+0

안녕하세요. 덕분에 할당 된 섹션 전화 번호 (섹션 당 많은 수)가 모든 직원, 즉 특정 번호가 아닌 다른 사람들과 공유 될 수 있습니다. 어떤 직원에게. 이를 통해 직원들은 다른 요일과 시간대에 책상 전화를 공유 할 수 있습니다. 또한 모든 직원은 공유 섹션 전화 번호의 일부가 아닌 고유 한 전화 번호가 있어야합니다. – Ableman

+0

전화 번호가 하나의 실제 전화에 할당되어 있습니까? 이것은 귀하의 전화 실체에 근거한 경우 인 것으로 보입니다. – Bobby

+0

섹션별로 여러 대의 전화를 반영해야합니다. 외침 센터 전화 같이. 그리고 직원 내부 전화는 특정 직원에게 직접 전화입니다. – Ableman

관련 문제