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

ian*_*n93 3 database-design many-to-many relational-database

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

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

Mic*_*odd 11

这被称为多对多关系."标准"解决方案是设置第三个表,其中每个表中的主键存在关系.

第三个表称为联结表.来自维基百科的"交汇表":http://en.wikipedia.org/wiki/Junction_table

举个例子:

Foo
UID
Col1
Col2

Bar
UID
Col1
Col2

Foo_Bar
UID
Foo_UID
Bar_UID
Run Code Online (Sandbox Code Playgroud)

因此,在上面,可能会有很多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>)
Run Code Online (Sandbox Code Playgroud)

(没有找到这个问题的任何确切的愚蠢,但以下问题扩展了该主题.)

多对多的表设计问题
多对多关系设计 - 交叉表设计