相互引用的表

Tables that reference each other

我有 2 个循环依赖表; 每个小组都有一个领导成员

+---------+-------+----------+
| GroupId | Group | MemberId |
+---------+-------+----------+
|       1 | g1    |        1 |
+---------+-------+----------+

并且每个成员都属于一个组:

+----------+--------+---------+
| MemberId | Member | GroupId |
+----------+--------+---------+
|        1 | m1     |       1 |
+----------+--------+---------+

一个可能的解决方案是:

+----------+--------+---------+---------+
| MemberId | Member | GroupId | Leading |
+----------+--------+---------+---------+
|        1 | m1     |       1 |       1 |
+----------+--------+---------+---------+

但会导致非规范化,因为成员与领导者的比例很高。

最好的设计方法是什么?

这两个表设计正确。 您拥有所有信息:

1. groupID,GroupName,LeaderMemberID; 
2. MemberID,MemberName,MemberGroupID;

问题可能会出现,如果同一个组有多个 Leader,and/or每个 Member 可能属于多个组。

但您可以轻松地将设计更改为以下常用方法:

1. groupID,GroupName; 
2. MemberID,MemberName;
3. MemberID,GroupID,isLeader;

希望对您有所帮助。

假设每个小组只能有一个领导者,我会说你的第一个例子很好。尽管我会称领导者字段为 "LeadMemberId" 或类似的东西而不仅仅是 "MemberId",因为其他查看 table 的人可能会对在其中拥有一个成员 ID 意味着什么感到非常困惑小组记录。

如果一个组可以有多个组长,那么我会在成员记录中添加一个 "IsLeader" 标志。大多数记录将具有 false 或 0 的事实是无关紧要的。但是,如果只有一个,我会避免这样做,因为数据结构暗示可以有多个,并且有人可能会犯错误并在多个记录中将标志设置为真,这可能会让您感到悲伤.