数据库理论 - 两个表之间的关系

时间:2010-03-16 20:06:04

标签: database-design many-to-many relational-database

我有一个包含两个表的数据库 - 让我们称之为Foo和Bar。每个foo可以与任意数量的条相关,并且每个条可以与任何数量的foos相关。我希望能够通过一个查询检索与某个条形相关联的foo,以及与某个foo相关联的条形。

我的问题是,记录这些关系的最佳方式是什么?我是否应该有一个单独的表格,其中包含每个关系的记录(例如,两列,foo和bar)? foo表是否应该有一列列表,反之亦然?我还有其他选择吗?

2 个答案:

答案 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的回答之外,我还想提供以下内容作为额外资源。我已经看到太多糟糕的数据库实现没有提出这个问题(不只是为了你,而是将来可能会看到这个的其他人)