如果有两种用户怎么办?

时间:2014-01-20 16:49:36

标签: database database-design

到目前为止,我有这三个表userRole,用户和角色......如果我脑子里有问题我会得到很多...现在我的问题是如果有两种用户,比如普通用户或高级用户,他们会获得不同类型的服务...你是否在用户表中放置了一个属性roleId,还是创建了一个完全独立的表?

User table

UserID - int
Username - varchar(25)
Password - varchar(25)
Firstname - varchar(50) etc...

Roles table

RoleId - int
Role Description - varchar(25)

User_Roles table

UserId - int (with a foregin key to the Users table)
RoleId int (foreign key to the Roles table)

2 个答案:

答案 0 :(得分:3)

User_Roles表的好处是它允许用户拥有多个角色。如果用户只能拥有一个角色,那么您可以将roleId直接放在User表上。

您能想到具有多个角色的用户的用例吗?例如,Wordpress仅允许每个用户使用一个角色。不同的角色具有不同的capabilities,因此您可以拥有一个复杂的权限系统,每个用户只有一个角色。

答案 1 :(得分:1)

这取决于你想要达到的目标。

如果所有类型的用户都拥有相同的信息,那么您拥有User和UserRole。

如果取决于用户的类型,他们有不同的信息,那么用户将拥有这两种类型都可以拥有的信息。然后,你将拥有像PremiumUser这样的表来向PremiumUser添加额外的信息,使得UserRole表在这种情况下无用,因为如果你正在寻找高级会员,你可以在PremiumUser表中使用它们。

如果用户可以拥有多个角色,则可以根据您的需要以多种方式完成。使用UserRole,User和User_UserRole表为用户提供多个角色。

总而言之,它总取决于你需要做什么。

编辑:为了更清楚地解释一下,这里有一些引用表格的例子:

每个用户一个角色,相同的信息......

  

用户(包含UserRoleId)和UserRole

每个用户有多个角色,相同的信息......

  

User,User_UserRole(包含将它们链接在一起的UserId和UserRoleId)和UserRole

每个用户一个角色,不同的信息......

  

用户(所有用户都使用此表),StandardUser(包含UserId)和PremiumUser(包含UserId)

每个用户有多个角色,不同的信息......

  

与上面相同,StandardUser和PremiumUser都可以有类似的UserId