2011-12-17 2 views
0

이것은 숙련 된 데이터베이스 개발자에게는 아마도 간단한 문제 일 뿐이지 만 고민 중입니다 ... 특정 ER 다이어그램을 DB 모델로 변환하는 데 어려움이 있습니다. .하위 유형 크로스 링크를 사용하는 수퍼 유형/하위 유형 DB 디자인

I이 프레젠테이션 17 슬라이드 비슷한 설정을 가지고 http://www.cbe.wwu.edu/misclasses/mis421s04/presentations/supersubtype.ppt

슬라이드 (17)는 직원 유형 속성을 갖는 직원 퍼와 ER도를 도시하고, 고용 형태 시간별 자체 (아류로, 급여 컨설턴트), 이는 내 설계 상황과 매우 유사합니다.

내 경우에는 다른 직원의 보스가 될 수있는 유일한 직원 인 Salary Employees가 있다고 가정하고 특정 Salary 직원이 Hourly 및/또는 Salary Employee 및/또는 Consultant의 보스인지 여하튼 나타낼 수 있습니다. , none 또는 both), 데이터베이스 모델에서이 모델을 어떻게 설계 할 수 있습니까? 또한 일대 다 관계라고 생각하십니까?

두 테이블간에 FK_Employee 및 FK_SalariedEmployee가있는 두 개의 FKeys와 SalariedEmployee를 참조하는 PK-FK 관계를 만들 수 있습니다. 그러나 나는 현명한 해결책이 아닐 수도 있습니다. ... 왜 내가 확신 할 수는 없지만 (무결성 문제?).

이 해결책입니까 아니면 더 좋은 해결책입니까 아니면 더 좋은 해결책입니까?

미리 도움을 청하십시오!

답변

1

귀하의 사례는 "일반화 특성화"(간단히 말해서 Gen-Spec)로 알려진 디자인 패턴의 인스턴스처럼 보입니다. gen-spec 패턴은 객체 지향 프로그래머에게 친숙합니다. 상속 및 하위 클래스에 대해 강의 할 때 자습서에서 다룹니다.

gen-spec 패턴을 구현하는 SQL 테이블 디자인은 약간 까다 롭습니다. 데이터베이스 디자인 자습서는 종종이 주제를 더욱 돋보이게합니다. 그러나 그것은 실제로 반복적으로 나타난다.

"일반화 전문화 관계형 모델링"에서 웹을 검색하면이를 수행하는 방법을 가르쳐주는 몇 가지 유용한 기사를 찾을 수 있습니다. 이 포럼에서이 주제가 몇 번이나 나왔습니다.

이 기사에서는 일반적으로 모든 일반화 된 데이터를 캡처하기 위해 단일 테이블을 디자인하고 해당 하위 클래스에 특정한 모든 데이터를 포함 할 각 하위 클래스에 대해 하나의 특수 테이블을 만드는 방법을 보여줍니다. 흥미로운 부분은 서브 클래스 테이블에 대한 기본 키를 포함합니다. 하위 클래스 기본 키를 채우는 데 DBMS의 자 동 번호 기능을 사용하지 않습니다. 대신 일반화 된 테이블에 대해 얻은 기본 키 값을 적절한 하위 클래스 테이블에 전파하도록 응용 프로그램을 프로그래밍합니다.

이렇게하면 일반화 된 데이터와 특수화 된 데이터가 양방향으로 연관됩니다. 각 특수 하위 클래스에 대한 간단한보기는 일반화 된 특수 데이터를 수집합니다. 일단 손을 뻗어 버리면 간단합니다.

구체적인 경우 급여 직원 테이블에서 PK를 참조하도록 FK의 "보스"를 선언하면 트릭을 수행 할 수 있습니다. 이렇게하면 원하는 양방향 협회가 생기고 월급이없는 직원도 보스로 언급되지 않습니다.

+0

답변 해 주셔서 감사합니다. 나는 그것을 얻을 것이라고 생각하지만 확실히 확인해보십시오 : gen 테이블 (Employee)의 PK id는 사실 spec 테이블 중 하나의 PK id와 프로그래밍 방식으로 동일하게 만들어야합니까? 따라서 각 사양 테이블 (하위 유형)에는 항상 단일 gen 행과 관련된 다른 PKID가 있습니다.이것은 FK의 '보스'가 항상 gen 테이블 (수퍼 유형)과 관련 될 수 있음을 의미합니다. 나는 이것을 정확하게 이해 했는가? – TomL

+0

어 ... 나는 물론 다른 방법을 의미했다 ... 스펙 테이블 (예 : 샐러리 드 직원)의 PK ID는 프로그래밍 방식으로 gen 테이블 (Employee) 중 하나의 PK ID와 동일하게 만들어졌다 , 권리? – TomL

+0

예, 그 이상. "Boss of column"에 대한 FK는 Salary Employees 테이블의 한 행에 대한 PK와 동일한 값입니다. 이 PK는 Gen Employees 테이블의 한 행에있는 PK 값과 동일한 값이됩니다. 따라서이 공통 값을 기반으로 세 테이블을 모두 조인 할 수 있습니다. –

관련 문제