如何构建一个mysql数据库,其中每个用户有多个联系人

时间:2011-11-07 09:29:16

标签: mysql

我正在创建一个网站,每个注册用户都可以存储联系人列表。我想到,不是将联系人存储在带有user_id,contact_name,contact_email的表中,而是将其标准化以防止多次存储相同的名称/电子邮件。因此,我现在有4个表:联系人包含user_id,name_id和email_id的用户,姓名,电子邮件和联系人。我是朝着正确的方向前进,还是我不必要地使事情复杂化?

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

3 个答案:

答案 0 :(得分:4)

你可能不必要地使事情变得复杂:我建议一个用户表,一个用于联系人和一个连接表,以允许两者之间的多对多关系。如果用户之间没有共享联系人,则可以将用户ID作为联系人表中的外键。

希望这有帮助

答案 1 :(得分:2)

你可以这样做

1] User_info表

  

User_Id |名称

2]联系表

  

Contact_Id | Contact_Name | CONTACT_EMAIL

3] User_Contact表

  

User_Id | CONTACT_ID

答案 2 :(得分:0)

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

USERS
- userId
- userName

CONTACTS_USERS
- userId
- contactId

CONTACTS
- contactId
- contactName
- contactEmail

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