【问题标题】:Members and Groups table成员和组表
【发布时间】:2012-07-21 01:09:12
【问题描述】:

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    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) 冲突,后者指出每个属性必须是单个值。

    【讨论】:

      【解决方案2】:

      这是经典的many to many relationship

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多