0

我在建模該數據庫時遇到了問題。基本上,我有三個實體,即A,B和C,這樣:循環關係的正確建模

  1. A有主鍵A_id。
  2. A和B有一個零對多的關係,所以B可能有一對主鍵(A_id,B_id)。
  3. A和C有一個零對多的關係,所以C可能有一對主鍵(A_id,C_id)。
  4. B和C有多對多的關係。因此,我可以創建一個名爲BC的輔助表,其中(A_id1,B_id,A_id2,C_id)是表B的外鍵,(A_id2,C_id)是外鍵表C的關鍵。

一切都很好。然而,第五個要求使得這個設計非常無用:相關的B和C元組必須與A的相同元組相關,即A_id1 = A_id2,總是。

我的問題是:如何修改我的設計以保證所有要求?

+0

難道你不能讓表BC作爲(A_id,B_id,C_id)嗎? – Bob

+0

我該如何實現? – TapiocaCom

+0

請看下面的答案。如果我理解你的要求,那應該這樣做。讓我知道如果我失去了一些東西。 – Bob

回答

0

這應該符合所有要求。

create table a(a_id number); 
alter table a add constraint pk_a primary key(a_id); 

create table b(a_id number, b_id number); 
alter table b add constraint pk_b primary key(a_id, b_id); 
alter table b add constraint fk_b_a foreign key(a_id) references a(a_id); 

create table c(a_id number, c_id number); 
alter table c add constraint pk_c primary key(a_id, c_id); 
alter table c add constraint fk_c_a foreign key(a_id) references a(a_id); 

create table bc(a_id number, b_id number, c_id number); 
alter table bc add constraint pk_bc primary key(a_id, b_id, c_id); 
alter table bc add constraint fk_bc_ab foreign key(a_id, b_id) references b(a_id, b_id); 
alter table bc add constraint fk_bc_ac foreign key(a_id, c_id) references c(a_id, c_id);