授权系统数据库设计
Authorisation System Database Design
我正在为 CMS 开发授权系统。我有以下 table 结构:
所有其他 table 对我来说都可以,但我想知道最佳实践
GroupPermission table 如下所述。
用户:
用户 ID、姓名
群组:
GroupId,名称
组用户:
GroupUserId,GroupId,UserId
模块:
模块 ID、名称
权限:
PermissionId,Name,ModuleId,isAllowed
方法一:
群组权限:
GPId GroupId ModuleId Permissions(var char)
1 1 1 View:true,Create:false,Delete:true,Edit:false
2 1 2 View:ture,inviceCreate:false,AssignCreate:false
方法二:
群组权限:
GPId GroupId PermissionId
1 1 1
2 1 2
3 1 3
我需要你对上述两种方法的建议,第一种方法的优点是只为特定组返回一行,但我在字符串中连接权限,因此字符串解析方法会产生开销,
在第二种方法中,我使用 'Id' 而不是字符串。
因为这个table是最常用的table,会影响应用程序的整体性能,所以这个table需要优化到最大。
我研究了其他 CMS 的数据库,如 word press、orchard、silver stripe 等,但他们只有很少的用户和组 table,找不到对我的要求有用的东西。
非常感谢任何其他替代建议或想法。
采用第二种标准化方法。
在 99.999% 的情况下,将分隔数据保留在单个列中是错误的。
每个组权限只有一行并不是一个优势,考虑到字符串操作开销,否则就是文件选择、插入、更新和删除。
请花点时间想一想,如果有人想从群组中删除权限怎么办:您将不得不弄清楚该群组是否有此权限,然后找出它的文本从哪里开始和结束,把它从完整的字符串中剪下来,然后才更新记录。
而使用规范化版本,您所要做的就是编写一个简单的删除语句...
我正在为 CMS 开发授权系统。我有以下 table 结构: 所有其他 table 对我来说都可以,但我想知道最佳实践 GroupPermission table 如下所述。
用户:
用户 ID、姓名
群组: GroupId,名称
组用户:
GroupUserId,GroupId,UserId
模块:
模块 ID、名称
权限:
PermissionId,Name,ModuleId,isAllowed
方法一:
群组权限:
GPId GroupId ModuleId Permissions(var char) 1 1 1 View:true,Create:false,Delete:true,Edit:false 2 1 2 View:ture,inviceCreate:false,AssignCreate:false
方法二:
群组权限:
GPId GroupId PermissionId
1 1 1
2 1 2
3 1 3
我需要你对上述两种方法的建议,第一种方法的优点是只为特定组返回一行,但我在字符串中连接权限,因此字符串解析方法会产生开销, 在第二种方法中,我使用 'Id' 而不是字符串。
因为这个table是最常用的table,会影响应用程序的整体性能,所以这个table需要优化到最大。
我研究了其他 CMS 的数据库,如 word press、orchard、silver stripe 等,但他们只有很少的用户和组 table,找不到对我的要求有用的东西。
非常感谢任何其他替代建议或想法。
采用第二种标准化方法。
在 99.999% 的情况下,将分隔数据保留在单个列中是错误的。
每个组权限只有一行并不是一个优势,考虑到字符串操作开销,否则就是文件选择、插入、更新和删除。
请花点时间想一想,如果有人想从群组中删除权限怎么办:您将不得不弄清楚该群组是否有此权限,然后找出它的文本从哪里开始和结束,把它从完整的字符串中剪下来,然后才更新记录。
而使用规范化版本,您所要做的就是编写一个简单的删除语句...