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

时间:2011-12-12 18:46:27

标签: mysql database database-design user-interface relational-database

我有3种类型的用户:

  • 管理员
  • 员工

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

5 个答案:

答案 0 :(得分:61)

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

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

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

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

或者,还有一件事需要考虑:您可以使用users表,该表仅包含有关所有三种类型用户的非常有限的信息,以及类型是否具有彼此不相关的扩展属性,您可以将带有外键的其他表中的那些存储回主users表。

答案 1 :(得分:11)

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

答案 2 :(得分:2)

这取决于他们的数据结构有多相似。如果它们相似,那么也许你可以将它们全部放在一个表中。但是,如果他们有很多不同的字段,你最终会得到很多NULL值...然后最好将它们全部放在不同的表中。

答案 3 :(得分:0)

最好将您的所有登录信息保存在一个位置。如果您要对登录过程进行更改,则有3个不同的表将意味着必须在3个不同的位置更改代码。

如果用户可以属于多个角色,请考虑制作UserRoles表。否则,在现有表中添加其他字段(例如RoleType)将有助于区分不同类型的用户。

答案 4 :(得分:0)

您应该将它们包含在一个表中,并创建一个字段/属性,以指示用户是管理员,供应商还是员工。

如果你以这种方式集中它会更简单。

关于他们访问的方式/内容的关注将在您开发的软件下。您可以根据您拥有的用户类型获取/收集UI [或他们在软件系统中访问的任何内容]。

我通常只是根据我拥有的用户类型隐藏和显示内容

希望这会有所帮助..