我有以下表格:如何在沒有所有列時添加引用複合主鍵的外鍵,但可以通過另一個外鍵獲取它們?
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
中,其由CCC_BBB_FK_01
引用。有沒有可能在SQL中表達這個約束?
我更喜歡符合標準的解決方案,但也歡迎Oracle特定的解決方案。
編輯。我被要求澄清什麼是現實世界問題,所以這是我的嘗試(我不想在這裏討論真正的問題域):
AAA是一個過程。 BBB是一個過程步驟。幾個進程具有相似名稱的步驟,但含義不同,所以該表具有組合鍵。 CCC是一個流程實例。他們的ID是唯一的,所以表沒有組合PK。 CCC_BBB是在特定實例中採取的步驟列表。
我需要確保流程實例的步驟列表僅包含那些流程允許的步驟。
我不相信你所描述的是可能的。 –
似乎你的理論範例並不完全合理。 – jarlh
在創建完所有表後,您可以使用一種方法觸發所有alter命令 –