1

나는 데이터베이스를 디자인하고 있는데이 주제에 대한 많은 경험이 없기 때문에 나는 어떻게 풀릴 지 모르는 문제에 직면 해있다.데이터베이스 설계의 논리적 설계 단계에서 일반화를 구현할 때?

내 개념 모델에는 고객이 주문하고 재고 시스템이 모니터링하는 "차량"으로 알려진 개체가 있습니다. 이 상위 유형에는 두 가지 부속 유형 "Motorcar"및 "Motorcycle"이 있습니다. 사용자는 하나 또는 다른 하나 또는 둘 다를 주문할 수 있습니다.

이제 논리적 설계 단계에 있으며 시스템에서 두 가지 유형의 제품을 허용 할 수있는 방법을 알아야합니다. 내가 가진 문제는 각각의 객체를 동일한 관계로 분리하면 그 객체에 아무런 쓸모가없는 열이 생기게된다는 것입니다.

예를 들어 "Motorcars"와 "Motorcycles"둘 다 "Vehicles"및 모든 속성을 지닌 일반 테이블이있는 경우 자동차에는 일부 오토바이 속성이 필요하지 않으며 오토바이는 필요하지 않습니다. 모든 차 속성이 필요합니다.

이 문제를 해결할 방법이 있습니까?

+1

가능한 [데이터베이스 디자인 상속과 같은] (http://stackoverflow.com/questions/554522/something) 데이터베이스 디자인에서 상속) –

답변

3

결정 사항은 공유 정보량에 따라 결정되어야합니다. 나는 그들에 관한 모든 속성과 규칙을 확인함으로써 시작할 것입니다.

대부분의 정보가 공유되는 경우 여러 테이블로 분할되지 않을 수 있습니다. 반면에, 당신은 항상 테이블을 분리 한 다음 사용하기 쉬운 뷰로 결합 할 수 있습니다.

예를 들어 공유 정보 만있는 차량 테이블을 만든 다음 차량 테이블에 대한 외래 키가있는 자동차 테이블과 차량 테이블에 외래 키가있는 오토바이 테이블을 만들 수 있습니다. 당신이 동일한 차량을 지칭하는 모터 사이클 행과 오토바이 행을 갖지 못하게하는 데는 몇 가지 어려움이 있습니다. 따라서 다른 많은 가능성이 있습니다. 그러나 대부분의 정보가 일반적이라면 불필요한 것입니다. 하나의 차량 테이블에 사용되지 않은 열이 있습니다. 제약 조건을 적용하여 채워지지 않아야하는 유형의 열이 NULL인지 확인하십시오.

+0

동의 함. Purist 접근법은 모든 공유 속성에 대해 VEHICLE 테이블을 사용하는 것과 별도의 속성에 대해 MOTORCAR W MOTORCYCLE 테이블을 사용하는 것입니다. 수퍼 유형 및 부속 유형을 결합하는보기 (MOTORCAR_VIEW 및 MOTORCYCLE_VIEW?)를 사용하여 한 유형 또는 다른 유형의 모든 인스턴스에 대한 완전한 그림을 제공 할 수 있습니다. 이 방법으로 개념 모델로 모델링 할 수도 있지만 실제 모델의 단일 테이블로 병합 할 수 있습니다. 파티션 속성으로 구동되는 제한 조건을 사용하면 실제 테이블을 깨끗하게 유지할 수 있습니다. –