我正在寻找一种设计模式来管理关系数据库中属于一起的记录,例如,分组多个联系人。该组本身不需要是一个实体。一个小组应该有无限数量的成员。用于分组记录的数据库模式模式
应该可以运行查询来获取给定记录的其他组成员。
我的想法是在一个表中进行管理:
GROUPINGS
integer group
integer member_id
primary_key (group, member_id)
foreign_key (member_id)
编辑:要注意的是group
是不的外键。这只是一个独特的标识符。应该增加每个建成的会员组。
下面是一个例子内容:
GROUPINGS group | member_id
-----------------
1 | 10
1 | 11
1 | 12
2 | 20
2 | 21
3 | 10
3 | 40
这个例子包含三组:(10,11,12)和(20,21)和(10,40)。你看到10个包含在两个组中。
要查询的“邻居”成员10的,我们可以用这个SQL语句:
SELECT g2.member_id
FROM groupings g1
JOIN groupings g2 ON g1.group = g2.group
AND g1.member_id != g2.member_id
WHERE g1.member_id = 10
=> 11,12,40
你觉得呢?也许这是一个已知的模式 - 有没有链接可以找到更多关于这个?
编辑:重命名表“组”为“集团”,并更名为属性“GROUP_ID”到“组”,使之明显,在这个表中的记录是不是一组 - 这是一组与之间的联系会员。集团不是一个实体。
成员可以属于超过1组? – Chris
@Chris:是的,这是可能的。我已经增强了示例来演示它。 –