我正在寻找一种设计模式来管理属于一起的关系数据库中的记录,例如:分组多个联系人。该组织本身不需要是一个实体。一个小组应该有无限数量的成员。
应该可以运行查询以获取给定记录的其他组成员。
我的想法是在一张桌子中管理它:
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
你怎么看?也许这是一个已知的模式 - 是否有链接可以找到更多相关信息?
编辑:将表“groups”重命名为“groupings”并将属性“group_id”重命名为“group”,以使此表中的记录显然不是一个组 - 它是一个链接一个团体和一个成员。集团不是实体。
答案 0 :(得分:2)
答案 1 :(得分:1)
您所概述的是一个非常标准的解决方案,两个实体之间的关系表 - 组和成员。我相信还有其他选择,但这是我要采用的解决方案。
答案 2 :(得分:1)
对我来说看起来很好 - 如果一个成员可以成为多个组的一部分,那么这是一个正常的解决方案,这可能是他们可以做到的。
我提出的唯一建议是使用SQL查询 - 我会使用JOIN代替,但这与您的架构无关:
SELECT g2.member_id
FROM groups g1
INNER JOIN groups g2 ON g1.group_id = g2.group_id AND g1.member_id <> g2.member_id
WHERE g1.member_id = 10