我在考虑使用以下语句设计数据库的更好方法是什么:
解决方案A: 同一个表中的所有用户(某些用户将根据其角色拥有空的fieds)。
解决方案B: 一个主表,我将添加用户及其角色。此外,我将创建3个额外的表格,我将在其中记录额外的字段(取决于表格),每个记录将在主表格中具有与用户相关的ID。
解决方案C:具有基本用户信息的主表,以及具有元数据用户信息的第二个表,其中每个记录表示用户的字段。它与WordPress相似
答案 0 :(得分:2)
你的是Specialization/Generalization
的案例。由于您说User
(1,2,3)共享公共属性,因此最好使用包含所有公共属性的General实体 - User
。
然后你可以专门研究3种不同的类型,并为每种类型提供特定的属性。
因此,选项B是我认为最适合您的问题的解决方案。
选项A会导致空值过多而选项C过于复杂。
答案 1 :(得分:1)
这取决于: - )
你会对待用户一样吗?例如。在登录时间:有人只是用用户名登录,这可以是三种用户类型中的任何一种吗?然后,您需要一个用户表,其中包含用户名和唯一索引。这是解决方案A或B.我更喜欢B而不是A,所以你可以决定哪个字段对于特定角色是可为空的。
或者您永远不会处理具有未知角色的用户(例如:一个人使用角色和用户名登录,因此只需要三个不同的表,每个表都有自己的用户名)?这将是三个特殊的用户表,没有通用的用户表。
选项C可以很容易实现,以便为用户提供额外的属性,但可能会变得很麻烦。特别是当有必要的字段和字段链接到其他表(例如作业号,这是作业表中的键,但你不能使用外键)。如果可以避免的话,我通常不采取这种方式。