【问题标题】:User, customer, admin account in 3 different tables?3 个不同表中的用户、客户、管理员帐户?
【发布时间】:2011-03-31 12:28:16
【问题描述】:

在我的网络应用程序中,我将拥有三种类型的帐户。

  • 用户:免费使用网络应用程序
  • 客户:用于广告和获取公司徽标
  • 管理员:用于编辑和删除内容

这三个应该在单独的表中还是在一个名为“account_type”的列中,我可以将其标记为用户、客户或管理员?

两者的优缺点是什么?有这方面的最佳做法吗?

谢谢

【问题讨论】:

  • 我认为保留用例与数据模型中其他事物的关系会很有用。 IE。客户和图像之间的链接是什么,用户/管理员作为访问权限。
  • 我会说一个表,但如果每个角色有很多不同的属性,你应该考虑不同的表。您可以使用 id/enum 标记用户,我们称之为角色。 role=1 是用户,role=2 是客户,role=3 是管理员。因此,您可以使用外键结构轻松扩展您的角色(如 David Stratton 所说)。

标签: database database-design


【解决方案1】:

如果一个用户只能是一种类型,你最好用一个表和一个位域来给 IsAdministrator 等。

如果一个用户可以是多个帐户类型,那么您应该有一个带有外键的不同表,

示例结构(数据类型为 SQL Server,仅供参考)

用户表

  • 用户 ID - int
  • 用户名 - varchar(25)
  • 密码 - varchar(25)
  • 名字 - varchar(50) 等...

角色表

  • RoleId - 整数
  • 角色描述 - varchar(25)

User_Roles 表

  • UserId - int(带有用户表的外键)
  • RoleId int(角色表的外键)

【讨论】:

  • 我想我明白了。一个 Account 表用于他们所有人共享的基本信息,然后每个人都有 3 个不同的表,每个表都有特定的信息,然后我在基本表中使用 foreign_key 链接到它们,对吗?
  • 我在想你的意思是一张给管理员的桌子和一张给客户的桌子,上面有所有重复的信息。我没看错吧?
【解决方案2】:

一般来说,person 可以是用户、客户和管理员——所以,我将从包含 IsCustomerIsUserIsAdmin 列的 Person 表开始。稍后(为了快速搜索)您可能会决定将单独的表 AdminCustomersUsers 和 FK 添加到 Person 表中。

编辑:

一个典型的案例可能是:

  • 500 万用户
  • 1000 位客户
  • 10 个管理员

一般来说,为客户和管理员提供单独的表应该可以加快任何与管理员/客户相关的查询。

【讨论】:

  • 有时用户和客户有不同的属性,所以你需要拆分成2个表,而不是把可选列放在同一个表中。
【解决方案3】:

优点和缺点因系统的大小和复杂性而异。

我会将其分解为用户、角色、用户资源

用户(将定义基本信息)

用户角色

  • FK->角色类型

Role_Type(用户、管理员、客户,可能还有权限,或者您可以进一步细分)。

用户资源(媒体)

  • FK->用户

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 2016-04-27
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多