Mysql 三类用户的数据库模型
我在考虑用以下语句设计数据库的更好方法是什么:Mysql 三类用户的数据库模型,mysql,database,database-design,single-table-inheritance,class-table-inheritance,Mysql,Database,Database Design,Single Table Inheritance,Class Table Inheritance,我在考虑用以下语句设计数据库的更好方法是什么: 有3种用户(3种不同的角色) 它们有一些公共字段,但也有不同的字段 解决方案A: 同一个表中的所有用户(某些用户将根据其角色拥有空域) 解决方案B: 我将在其中添加用户及其角色的主表。此外,我将创建3个额外的表,其中我将记录额外的字段(取决于表),每个记录将有一个与主表中的用户相关的id 解决方案C:包含基本用户信息的主表,以及包含元数据用户信息的第二个表,其中每个记录表示一个用户字段。它与WordPress类似,这是专业化/泛化的一个例子。既
- 有3种用户(3种不同的角色)
- 它们有一些公共字段,但也有不同的字段
解决方案C:包含基本用户信息的主表,以及包含元数据用户信息的第二个表,其中每个记录表示一个用户字段。它与WordPress类似,这是专业化/泛化的一个例子。既然您说过
User
(1、2、3)共享公共属性,那么最好有一个具有所有公共属性的通用实体-User
然后您可以专门化为3种不同的类型,并对每种类型具有特定的属性
所以,我认为方案B是解决您问题的最佳方案
选项A将导致太多的空值,选项C过于复杂。这取决于:-)
你会对用户一视同仁吗?例如,在登录时:是否有人使用用户名登录,这可以是三种用户类型中的任意一种?然后您需要一个带有用户名和唯一索引的用户表。这是解决方案A或B。我更喜欢B而不是A,因此您可以决定对于特定角色哪些字段可以为空
或者,您永远不会与具有未知角色的用户打交道(例如:一个人使用一个角色加上一个用户名登录,这样就足以拥有三个不同的表,每个表都有自己的用户名)?这将是三个特殊的用户表,而不是普通的用户表
选项C很容易实现,以便为用户提供额外的属性,但可能会成为一个麻烦。特别是当存在必填字段和链接到其他表的字段时(例如作业编号,它是作业表中的键,但不能使用外键)。如果可以避免的话,我通常不会走这条路。谢谢你的帮助,我会考虑的,现在我认为第二个选择是最好的。也许它比其他的更快,而且使用起来也不太复杂。也谢谢@san1646