相互引用的表
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 的事实是无关紧要的。但是,如果只有一个,我会避免这样做,因为数据结构暗示可以有多个,并且有人可能会犯错误并在多个记录中将标志设置为真,这可能会让您感到悲伤.
我有 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 的事实是无关紧要的。但是,如果只有一个,我会避免这样做,因为数据结构暗示可以有多个,并且有人可能会犯错误并在多个记录中将标志设置为真,这可能会让您感到悲伤.