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
Sql 3个布尔域或1个带3个值的字段-关系模型数据库_Sql_Database_Database Design_Mysqli_Relational Database - Fatal编程技术网

Sql 3个布尔域或1个带3个值的字段-关系模型数据库

Sql 3个布尔域或1个带3个值的字段-关系模型数据库,sql,database,database-design,mysqli,relational-database,Sql,Database,Database Design,Mysqli,Relational Database,这可能是一个非常简单的问题,但我想知道从关系模型的角度来看,哪种方法更好 我有3种类型的用户: 顾客 工作人员 超级顾客 所有的都有完全相同的字段。我把它们都放在同一个users表中,这也使得我使用的框架更容易使用 我的问题是:使用3个不同的布尔字段来区分每种类型的用户,还是只使用一个具有3个值的字段更好 目前我有三个布尔域:管理员,职员,超级用户 这比只创建1个字段和3个值更清楚吗?(例如,1个代表管理员,2个代表职员,3个代表超级用户) 谢谢。我建议使用一个字段,可能是UserType表

这可能是一个非常简单的问题,但我想知道从关系模型的角度来看,哪种方法更好

我有3种类型的用户:

  • 顾客
  • 工作人员
  • 超级顾客
所有的都有完全相同的字段。我把它们都放在同一个
users
表中,这也使得我使用的框架更容易使用

我的问题是:使用3个不同的布尔字段来区分每种类型的用户,还是只使用一个具有3个值的字段更好

目前我有三个布尔域:管理员职员超级用户

这比只创建1个字段和3个值更清楚吗?(例如,1个代表管理员,2个代表职员,3个代表超级用户)


谢谢。

我建议使用一个字段,可能是UserType表的外键,如下所示:

-- UserType table
-- UserTypeID INT -- PK
-- Type NVARCHAR(50)
在用户表中添加一个字段
UserTypeID


一些用户更喜欢可读性,因此当他们知道
类型
列表相对较短时,使用一个字符字符字段而不是整数ID。

我建议使用一个字段,可能是UserType表的外键,类似这样:

-- UserType table
-- UserTypeID INT -- PK
-- Type NVARCHAR(50)
在用户表中添加一个字段
UserTypeID


一些用户更喜欢可读性,因此当他们知道
类型
列表相对较短时,使用一个字符字符字段而不是整数ID。

如果用户只能属于一种用户类型:使用一个字段和三个值


如果用户可以属于多个用户类型:使用三个布尔字段。

如果用户只能属于一个用户类型:使用一个字段和三个值


如果一个用户可以属于多个用户类型:使用三个布尔字段。

我同意这一点,只要用户只能属于其中一种类型(1-n),您就应该只使用一个字段。我同意这一点,只要用户只能属于其中一种类型(1-n),您就应该只使用一个字段。这取决于:一个用户可以属于多个用户类型吗?如果是这样的话,使用一个字段会变得很棘手。如果你已经知道类型ENUM的数量('1','2','3'),这取决于:一个用户可以属于多个用户类型吗?如果是这样,使用一个字段会变得很棘手。如果你已经知道类型ENUM的数量('1','2','3'),如果用户使用多个类型,那么为类型保留另一个表会好吗?@ArunKillu:是的。即使它只是值(1、2、3)和名称(admin、staff、superuser)之间的映射。在这种情况下,它将充当一个查找表,并定义每个值的含义。@YourCommonSense:不是真的。质疑这一点将是非常混乱的。而且该列中的数据相当模糊。如果用户选择了多种类型,是否最好为该类型保留另一个表?@ArunKillu:是的。即使它只是值(1、2、3)和名称(admin、staff、superuser)之间的映射。在这种情况下,它将充当一个查找表,并定义每个值的含义。@YourCommonSense:不是真的。质疑这一点将是非常混乱的。列中的数据相当模糊。