Plane
이 PlaneID, PlaneTypeID
![enter image description here](https://i.stack.imgur.com/Llqsc.png)
편집
create table Pilot (PilotID integer);
alter table Pilot add constraint PK_Pilot primary key (PilotID);
create table PlaneType (PlaneTypeID integer);
alter table PlaneType add constraint PK_PlaneType primary key (PlaneTypeID);
create table PilotQualification (PilotID integer, PlaneTypeID integer);
alter table PilotQualification
add constraint PK_PilotQual primary key (PilotID, PlaneTypeID)
, add constraint FK1_PilotQual foreign key (PilotID) references Pilot(PilotID)
, add constraint FK2_PilotQual foreign key (PlaneTypeID) references PlaneType(PlaneTypeID) ;
create table Plane (PlaneID integer, PlaneTypeID integer);
alter table Plane
add constraint PK_Plane primary key (PlaneID)
, add constraint FK1_Plane foreign key (PlaneTypeID) references PlaneType(PlaneTypeID) ;
create unique index AK_Plane on Plane (PlaneID, PlaneTypeID) ;
create table PlanePilot (PlaneID integer, PlaneTypeID integer, PilotID integer) ;
alter table PlanePilot
add constraint PK_PlanePilot primary key (PlaneID, PlaneTypeID, PilotID)
, add constraint FK1_PlanePilot foreign key (PilotID, PlaneTypeID) references PilotQualification(PilotID, PlaneTypeID)
, add constraint FK2_PlanePilot foreign key (PlaneID, PlaneTypeID) references Plane(PlaneID, PlaneTypeID)
, add constraint FK3_PlanePilot foreign key (PilotID) references Pilot(PilotID) ;
밤은이 솔루션에 고유 인덱스 (AK)가 바로 각 PlaneType은 하나 개의 평면을 가질 수 있습니다 보장? –
@CYT NO. 각 PlaneType은 많은 평면을 가질 수 있습니다. 그것은 Plane에 배정 된 Pilot이 그 비행기에 대한 자격을 가지고 있음을 보증합니다. PLanePilot의 외래 키는 FK1'PlanePilot (PilotID, PlaneTypeID) REFERENCES PilotQualification (PilotID, PlaneTypeID)'및 FK2' PlanePilot (PlaneID, PlaneTypeID) 참조 평면 (PlaneID, PlaneTypeID) 및 FK3' PlanePilot (파일럿 ID)입니다.)' –
FK1의'PlaneTypeID'와 FK2의'PlaneTypeID'는'PlanePilot'에서 같은 열입니까? 데이터베이스가 두 열 모두 동일한 값을 갖는 것을 어떻게 보장합니까? –