1

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

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

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

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

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

4

2 回答 2

2

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

然后,您可以专攻 3 种不同的类型,并具有每种类型的特定属性。

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

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

于 2014-10-21T19:27:43.527 回答
1

那要看 :-)

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

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

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

于 2014-10-21T20:12:51.143 回答