【问题标题】:Database model with 3 kind of users具有 3 种用户的数据库模型
【发布时间】:2014-12-17 02:10:37
【问题描述】:

我正在考虑使用以下语句设计数据库的更好方法是什么:

  • 有 3 种用户(3 种不同的角色)。
  • 它们有一些共同的字段,但也有不同的字段。

解决方案 A: 同一张表中的所有用户(根据角色的不同,某些用户的字段为空)。

解决方案 B: 我将在其中添加用户及其角色的主表。此外,我将创建 3 个额外的表,我将在其中记录额外的字段(取决于表),并且每条记录都有一个与主表中的用户相关的 id。

解决方案 C:包含基本用户信息的主表和包含元数据用户信息的第二个表,其中每条记录表示用户的一个字段。它与WordPress相似

【问题讨论】:

    标签: mysql database database-design single-table-inheritance class-table-inheritance


    【解决方案1】:

    你的例子是Specialization/Generalization。既然你说User (1, 2, 3) 共享公共属性,那么最好有一个通用实体 - User 具有所有公共属性。

    然后你可以专精到 3 种不同的类型,并拥有每种类型的特定属性。

    所以,我认为选项 B 是解决您问题的最佳方案。

    选项A会导致空值过多,选项C过于复杂。

    【讨论】:

      【解决方案2】:

      这取决于:-)

      您会一视同仁吗?例如。在登录时:是否有人只使用用户名登录,这可以是三种用户类型中的任何一种?然后,您需要一个带有用户名和唯一索引的用户表。这是解决方案 A 或 B。我更喜欢 B 而不是 A,因此您可以决定哪些字段对于特定角色可以为空。

      或者您永远不会与角色未知的用户打交道(例如:一个人使用角色和用户名登录,因此拥有三个不同的表就足够了,每个表都有自己的用户名)?这将是三个特殊的用户表,没有普通用户表。

      选项 C 很容易实现,以便为用户提供额外的属性,但可能会变得很麻烦。尤其是当有必填字段和链接到其他表的字段时(例如作为作业表中的键的作业编号,但此时您不能使用外键)。如果可以避免,我通常不会走这条路。

      【讨论】:

      • 感谢各位朋友的帮助,我会考虑的,目前我认为第二种方案是最好的。也许它比其他的工作得更快,而且使用起来也不太复杂。也感谢@san1646
      猜你喜欢
      • 2013-09-06
      • 1970-01-01
      • 2015-02-27
      • 2011-10-17
      • 2012-07-21
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多