我正在为以下情况创建数据库方案:
- 有用户
- 用户具有角色(例如“开发人员”或“ CEO”)
- 角色具有应用程序(例如“ Topdesk”)
- 应用程序具有权限(例如“更新知识库”)
- 如果角色已经可以访问应用程序,则该角色可以具有权限
假设没有高性能环境(无需针对速度进行优化),那么实现此架构的最佳方法是什么?数据库环境可以是MySQL,MSSQL ...更多是关于关系数据库的设计。
我本人提出以下建议:
我最不确定的部分当然是Applications_Permissions_Roles表。它是另一个链接表之上的链接表。我以前从未使用过或看过。做到这一点的另一种方法是将其替换为“角色”和“权限”之间的链接表,然后使用代码或约束来确保所需的关系...但这对我来说似乎不是一个好的解决方案。这些事情应该在数据库级别(如果可能)上强制执行,而不是在代码级别上强制执行。
其次,是否需要Permissions.Application和Applications.Id之间的链接?我之所以使用它,是因为Roles_Applications中可能没有任何行(例如,当您刚刚添加了新应用程序时),因此无法确定哪些权限属于哪个应用程序。它也是查阅权限所属于的应用程序的单一参考点。我想这是对的,但它在数据库设计中也有影响。尝试将ON_DELETE或ON_UPDATE设置为级联时,会出现MSSQL错误。
有什么建议,或者这是应该怎么做的?也欢迎任何其他有关命名约定的建议(例如作为评论)。
谢谢,
卢克
编辑:更改标题,希望使其更清晰。前一个比较全面,但可能太复杂了。
Roles_Applications
是真的。鉴于所有权限都是特定于应用程序的,因此似乎存在Applications_Permissions
(已标记为Permissions
),然后可以通过中的记录将其分配给特定角色Applications_Permissions_Roles
。 Roles_Applications
实际上,它似乎是在描述最基本的应用程序权限-简单访问。或者,它断言角色对应用程序具有一定级别的权限,但是您必须寻找其他位置来确定角色。