유지 보수 항목간에 다 대다 관계를 원할 경우 제안하는 것과 같이 연관 엔티티를 사용하는 유일한 이유가 있습니다. 그것이 당신이 추구하는 것이라면 옵션 1이 당신이하는 일입니다. 스키마는
create table MaintenanceProgram
(
ProgramCode int not null ,
... -- other non-key attributes here
primary key (ProgramCode) ,
)
create table MaintenanceItem
(
ProgramCode int not null ,
MaintenanceCode int not null ,
... -- other non-key attributes here
primary key (ProgramCode , MaintenanceCode) ,
foreign key (ProgramCode)
references MaintenanceProgram (ProgramCode) ,
)
create table MaintenanceItemMap
(
ProgramCode int not null ,
ParentMaintenanceCode int not null ,
ChildMaintenanceCode int not null ,
primary key (ProgramCode , ParentMaintenanceCode , ChildMaintenanceCode) ,
foreign key (ProgramCode , ParentMaintenanceCode)
references MaintenanceItem (ProgramCode , MaintenanceCode ) ,
foreign key (ProgramCode , ChildMaintenanceCode )
references MaintenanceItem (ProgramCode , MaintenanceCode ) ,
check (ParentMaintenanceCode != ChildMaintenanceCode) ,
)
이 모든 관련 유지 보수 항목이 같은 ProgramCode를 공유 할 수 있도록하고 유지 보수 항목 자체에 (점검 제한 조건)를 매핑 할 수 없습니다 그런 일처럼 보일 것입니다.
그러나 문제 문은 상위/하위 관계를 말하며 계층/트리와 유사합니다.이 경우, 당신이 원하는 것 스키마는 다음과 같이 보일 것입니다 :
create table MaintenanceProgram
(
ProgramCode int not null ,
... -- other non-key attributes here
primary key (ProgramCode) ,
)
create table MaintenanceItem
(
ProgramCode int not null ,
MaintenanceCode int not null ,
ParentMaintenanceCode int null ,
... -- other non-key attributes here
primary key (ProgramCode , MaintenanceCode) ,
foreign key (ProgramCode )
references MaintenanceProgram ( ProgramCode) ,
foreign key (ProgramCode , ParentMaintenanceCode)
references MaintenanceItem (ProgramCode , MaintenanceCode ) ,
check (MaintenanceCode != ParentMaintenanceCode or ParentMaintenanceCode is null) ,
)
을 위의 각 유지 보수 항목은 단일 유지 보수 프로그램과 관련이 있다고 말한다; 반대로 각 유지 관리 프로그램에는 0 개 이상의 유지 관리 항목이 있습니다.
또한 각 유지 관리 항목에는 0 또는 1 개의 상위 유지 관리 항목이 있어야하며,이 유지 관리 항목은 동일한 유지 관리 프로그램과 관련되어야합니다.
점검 제한 조건은 주어진 유지 보수 항목이 자체 상위가 아닐 수 있음을 나타냅니다.
필자의 최고 스키마는 필자가 추구 한 것입니다. 다 대다 관계가 필요합니다. 고맙습니다! – Reafidy