【问题标题】:Whats an efficent way to put multiple types of users in a db将多种类型的用户放入数据库的有效方法是什么
【发布时间】:2012-03-26 00:12:27
【问题描述】:

我正在构建一个网站,让用户从多个来源(包括 Facebook 和 Google+)登录该网站,并且我希望能够在我的数据库中保留每个用户的一些基本信息,以便我可以跟踪创建诸如 cmets 和帖子之类的东西。我如何在 SQL 数据库中有效地做到这一点。我是否为每种类型的用户创建一个新表?

【问题讨论】:

    标签: mysql sql facebook schema google-plus


    【解决方案1】:

    您只需要两个表,一个用户表和一个用户类型表。用户表将有一个类型列,该列将链接到用户类型表并告诉您类型。我会是这样的基本的东西:

    User (
      Id Int NOT NULL PRIMARY KEY,
      UserName VarChar(50) NOT NULL,
      EmailAddress VarChar(100),
      {... More fields generally used by all account types ...}
      UserTypeId Int NOT NULL
    )
    
    UserType (
      Id Int NOT NULL PRIMARY KEY,
      Type VarChar(50) NOT NULL
    )
    

    如果您有特定于每种登录类型(如 Google+ 或 Facebook)的信息,您可以为每种特定登录类型创建一个表。然而,现实情况是,您可能会为所有可能的不同类型获得相同的基本信息字段集,因此无需担心太多。

    【讨论】:

    • 感谢您的快速回复。那么 usertype 表是否会像用户表中的用户 ID 和类型号之类的?但是这种方法可以让我存储来自 facebook 或 google 的实际 UserID 吗?因为那是我遇到的问题,如果我想存储该 ID,而不可能重叠 ID 似乎我必须制作多个表。
    • 因此 User.Id 对于每个用户都是唯一的。但是,两个用户可能具有相同的 UserName 但不同的 UserTypeId。在这种情况下,您可能希望使用 User.Id 列来识别其他每个表中的用户,以了解创建信息的用户。
    【解决方案2】:

    通常的做法是:

    • 带有公共数据的USER
    • 带有 Facebook 特定数据的 FACEBOOK_USER 表(有自己的 PK 和 USER FK)
    • GOOGLE_USER 表...

    加载用户时,您可以连接所有这些表,或者您可以创建一个包含连接的视图,或者,如果您有许多特殊类型,您可以加载用户,然后单独读取其他用户(也许保留一个 @987654325 @ 在USER 表中以加快速度)。

    【讨论】:

    • 非常感谢您的回答。这很有意义。
    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 2015-02-27
    • 2011-10-17
    • 2020-03-13
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多