我有一个包含两个表的数据库 - 让我们称它们为 Foo 和 Bar。每个 foo 可以与任意数量的 bar 相关,每个 bar 也可以与任意数量的 foo 相关。我希望能够通过一个查询检索与特定 bar 关联的 foo,以及与特定 foo 关联的 bar。
我的问题是,记录这些关系的最佳方式是什么?我是否应该有一个单独的表来记录每个关系(例如两列,foo 和 bar)? foo 表是否应该有一个用于柱形列表的列,反之亦然?还有我忽略的另一种选择吗?
这就是所谓的多对多关系。 “标准”解决方案是设置第三个表,其中每个表中存在关系的每一行都有主键。
第三个表称为连接表。维基百科的“连接表”:http://en.wikipedia.org/wiki/Junction_table http://en.wikipedia.org/wiki/Junction_table
举个例子:
Foo
UID
Col1
Col2
Bar
UID
Col1
Col2
Foo_Bar
UID
Foo_UID
Bar_UID
所以,在上面,可能有很多 foo 和很多 bar。与 bar 相关的每个 foo 以及与 foo 相关的每个 bar 都将存在于 Foo_Bar 表中。要获取与给定 bar 相关的所有 foo,您可以使用以下 SQL:
select *
from foo
where uid in (
select foo_uid
from foo_bar
where bar_uid=<some bar uid>)
(没有找到这个问题的任何确切的重复,但以下问题扩展了该主题。)
多对多表设计问题 https://stackoverflow.com/questions/2439893/many-to-many-table-design-question
多对多关系设计——交集表设计 https://stackoverflow.com/questions/977615/many-to-many-relation-design-intersection-table-design
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)