【问题标题】:One table used in multiple hasmany relationships一张表用于多个hasmany关系
【发布时间】:2014-04-02 01:27:35
【问题描述】:
我正在为我正在开发的网站开发我的表,在过去几年没有做太多 SQL 之后,我有点生疏了。我理解规范化等概念,但这有点令人困惑:
我在网站中有几个部分将列出联系人,主要是在活动页面和网站的联系人页面上。我会有一个类似于(仅作为示例)eventlisting hasmany contacts 的关系表,这很好,因为至少我可以将许多联系人附加到事件列表中。
如果有一个表只有一个指向我的主要联系人表的外键,并用它来列出我的主要联系人,这会很好吗?
【问题讨论】:
标签:
mysql
sql
normalization
foreign-key-relationship
has-many
【解决方案1】:
如果一个活动只能有一个主要联系人,您可以通过两种方式进行:
在Events 表中添加一个primary_contact_id 列,作为Contacts 表的FK。
使用关系表 Event_Primary_Contacts,包含两个 FK:Event_id 和 Contact_id。这些应该是表中的唯一键。
您还可以在Event_Contacts 表中添加一个布尔值Primary 列。但是,这不允许数据库实现每个事件只能有一个主要联系人的约束。
【解决方案2】:
通常在一对多关系中,包含 FK 的是“多”。这样,许多事件列表可以映射到同一个联系人列表。
因此,在您的情况下,联系人表将具有您的事件列表表的 FK。
如果出于某种原因您需要建立多对多关系,您可能希望创建一个联接表,您的事件列表和联系人表都将具有 FK。