【发布时间】:2012-07-21 01:09:12
【问题描述】:
我正在考虑一种数据库设计,它有两个表 Member 和 Groups。每个成员将至少属于一个组 - 但成员可能有多个组。反映这一点的最佳方法是为组成员创建一个 id 数组并将其作为外键存储在成员的记录中吗?
【问题讨论】:
我正在考虑一种数据库设计,它有两个表 Member 和 Groups。每个成员将至少属于一个组 - 但成员可能有多个组。反映这一点的最佳方法是为组成员创建一个 id 数组并将其作为外键存储在成员的记录中吗?
【问题讨论】:
N:M 关系通常被建模为数据库中的一个额外表。
因此,您将拥有一个 Member-table、一个 Group-table 和一个 MemberInGroup-table,您可以在其中存储两个主键。
像这样:
+----+----------------+ +----+---------------+ +-----+----+----+
|m_id|member | |g_id|group | |mg_id|m_id|g_id|
+----+----------------+ +----+---------------+ +-----+----+----+
|1 |tom | |1 |groupA | |1 |1 |1 |
|2 |tim | |2 |groupB | |2 |1 |2 |
|3 |michael | +----+---------------+ |3 |2 |1 |
+----+----------------+ +-----+----+----+
您的想法 - 在您的 Member-table 中存储多值属性与第一个范式 (http://en.wikipedia.org/wiki/Database_normalization#Normal_forms) 冲突,后者指出每个属性必须是单个值。
【讨论】:
这是经典的many to many relationship。
Junction table 是必需的,这将包含两个表中的主键。
您需要 3 个表 - 成员、组和新的联结表,您可以将其称为 members_groups。
【讨论】: