用于合并应用程序中的用户帐户的体系结构



在我的应用程序的当前运行版本中,我对用户电话号码的唯一性没有任何限制。这意味着,一个电话号码可以与多个帐户相关联。只有唯一受约束的是用户的电子邮件 ID。

场景 1:用户使用电子邮件 ID 和电话号码注册 =>我们在数据库中创建一个尊重电子邮件唯一性的新用户记录。 场景 2:用户注册时仅使用数字 => 我们使用我生成的唯一虚拟电子邮件在数据库中创建一个新的用户记录。

在这两种情况下,我都保持了电子邮件的唯一性,但忽略了对电话号码的任何此类约束。

现在我需要在电子邮件和电话号码上维护唯一性属性。因此,我需要合并共享相同电话号码的两个用户帐户(虚拟电子邮件和真实电子邮件(。

问题是这两个帐户都可以在数据库中的多个位置有多个引用。将两个帐户合并在一起应该采用什么方法?

编辑:我在后端使用MongoDB。它为每个文档生成"_id"字段,并将其用作该文档的主键。因此,此"_id"字段用作该用户文档到数据库其余部分的外键。

用户集合中的一个示例文档,其中用户具有经过验证的电子邮件 =>

{
    _id: ObjectId("5d443787f86f9a3dfa782a3c"),
    name: 'user name',
    email: 'VerifiedUserEmail@gmail.com',
    phone_number: '1234567890'
}

用户集合中的另一个示例文档,其中用户具有重复的电话号码 =>

{
    _id: ObjectId("5c9a1146c89b2d09740ccd17"),
    name: 'dummy user name',
    email: 'DummyUserEmail@dummy-emails.com',
    phone_number: '1234567890'
}

实际上,您可以在此处执行两件事,要么创建间接寻址级别(将运行时查询的 ID 映射在一起的映射表(,要么必须更新引用该 ID 的所有其他地方。

就个人而言,我会考虑只进行更新,并删除旧记录。 它将使您有机会逐案决定如何合并记录。 简单地更新外键可能会产生很多你意想不到的奇怪的笛卡尔。