用户,客户,管理员帐户在3个不同的表中?

时间:2010-08-18 11:58:44

标签: database database-design

在我的网络应用程序中,我将有三种类型的帐户。

  • 用户:免费使用网络应用程序
  • 客户:广告和获取公司徽标
  • 管理员:用于编辑和删除内容

这三个应该是在单独的表中,还是在一个名为“account_type”的列中,我可以将其标记为用户,客户或管理员?

两者的优点和缺点是什么?这是最好的做法吗?

由于

3 个答案:

答案 0 :(得分:14)

一般来说,person可以是用户,客户和管理员 - 因此,我会从Person表开始,其中列IsCustomerIsUser,{{ 1}}。稍后(对于快速搜索),您可以决定将单独的表IsAdminAdminCustomers与FK一起添加到Users表。

编辑:

典型案例可能是:

  • 500万用户
  • 1000位客户
  • 10位管理员

通常,为客户和管理员设置单独的表应该可以加速任何与管理员/客户相关的查询。

答案 1 :(得分:8)

如果用户只能是一种类型,那么最好使用一个表和一个用于IsAdministrator的位字段等。

如果用户可以是多个帐户类型,那么您应该拥有一个带有外键的不同表格,

示例结构(数据类型是SQL Server,仅建议使用)

用户表

  • UserID - int
  • 用户名 - varchar(25)
  • 密码 - varchar(25)
  • 名字 - varchar(50)等...

角色表

  • RoleId - int
  • 角色描述 - varchar(25)

User_Roles表

  • UserId - int(使用Users表的foregin键)
  • RoleId int(Roles表的外键)

答案 2 :(得分:2)

优点和缺点根据系统的大小和复杂程度而有所不同。

我会将其分解为User,Role,UserResources

  

用户(将定义基本信息)

     

用户角色

     
      
  • FK->角色类型
  •   
     

Role_Type (用户,管理员,客户,可能是权限,或者您可以进一步解决此问题。)

     

UserResources (媒体)

     
      
  • FK->用户
  •