授权系统数据库设计

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% 的情况下,将分隔数据保留在单个列中是错误的。
每个组权限只有一行并不是一个优势,考虑到字符串操作开销,否则就是文件选择、插入、更新和删除。

请花点时间想一想,如果有人想从群组中删除权限怎么办:您将不得不弄清楚该群组是否有此权限,然后找出它的文本从哪里开始和结束,把它从完整的字符串中剪下来,然后才更新记录。
而使用规范化版本,您所要做的就是编写一个简单的删除语句...