我有一个简单的设置,其中包含3个表:Role
,Permission
和RolePermission
。
Role: | Permission: | RolePermission:
ID SysName | ID SysName | Role Permission
-- ------- | -- ------- | ---- ----------
1 Admin | 1 DoUserThings | 1 1
2 User | 2 DoAdminThings | 1 2
| 3 HackTheGibson | 1 3
| 2 1
这个想法是角色和权限分开存在,并且表“ RolePermission”分配了哪些角色具有哪些权限。
在此示例中,管理员具有所有权限,而用户具有DoUserThings
权限。
但是,我不确定如何正确编写INSERT语句。我编写了一个同时查询Role
和Permission
表的表,但它似乎并不是最有效的表。我不确定要加入什么。
到目前为止,这是我的尝试:
INSERT INTO RolePermission (Role, Permission)
SELECT Role.ID, Permission.ID
FROM Role, Permission
WHERE
Role.SysName == 'Admin'
AND
Permission.SysName == 'DoUserThings';
这会将1, 2
插入RolePermission
表中。
注意:我目前正在使用SQLite进行测试,但希望与MySQL和/或PostgreSQL兼容。
答案 0 :(得分:3)
您的方法很好,尽管我可能倾向于将其表述为:
INSERT INTO RolePermission (Role, Permission)
SELECT r.ID, p.ID
FROM Role r JOIN
Permission p
ON r.SysName = 'Admin' AND
p.SysName = 'DoUserThings';
从性能的角度来看,逻辑的表达方式并不重要。如果您关心性能,请在Role(SysName, Id)
和Permission(SysName, Id)
上添加索引。