具有3种用户的数据库模型

时间:2014-10-21 18:28:55

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

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

  • 有3种用户(3种不同的角色)。
  • 他们有一些共同的领域,但他们也有不同的领域。

解决方案A:  同一个表中的所有用户(某些用户将根据其角色拥有空的fieds)。

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

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

2 个答案:

答案 0 :(得分:2)

你的是Specialization/Generalization的案例。由于您说User(1,2,3)共享公共属性,因此最好使用包含所有公共属性的General实体 - User

然后你可以专门研究3种不同的类型,并为每种类型提供特定的属性。

因此,选项B是我认为最适合您的问题的解决方案。

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

答案 1 :(得分:1)

这取决于: - )

你会对待用户一样吗?例如。在登录时间:有人只是用用户名登录,这可以是三种用户类型中的任何一种吗?然后,您需要一个用户表,其中包含用户名和唯一索引。这是解决方案A或B.我更喜欢B而不是A,所以你可以决定哪个字段对于特定角色是可为空的。

或者您永远不会处理具有未知角色的用户(例如:一个人使用角色和用户名登录,因此只需要三个不同的表,每个表都有自己的用户名)?这将是三个特殊的用户表,没有通用的用户表。

选项C可以很容易实现,以便为用户提供额外的属性,但可能会变得很麻烦。特别是当有必要的字段和字段链接到其他表(例如作业号,这是作业表中的键,但你不能使用外键)。如果可以避免的话,我通常不采取这种方式。