MongoDB 针对不同类型用户的数据库设计

MongoDB Database design for different type of users

我正在为一个有多种类型用户的网站制作 RESTful API。

用户将始终是他们最初注册的任何人(永久专业化)。

我正在使用 Mongoose 和 NodeJS,并且我为 User 提出了以下模型,以便我将来可以轻松管理新社交网站的登录。

{
  userType: { type: String, lowercase: true },
  contact: {
    email: { type: String, lowercase: true, index: { unique: true, sparse: true } }
  },
  accounts: {
    local: { password: String },
    facebook: { id: String, token: String }
  }
}

所以我的问题是,由于我有不同类型的用户并且每种类型都有不同的个人资料信息,我应该在哪里存储关于他们每个人的信息?

为每个类型制作不同的模型并在User模型中添加一个引用键?或者有更好的方法吗?

问题似乎是关于一般数据库设计的。我建议用户之间共享的任何和所有字段都在您的用户模型中,然后将特定于一种用户的字段存储在专门为此的模型中,例如 "Admin",如果用户只是每一种类型的用户,您都可以存储类型和通用 ID 字段,然后根据类型和 ID 字段找到合适的用户类型特定数据。或者,您可以为每个用户类型建立一个 id 和模型关系,并且不要求任何这些字段以及检查是否为空。后一种方法可能会给您带来灵活性,允许用户属于多种类型(可能选择 log-in 作为)。

我认为将这些信息放在不同的集合中不是一个好主意。 MongoDB 的优势之一是您可以将所有相关的用户信息放在一个文档中,因此您可以通过 1 个查询检索它。

我将向用户模型添加 3 个字段:

adminInfo: { ... },
vendorInfo: { ... },
userInfo: { ... },

并根据用户类型填写正确的。其他 2 个字段可以是 null(甚至根本不存在)。

不要走标准化路线 - 这里不需要它。

如果您考虑长远,我认为最好分开 collection。根据我的经验,这些字段会随着复杂性的增加而不断增加。想象一下,如果您必须通过供应商特定标志和用户特定标志将查询写入 select;这些查询加起来可能会很大。另外,想象一下如果你有很多用户类型检查:到处都是 if (type == VENDOR)...

将它们分开需要初步的努力collection;但从长远来看是值得的..