1

我正在考虑一种数据库设计,它将有两个表成员和组。每个成员将至少属于一个组 - 但成员可能有多个组。反映这一点的最佳方法是为组成员创建一个 id 数组并将其作为外键存储在成员的记录中吗?

4

2 回答 2

4

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   |
    +----+----------------+                                  +-----+----+----+

您的想法 - 在您的 -table 中存储多值属性Member与第一个范式(http://en.wikipedia.org/wiki/Database_normalization#Normal_forms)冲突,后者指出每个属性必须是单个值。

于 2012-07-03T16:05:10.523 回答
1

这是一个经典的多对多关系

需要一个联结表,这将包含两个表中的主键。

您将需要 3 个表 - 成员、组和新的联结表,您可以将其称为 members_groups。

于 2012-07-03T16:09:06.807 回答