1

メンバーとグループの 2 つのテーブルを持つデータベース設計について考えています。各メンバーは少なくとも 1 つのグループに属しますが、メンバーは複数のグループを持つ場合があります。これを反映して、グループ メンバーシップの ID の配列を作成し、これをメンバーのレコードに外部キーとして格納する最良の方法はありますか?

4

2 に答える 2

4

N:M の関係は、通常、データベース内の追加のテーブルとしてモデル化されます。したがって、両方の主キーを格納するだけの -table MemberGroup-table 、および-table があります。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   |
    +----+----------------+                                  +-----+----+----+

あなたのアイデア - テーブルに複数値の属性を格納することは、各属性が単一の値でなければならないことを示す最初の正規形 ( http://en.wikipedia.org/wiki/Database_normalization#Normal_formsMember ) と競合します。

于 2012-07-03T16:05:10.523 に答える
1

これは典型的な多対多の関係です。

ジャンクション テーブルが必要です。これには、2 つのテーブルの主キーが含まれます。

メンバー、グループ、および members_groups と呼べる新しいジャンクション テーブルの 3 つのテーブルが必要です。

于 2012-07-03T16:09:06.807 に答える