Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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数据库_Mysql - Fatal编程技术网

如何构造每个用户都有多个联系人的mysql数据库

如何构造每个用户都有多个联系人的mysql数据库,mysql,Mysql,我正在创建一个网站,每个注册用户都可以存储联系人列表。我突然想到,与其将联系人存储在带有用户名、联系人姓名、联系人电子邮件的表中,不如将其规范化,以防止相同的姓名/电子邮件被多次存储。因此,我现在有4个表:用户、姓名、电子邮件和联系人,其中联系人包含用户id、姓名id和电子邮件id。我是朝着正确的方向前进,还是不必要地使事情复杂化 感谢大家对我现在所看到的是一个相当模糊的问题做出了有益的回答。解释一下我的推理可能是个好主意。 在一个示例场景中,有100个用户,其中大多数通过另一个用户的推荐加入,

我正在创建一个网站,每个注册用户都可以存储联系人列表。我突然想到,与其将联系人存储在带有用户名、联系人姓名、联系人电子邮件的表中,不如将其规范化,以防止相同的姓名/电子邮件被多次存储。因此,我现在有4个表:用户、姓名、电子邮件和联系人,其中联系人包含用户id、姓名id和电子邮件id。我是朝着正确的方向前进,还是不必要地使事情复杂化

感谢大家对我现在所看到的是一个相当模糊的问题做出了有益的回答。解释一下我的推理可能是个好主意。 在一个示例场景中,有100个用户,其中大多数通过另一个用户的推荐加入,每个用户的联系人列表将共享大量公共电子邮件地址。然而,johnsmith@email.com,可能被不同的用户称为John、J Smith、Johnny boy等。如果我正确理解了规范化的原则(不太可能),将用户、联系人姓名和电子邮件地址分离到单独的表中,应该可以显著减少重复条目,并使数据库更高效。在下面的示例中,联系人表可能多次包含相同的电子邮件地址。
因此,长话短说,在一个表或几个没有重复条目的较小表中有比必要的更多的条目更好吗?

您可能不必要地使事情复杂化:我建议用户使用一个表,联系人使用一个表,连接表使用两个表之间的多对多关系。如果联系人未在用户之间共享,则可以在联系人表中将用户id作为外键

希望这有帮助

你可以这样做

1] 用户信息表

用户名

2] 联系人表

联系人| Id |联系人|姓名|联系人|电子邮件

3] 用户联系表

用户Id |联系人Id


联系人可以有相同的电子邮件但名称不同,或者反之亦然?如果没有,我建议使用关联表链接两个表(用户和联系人):

USERS
- userId
- userName

CONTACTS_USERS
- userId
- contactId

CONTACTS
- contactId
- contactName
- contactEmail

通过对userId和contactId的外键约束,您可以在两个表之间实现健壮的链接,其中每个联系人可能由不同的用户使用,并且每个用户可能有不同的联系人。

它可以工作,但除非特别要求,否则它是一个未来的证明。如果每个名称都必须对应一封电子邮件,那么您可能需要将名称表与电子邮件表合并。