【发布时间】:2014-08-21 23:41:15
【问题描述】:
我需要设计一个 Right 表,使其可以引用自身。我已经有一个角色和用户表。
用户可以有多个角色,一个角色可以有多个权限。
但当前的问题是在选择一项权限时应该隐式选择某些权限,例如如果角色具有创建权限,那么它应该自动具有查看和删除权限。
权限表当前有 id、name 和 description,如何修改它以适应上述功能? 我在考虑两种方法:
- 将 rightIds 列添加到权限表中,该表将包含所有子权限 ID 的逗号分隔字符串。例如:CREATE 权限将具有 VIEW 和 DELETE 权限的 ID。但缺点是在这种情况下我不能做外键,获取它也会很痛苦。
- 添加一个新的映射表,该表将包含 parentRightId 和 childRightId 两列,并且都将权限作为外键引用。
这两者中哪一个应该更好,或者有更好的设计方法吗?在这种情况下,正确的课程应该是什么样子。目前它看起来像这样:
class Right{
private Integer id;
private String name;
private String description;
}
【问题讨论】:
-
不要做#1。权利本身通常不是分层的。而是为用户(或角色)创建一个分配表,并有一个触发器,如果实现了某些特殊组合,则自动填充其他分配。
标签: java postgresql database-design relational-database