我想创建一个包含个人信息和登录详细信息的朋友表。
将members表分成2个表更好,
一个包含最少的细节,
其次是其他细节。
还是留在一张桌子上?
我有很多包含成员外键的表。
这在很大程度上取决于那些“其他”细节是什么。这是一个常见且有趣的问题,乍一看并没有“一成不变”的答案。但是,如果我们更抽象地思考这个问题,关于您想要表示的任何特定事物的属性(“细节”)之间的实际关系,我们可能会发现一些清晰的情况。
在您的问题中,您指出朋友拥有“最少”和“其他”详细信息。我们不是将这些细节分类为“最小”或“其他”,而是根据任何个人(“原子”)细节是否可以完全由朋友的独特之处来确定。
我认为有一些主键(PK),比如 FriendID 或电子邮件地址之类的。考虑到这一唯一标识符,问问自己:“如果我得到了一个 FriendID(或电子邮件或您用作 PK 的任何内容),我绝对确定该朋友的哪些详细信息?例如,给定 FriendID=2112,我绝对确定该朋友的哪些详细信息?知道那个朋友的名字、姓氏和出生日期,但我do not绝对知道那个朋友的电话号码,因为不止一个。
将您明确知道的 PK 的所有详细信息分组到一张表中。将需要更多数据的详细信息(例如电话号码的“家庭”或“工作”)放入“子”表中,并通过外键返回到 PK 上的“父”表。 (注意:子表的 PK 很可能是复合的;即由父表的 PK 和区分因素(如本例中的“家庭”或“工作”)组成。多方的复合键1-M 关系非常好。)
数据库极客称这种分解为基于函数依赖.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)