MongoDB数据库设计适用于不同类型的用户

时间:2016-01-03 15:03:33

标签: node.js mongodb restify

我正在为有多种用户类型的网站制作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模型中添加引用键?或者有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

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

我会在用户模型中添加3个字段:

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

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

不要去规范化路线 - 这里不需要它。

答案 1 :(得分:0)

问题似乎在于一般的数据库设计。我建议用户之间共享的任何和所有字段都在您的用户模型中,然后是特定于存储在模型中的一种用户特定的字段,例如“Admin”,如果用户只是1用户类型,您可以按原样存储类型,以及通用ID字段,然后根据类型和ID字段查找相应的用户类型特定数据。或者,您可以为每个用户类型建立id和model关系,而不是要求任何这些字段以及检查null。后一种方法可以为您提供灵活性,允许用户具有多种类型(可能选择以登录方式登录)。

答案 2 :(得分:0)

如果您考虑长期,我认为最好单独收藏。以我的经验,随着复杂性的增加,这些领域将不断增加。想象一下,如果您必须编写查询以按供应商特定标志以及用户特定标志进行选择;这些查询将加起来,并且可能非常庞大。另外,想象一下您是否进行过很多用户类型检查:如果(type == VENDOR)到处都是...

将它们作为单独的集合进行初步努力;但从长远来看还是值得的。