我要创建的个人信息的朋友表和日志的详细信息。

有什么更好的成员表中分离到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过,或为此事一张纸: - )

但是,如果你想有一个数据库,把它作为一个。

阅读关于正常化获得整个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top