1对1数据库设计

时间:2013-10-13 15:54:58

标签: sql database database-design relational-database

我有一个数据库,通常用户是中心对象 在数据库中,我有一个表rolesusers in roles,因此我可以在网站上为用户提供不同的权限 但现在我有一个疑问 我在一个数据库之前看到过这样的结构(用户与其他表的关系是1:1):

User{UserId, Username, Email etc.}
Admin{UserId, some specific columns}
Child{UserId, some specific columns}
Admin{Parent, some specific columns}

和其他表格不是通过用户表而是通过Admin, Child and admin.连接到用户 因为现在我设计了我的数据库,我有用户,用户可以是Admin, CompanyManager and Professor 我想知道我应该像上面展示的那样设计表格还是仅仅依靠角色? 第一种方法的优点是什么?
而且在我的商业模式中,用户不必是CompanyManager或Professor,所以这实际上是1到0或1设计。
使用这样的场景设计数据库的好方法是什么?

2 个答案:

答案 0 :(得分:1)

为特定类型的用户设置特定表的优点是存储仅与该类用户相关的信息。

在您的示例中,

  • 也许所有用户都会有一个经理 - 所以经理I​​D会出现在用户列中。
  • 管理员有权查看某些信息,因此可以通过角色来处理。
  • 只有教授会有一个主题或“HasTenure”属性。所以这些信息将放在教授的表格中。使用此方法,当用户表仅适用于某个用户子集时,您可以避免在users表中包含“Subject”列。因此,您可以避免在用户表中出现功能依赖,并且违反了第3范式。

答案 1 :(得分:0)

我更喜欢这种方法:

enter image description here

通过这种方式,您可以轻松地将角色分组到类别中并将其分配给用户。