我有一个包含两个表的数据库 - 让我们称之为Foo和Bar。每个foo可以与任意数量的条相关,并且每个条可以与任何数量的foos相关。我希望能够通过一个查询检索与某个条形相关联的foo,以及与某个foo相关联的条形。
我的问题是,记录这些关系的最佳方式是什么?我是否应该有一个单独的表格,其中包含每个关系的记录(例如,两列,foo和bar)? foo表是否应该有一列列表,反之亦然?我还有其他选择吗?
答案 0 :(得分:11)
这被称为多对多关系。 “标准”解决方案是设置第三个表,其中每个表中的主键存在关系。
第三个表称为联结表。来自维基百科的“交汇表”:http://en.wikipedia.org/wiki/Junction_table
举个例子:
Foo
UID
Col1
Col2
Bar
UID
Col1
Col2
Foo_Bar
UID
Foo_UID
Bar_UID
所以,在上面,可能会有很多foos和很多酒吧。与条形相关的每个foo和与foo相关的每个条形都存在于Foo_Bar表中。要获取与给定栏相关的所有foos,可以使用以下SQL:
select *
from foo
where uid in (
select foo_uid
from foo_bar
where bar_uid=<some bar uid>)
(未找到此问题的任何确切欺骗,但以下问题扩展了该主题。)
Many to many table design question
Many to Many Relation Design - Intersection Table Design
答案 1 :(得分:1)
这确实是一对多关系。除了Michael的回答之外,我还想提供以下内容作为额外资源。我已经看到太多糟糕的数据库实现没有提出这个问题(不只是为了你,而是将来可能会看到这个的其他人)