我正在构建一个需要同步用户电话联系人的应用程序。现在,由于用户电话簿中的电话联系人有 N 个不同的字段,例如name
, contact
, work contact
, email
, email2
,website
以及各种其他字段。
现在,假设我(User1)有一个名为 N1 的朋友,其电话号码为 P1 和 P2,电子邮件为 E1 和 E2。现在另一个用户 (User2) 具有相同用户的联系人但具有不同的名称 N2,只有电话 P1 和电子邮件 E1。
目前我正在考虑以下架构
Contacts
--id
--phone
--email
--website
--address
UserContacts
--userid
--contacts(list of contacts)
我需要确保 User1 拥有的朋友的详细信息不应该与 User2 共享,因为 User1 有 P1P2 和 E1E2,但 User2 只有 P1E1。此外,所有用户的名称都相同,这显然不是必需的。
因此,现在我正在考虑将每个用户的每个联系人都转储到表中,即重复。我正在使用 mongDB,因此我不介意重复,但我仍然想知道如何防止数据冗余,从而确保信息不被其他用户共享。
您似乎希望将联系人(由电话号码标识)视为单个对象,并在地址簿中恰好有同一个人的用户之间共享此对象。这是一个糟糕的想法,就好像一个用户修改了他通讯录中的联系人,这些更改会传播到其他用户的通讯录。
正确的做法是将用户地址簿中的每个条目视为一个对象:
永远不要使用名称(因为它在数据库中可能不是唯一的)或电话号码(因为它可能会改变)作为 PK。黄金法则是使用无意义的字段,例如具有自动增量的整数 ID。
请注意,这个简单的模式只允许您输入一个电话号码或电子邮件联系方式。为了获得更大的灵活性,您应该将这些属性移动到它们自己的表中:
和电子邮件地址相同。
此模式仅对联系人进行建模。您必须实现一个不同的表来存储应用程序用户的数据,并将用户地址簿中包含的联系人(上面的第一个表)绑定到正确的用户。