处理三个表,其中包含两个一对多的关系

时间:2011-11-18 17:19:56

标签: mysql database database-design relational-database entity-relationship

我有三个表,A,B和C. A有很多B,B有很多C.设计主键和这两者之间关系的最佳方法是什么。很抱歉问一个设计问题,但我不知道是否使用

  1. 一张额外的表来映射A(pkey) - B(pkey) - C(pkey)或
  2. 两个exta表分别映射A-B和B-C或
  3. 使用外键关系而不使用任何额外的表格(如果是这样,请告诉我关键列应该如何来)
  4. 非常感谢。

3 个答案:

答案 0 :(得分:3)

选项(3)听起来最自然:

A: { id, *, *, ... };

B: { id, a_id references(A.id), *, *, ... }

C: { id, b_id references(B.id), *, *, ... }

查询:

SELECT ... FROM A JOIN B ON (A.id = B.a_id) JOIN C ON (B.id = C.b_id);

始终使数据库模型成为数据中的逻辑关系,而不是反过来!

答案 1 :(得分:2)

我会用三个。在1:多关系中不需要额外的表格。多方持有指向单侧的外键。

答案 2 :(得分:2)

选择3是要走的路。

A {a_pk, ...}
B {b_pk, ..., a_pk_as_fk}
C {c_pk, ..., b_pk_as_fk}