Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 三类用户的数据库模型_Mysql_Database_Database Design_Single Table Inheritance_Class Table Inheritance - Fatal编程技术网

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种不同的角色)
  • 它们有一些公共字段,但也有不同的字段
解决方案A: 同一个表中的所有用户(某些用户将根据其角色拥有空域)

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


解决方案C:包含基本用户信息的主表,以及包含元数据用户信息的第二个表,其中每个记录表示一个用户字段。它与WordPress类似,这是专业化/泛化的一个例子。既然您说过
User
(1、2、3)共享公共属性,那么最好有一个具有所有公共属性的通用实体-
User

然后您可以专门化为3种不同的类型,并对每种类型具有特定的属性

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

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

这取决于:-)

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

或者,您永远不会与具有未知角色的用户打交道(例如:一个人使用一个角色加上一个用户名登录,这样就足以拥有三个不同的表,每个表都有自己的用户名)?这将是三个特殊的用户表,而不是普通的用户表


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

谢谢你的帮助,我会考虑的,现在我认为第二个选择是最好的。也许它比其他的更快,而且使用起来也不太复杂。也谢谢@san1646