适当的循环关系建模

时间:2014-07-08 00:10:50

标签: sql entity-framework database-design relational-database relationship

我在建模这个数据库时遇到了麻烦。基本上,我有三个实体,即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的辅助表,其主要关键是4元组(A_id1,B_id,A_id2,C_id),其中(A_id1,B_id)是表B的外键,(A_id2,C_id)是外来的表C的关键。
  5. 一切都很好。但是,第5个要求使得这个设计变得毫无用处:相关的B和C元组必须与A的相同元组相关,即A_id1 = A_id2,总是。

    我的问题是:如何修改我的设计以保证所有要求?

1 个答案:

答案 0 :(得分: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);