나는 다음과 같은 테이블이 있습니다모든 열이 없지만 다른 외래 키를 통해 가져올 수있는 복합 기본 키를 참조하는 외래 키를 추가하는 방법은 무엇입니까?
create table AAA
(
AAA_ID NUMBER
);
alter table AAA
add constraint AAA_PK
primary key (AAA_ID);
create table BBB
(
BBB_ID NUMBER,
AAA_ID NUMBER
);
alter table BBB
add constraint BBB_PK
primary key (BBB_ID, AAA_ID); --IMPORTANT
alter table BBB
add constraint BBB_FK_01
foreign key (AAA_ID)
references AAA (AAA_ID);
create table CCC
(
CCC_ID NUMBER,
AAA_ID NUMBER
);
alter table CCC
add constraint CCC_PK
primary key (CCC_ID); --IMPORTANT
alter table CCC
add constraint CCC_FK_01
foreign key (AAA_ID)
references AAA (AAA_ID);
create table CCC_BBB
(
CCC_ID NUMBER,
CCC_BBB_ID NUMBER,
BBB_ID NUMBER
);
alter table CCC_BBB
add constraint CCC_BBB_PK
primary key (CCC_ID, CCC_BBB_ID);
alter table CCC_BBB
add constraint CCC_BBB_FK_01
foreign key (CCC_ID)
references CCC (CCC_ID);
내가 CCC_BBB
이 BBB
를 참조에 외래 키 제약 조건을 추가 할 수 있습니다. BBB_ID
은 CCC_BBB
에 직접 존재하지만, AAA_ID
은 없습니다. 그러나, AAA_ID
은 에 있으며, 이는 CCC_BBB_FK_01
으로 참조됩니다. SQL에서이 제약 조건을 표현할 수 있습니까?
표준 호환 솔루션을 선호하지만 오라클 전용 솔루션도 환영합니다.
편집. 실제 문제가 무엇인지 명확히하라는 질문을 받았으므로이 질문은 제 시도입니다. 차라리 실제 문제 영역을 논의하지 않겠습니다.
AAA는 프로세스입니다. BBB는 프로세스 단계입니다. 여러 프로세스는 이름이 비슷하지만 단계가 다르므로 테이블에 복합 키가 있습니다. CCC는 프로세스 인스턴스입니다. ID는 고유하므로 테이블에 복합 PK가 없습니다. CCC_BBB는 특정 인스턴스에서 수행 된 단계 목록입니다.
프로세스 인스턴스에 대한 단계 목록에 해당 프로세스에 허용되는 단계 만 포함되어 있는지 확인해야합니다.
나는 당신이 묘사 한 것이 가능하다고 믿지 않습니다. –
당신의 이론적 인 본보기가 완전한 의미는 아닙니다. – jarlh
모든 테이블을 만든 후에 모든 alter 명령을 실행할 수있는 편도 –