DB设计:成员表中单独或全部在一个表?
-
23-08-2019 - |
题
我要创建的个人信息的朋友表和日志的详细信息。
有什么更好的成员表中分离到2个表, 一个包含了最基本的信息, 第二与其他细节。
或保持在一个表?
我有很多包含该构件的外键的表。
解决方案
这取决于什么“其它”的细节很多。这是一种常见的和有趣的问题,并没有“硬性”的答案乍看之下。但是,如果我们认为这个问题更抽象,你们是否要代表任何特别的事情的属性(“详细信息”)之间的实际关系,我们可能会发现一些清晰。
在你的问题,你指出的朋友有“最小”和“其他”的详细信息。而这些细节为“最小”或“其他”分类,让我们是否有任何个人进行归类(“原子”)的细节可以完全不管是什么让一个朋友唯一确定的。
我相信有一些主键(PK),像FriendID或e-mail地址或东西。考虑到这唯一的标识符,问自己:“如果我给一个确切FriendID(或e-mail或任何你正在使用的PK)是什么朋友的细节我是绝对有把握例如,给出FriendID = 2112,我绝对?知道的朋友的名字,姓氏和出生日期,但我的不要绝对知道朋友的电话号码,因为有他们的不止一个。
组一起在一个表中的所有细节你知道明确给出的PK。将在您需要更多的数据(如“家”或电话号码的情况下“工作”)中的“子”表的细节,外国键返回到“父”表上的PK。 (注:这是极有可能的是,子表的PK将是复合的,也就是说,父表的PK组成和差异化因素(如“家”或在这个例子中“工作”)的许多侧面组合键。的1-M的关系是非常好的。)
数据库爱好者调用基于函数依赖这种分解。
其他提示
一个表,除非您可能需要一个成员关联到多组的细节(即多个电子邮件地址,用户组,日电话,夜间电话,手机等)
关于它毫无疑问:总是分裂表时是有意义的逻辑
例如: 朋友1:汤姆·琼斯住在山谷 朋友2:艾琳·琼斯的生活也因为这是他的弟弟。
表:
Friends Id Name Address 1 Tom Jones 1 2 Erin Jones 1 Adresses Id Address 1 The valley
否则,事情总是会想出这样的:
Friends Id Name Address 1 Tom Jones The Valey 2 Erin Jones The Valley
这将导致错误的查询。
这只是一个问题,有很多。什么样的事情,如果这样有2个E-mail地址和3个手机号码?如果streetname变化和5个朋友住在什么呢?
如果你很确定你的桌子会很小,而不必进行查询,比你可以只使用一个表。但是,除了你可以使用一些像EXCELL SW过,或为此事一张纸: - )
但是,如果你想有一个数据库,把它作为一个。
阅读关于正常化获得整个问题。