成员和组表

时间:2012-07-03 16:00:34

标签: mysql sql

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

2 个答案:

答案 0 :(得分:4)

N:M关系通常被建模为数据库中的额外表。 因此,您将拥有一个Member - 表,一个Group - 表和一个MemberInGroup - 表,您只需存储两个主键。

像这样:

    +----+----------------+      +----+---------------+      +-----+----+----+
    |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 - 表中存储多值属性与第一个普通表单(http://en.wikipedia.org/wiki/Database_normalization#Normal_forms)冲突,该表单声明每个属性必须是单个值。

答案 1 :(得分:1)

这是一个经典的many to many relationship

需要Junction table,这将包含两个表中的主键。

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