为用户、组和权限构建数据库表的最佳方式?
Best way to structure database tables for users, groups, and permissions?
在我的应用程序中,用户可以加入群组,这些群组的管理员可以为每个用户授予不同类型的权限。用户可以加入任意数量的群组。我将如何构建数据库表?
Users Groups Permissions Group_User_Permissions
----------- ----------- ------------------- -----------------------
| UID(pk) | | GID(pk) | | PID(pk) | VALUE | | UID | GID | PID |
这是正确的做法吗?
或者这是必要的:
Users Groups Permissions User_Groups Group_User_Permissions
----------- ----------- ------------------- ------------------------ -----------------------
| UID(pk) | | GID(pk) | | PID(pk) | VALUE | | UGID(pk) | UID | GID | | UGID(pk) | PID |
显然性能很重要,但我不确定最终哪一个会更好。有什么想法吗?
让我们考虑 GID =100 的 group A
有 3 permissions
:
读取 (PID=1)
写入 (PID=2)
执行(PID=3)
并且有一个用户属于 group A
和 UID=1001
。
让我们以 group A
中的 UserID=1001
为例:
UID GID PID
1001 100 1
1001 100 2
1001 100 3
这是User
、Permission
和Group
之间的多对多关系。
复合键 (UID,GID,PID)
是一个主键,每个键都是一个外键。
Group_User_Permissions
会增加一个额外的关系,但我认为它没有用。 (额外连接 = 复杂查询)
在我的应用程序中,用户可以加入群组,这些群组的管理员可以为每个用户授予不同类型的权限。用户可以加入任意数量的群组。我将如何构建数据库表?
Users Groups Permissions Group_User_Permissions
----------- ----------- ------------------- -----------------------
| UID(pk) | | GID(pk) | | PID(pk) | VALUE | | UID | GID | PID |
这是正确的做法吗? 或者这是必要的:
Users Groups Permissions User_Groups Group_User_Permissions
----------- ----------- ------------------- ------------------------ -----------------------
| UID(pk) | | GID(pk) | | PID(pk) | VALUE | | UGID(pk) | UID | GID | | UGID(pk) | PID |
显然性能很重要,但我不确定最终哪一个会更好。有什么想法吗?
让我们考虑 GID =100 的 group A
有 3 permissions
:
读取 (PID=1)
写入 (PID=2)
执行(PID=3) 并且有一个用户属于
group A
和UID=1001
。 让我们以group A
中的UserID=1001
为例:UID GID PID 1001 100 1 1001 100 2 1001 100 3
这是User
、Permission
和Group
之间的多对多关系。
复合键 (UID,GID,PID)
是一个主键,每个键都是一个外键。
Group_User_Permissions
会增加一个额外的关系,但我认为它没有用。 (额外连接 = 复杂查询)