2013-09-04 2 views
0

미안하지만 .................. 5 개의 테이블 데이터베이스를 설정하려고합니다 .... Truck_fleets, cabs, trailers, tires, tyre_pressures. "타이어"가 "택시"와 "트레일러"의 자식이어야합니다. 트럭의 택시와 트럭의 트레일러 모두 타이어가 있습니다!데이터베이스에 공유 된 관계

내가 그것을 설정하는 것에 나는 "타이어"에 2 개의 키로 끝난다. 단지 어느 쪽인가 만 만족하게된다. 타이어는 택시 또는 트레일러에 속합니다.

나는 이것에 대해 읽을 수있는 제안이나 참고 자료를 제공합니다. 이건 정말 어떻게 cabs 많이하고 trailers에 따라

감사

+0

나는 당신이 실세계에 대해 이야기하고 있다고 생각합니다. 권리 ? –

답변

0

공통점이있다. 하나의 접근법은 여러분이 tyre 테이블에 두 개의 필드를 가지고있는 경로 일 것입니다. 체크 제약이 하나만 null이되도록 보장하고, 두 타이어가 모두 하나 뿐이며 유일한 한 부모.

또 다른 옵션은 예고편과 트럭을 하나의 테이블에 저장하고 트럭 또는 예고편인지 여부를 저장하는 Type 필드가있는 것입니다. 그러면 타이어 테이블에는 ID와 연결할 수있는 단일 필드 만 필요합니다. 이 메인 테이블. 이 테이블에 트럭 및 트레일러에있는 모든 열이 있는지 확인해야합니다.

또 다른 옵션은 상속을 사용하는 것입니다.이 방법은 단일 테이블 접근 방식과 비슷하지만 두 유형 또는 비공유 하위 사이에 겹치는 열이 많지 않은 경우 더 나은 접근 방법이 될 수 있습니다. 그래서 당신과 같이 테이블이 있습니다

차량 {VehicleID (PK), SharedColumn1, SharedColumn2}

트럭 {VehicleID (PK, FK [자동차]), TruckColumn1, TruckColumn2}

트레일러 {VehicleID (PK, FK [차량]) TrailerColumn1, TrailerColumn2}

타이어 {TyreID (PK), VehicleID (FK [Vehicl E), TryeColumn1}

TruckOnlyChild {ID (PK), VehicleID (FK [트럭])}

3 방법의 각각은 장단점의있다, 당신은 정말 우선적 인 선택 필요 너에게. 가치가있는 부분에 대해서는 개인적으로 제 요구 사항에 따라 두 번째 옵션 중 하나를 선택합니다. 속성이 충분하지 않은 경우 두 번째 옵션을 고려하지만 널 (NULL) 열이 많지 않고 EAV를 사용합니다.

+0

귀하의 의견에 진심으로 감사드립니다. –

1

두 개의 관계 테이블을 사용해보십시오. 하나는 택시를 타이어에 연결하고 cab_tyres라고하고 다른 하나는 타이어에 연결하는 예고편을 trailer_tyres라고합니다.

각 테이블에는 두 개의 id가 있습니다.

cab_tyres: 
int cab_id //FK to cab table 
int tyre_id //FK to tyre table 

trailer_tyres: 
int trailer_id //FK to trailer table 
int tyre_id //FK to tyre table 

조금 더 자세히 설명하자면, 엔티티 관계는 엔티티 관계가 엔티티이며 관련 항목에 따라 입력된다는 것입니다. 유형을 정상적으로 혼합하지 않으므로 두 개의 관계 테이블이 있습니다.

택시와 예고편을 연결하려면 다른 관계 엔티티 등이되어야합니다.

+0

흠, 다른 대부분의 요구 사항이 없으면이 버전을 선호한다고 생각합니다. 하지만 테이블 레이아웃을 표시하는 방법을 정리할 수도 있습니다. –

+0

완료. 나는 어떤 이론도 덧붙였다. 이 자료는 종종 문헌에서 지나치게 복잡해 지거나 데이터베이스 문서에서 지나치게 단순화됩니다. 나는 균형을 잡으려고 노력하고있어. 확실하지 않으면 내가 성공하지만 그것을 시도하는 것을 기쁘게 생각합니다 :). – emperorz