Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql DB设计:成员表是单独的还是一个表中的所有成员?_Mysql_Performance_Database Design_Members - Fatal编程技术网

Mysql DB设计:成员表是单独的还是一个表中的所有成员?

Mysql DB设计:成员表是单独的还是一个表中的所有成员?,mysql,performance,database-design,members,Mysql,Performance,Database Design,Members,我想创建一个包含个人信息的朋友表并登录详细信息 将members表分为两个表更好吗, 一个包含最少的细节, 其次是其他细节 还是留在一张桌子上 我有很多表包含成员的外键。一个表,除非您可能需要将一个成员关联到多组详细信息(即多个电子邮件地址、用户组、日间电话、夜间电话、手机等)。一个表,除非您可能需要将一个成员与多组详细信息(即多个电子邮件地址、用户组、日间电话、夜间电话、手机等)关联起来。毫无疑问:在逻辑上合理的情况下,始终拆分表 例如: 朋友1:汤姆·琼斯住在山谷里 朋友2:艾琳·琼斯也住在

我想创建一个包含个人信息的朋友表并登录详细信息

将members表分为两个表更好吗, 一个包含最少的细节, 其次是其他细节

还是留在一张桌子上


我有很多表包含成员的外键。

一个表,除非您可能需要将一个成员关联到多组详细信息(即多个电子邮件地址、用户组、日间电话、夜间电话、手机等)。

一个表,除非您可能需要将一个成员与多组详细信息(即多个电子邮件地址、用户组、日间电话、夜间电话、手机等)关联起来。

毫无疑问:在逻辑上合理的情况下,始终拆分表

例如: 朋友1:汤姆·琼斯住在山谷里 朋友2:艾琳·琼斯也住在他们家,因为那是他的兄弟

表:

否则事情总会像这样发生:

这将导致错误的查询

这只是一个问题,有很多。如果有两个电子邮件地址和三个手机号码呢?如果一个街名改变了,有5个朋友住在里面怎么办

如果您非常确定您的表很小,并且不必查询它,那么您可以只使用一个表。但是,您也可以使用一些excel,比如sw,或者一张纸:-)

但是,如果您想要一个数据库,请将其视为一个数据库


阅读全文。

毫无疑问:在逻辑上合理的时候,总是拆分表格

例如: 朋友1:汤姆·琼斯住在山谷里 朋友2:艾琳·琼斯也住在他们家,因为那是他的兄弟

表:

否则事情总会像这样发生:

这将导致错误的查询

这只是一个问题,有很多。如果有两个电子邮件地址和三个手机号码呢?如果一个街名改变了,有5个朋友住在里面怎么办

如果您非常确定您的表很小,并且不必查询它,那么您可以只使用一个表。但是,您也可以使用一些excel,比如sw,或者一张纸:-)

但是,如果您想要一个数据库,请将其视为一个数据库


阅读全文。

这在很大程度上取决于那些“其他”细节是什么。这是一个常见而有趣的问题,乍一看并没有“硬而快”的答案。但是,如果我们更抽象地思考这个问题,关于你想要表达的任何特定事物的属性(“细节”)之间的实际关系,我们可能会发现一些清晰

在你的问题中,你说朋友有“最小”和“其他”的细节。与其将这些细节归类为“最小”或“其他”,不如让我们根据是否任何个人(“原子”)细节都可以完全由使朋友独一无二的东西来确定

我想应该有一些主键(PK),比如FriendID或电子邮件地址之类的。考虑到这个唯一的标识符,问问自己:“如果我只得到一个FriendID(或电子邮件,或任何你正在使用的PK)我绝对确定该朋友的哪些细节?例如,如果FriendID=2112,我绝对知道该朋友的名字、姓氏和出生日期,但我不绝对知道该朋友的电话号码,因为不止一个

将您明确知道的所有PK详细信息集中在一个表中。将您需要更多数据的详细信息(如电话号码为“家”或“工作”)放在“子”表中,外键返回PK上的“父”表。(注意:子表的PK很可能是复合的,也就是说,由父表的PK和微分因子组成(如本例中的“home”或“work”)。1-M关系的多个方面的复合键非常好。)


数据库极客将这种分解称为基于功能依赖性的分解。

这在很大程度上取决于那些“其他”细节是什么。这是一个常见而有趣的问题,乍一看并没有“硬性”答案。但如果我们更抽象地思考这个问题,那就是属性之间的实际关系(“细节”)对于你想表达的任何特定事物,我们可能会发现一些清晰

在你的问题中,你说朋友有“最小”和“其他”详细信息。与其将这些详细信息归类为“最小”或“其他”,不如让我们根据是否任何个人(“原子”)详细信息都可以完全由使朋友独一无二的因素来确定

我假设有一些主键(PK),比如FriendID、电子邮件地址或其他什么。考虑到这个唯一的标识符,问问自己:“如果我只得到一个FriendID(或电子邮件或任何你用作PK的东西)我绝对确定该朋友的哪些细节?例如,如果FriendID=2112,我绝对知道该朋友的名字、姓氏和出生日期,但我不绝对知道该朋友的电话号码,因为不止一个

将您明确知道的所有PK详细信息集中在一个表中。将您需要更多数据的详细信息(如电话号码为“家”或“工作”)放在“子”表中,外键返回PK上的“父”表。(注意:子表的PK很可能是复合的,也就是说,由父表的PK和微分因子组成(如本例中的“home”或“work”)。1-M关系的多个方面的复合键非常好。)


数据库极客称此分解为基于功能依赖关系的分解。

如果您现在只需要一个,但以后需要更多,该怎么办?为什么要冒险?我假设用户已经计划好了他的业务和数据库。@Peter,您的评论让我想到了YAGNI。小心过度复杂化
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