数据库设计:3种类型的用户,单独还是一个表?

IMB*_*IMB 51 mysql database user-interface database-design relational-database

我有3种类型的用户:

  • 管理员
  • 供应商
  • 雇员

每种用户类型将具有不同的用户界面并访问不同类型的数据.他们唯一的相似之处在于他们使用的是一个Web应用程序,但是他们可以访 将它们全部放在像tbl_users这样的用户表中是否更好?或者创建tbl_admins,tbl_suppliers,tbl_employees是否更好?

Mic*_*ski 66

在设计表时您需要考虑的不一定是他们可以访问的内容以及相似/不相似的内容,而是用户级别本身的相似/不相似之处.

例如,如果用户类型具有相同的属性(名称,电子邮件,生日等),则它们属于一个表以及指示其权限级别的列.

这还有助于更改用户的权限级别,从而可以将普通员工变为管理员,例如,只需更新用户表中的记录即可.

如果供应商是不同类型的对象,其属性与其他两个不同,则供应商可能属于他们自己的表.

或者,还有一两件事要考虑:你可以使用一个users只保存所有三种类型的用户来说是非常有限的信息表,如果类型已扩大不也涉及到另一个属性,你可以存储与其他表用外键返回主users表.

  • 我认为最后一段是这里的经验法则.以这种方式将数据分离给我是有意义的.拥有一个带有userTypes的用户表,然后如果有特定于userType的数据然后补偿小的变化......它不会使数据库感知有3个不同的表...每个表将有一个fname和lname字段at甚至是供应商. (5认同)
  • 上面的第2段是关键:如果三个“事物”所需的数据相同,则将它们放在同一张表中。如果数据不同,则将它们放在不同的表中。唯一棘手的情况是数据“大部分”相同时,您必须进行判断。例如,如果有8个字段相同但2个不同,那么您是否想让2个字段在某些情况下未使用,还是要在两个表中重复8个字段,还是将2个字段分解为第二个“附加”表? ? (2认同)

das*_*ght 13

还有第三种选择:将所有用户共有的列放入tbl_users,并为其创建三个表tbl_admins,tbl_supplierstbl_employees加入tbl_users1到0..1.当共享列的数量很大时,您应该将此选择视为替代选项.