メンバーとグループの 2 つのテーブルを持つデータベース設計について考えています。各メンバーは少なくとも 1 つのグループに属しますが、メンバーは複数のグループを持つ場合があります。これを反映して、グループ メンバーシップの ID の配列を作成し、これをメンバーのレコードに外部キーとして格納する最良の方法はありますか?
質問する
93 次
2 に答える
4
N:M の関係は、通常、データベース内の追加のテーブルとしてモデル化されます。したがって、両方の主キーを格納するだけの -table Member
、Group
-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 に答える