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