我的应用程序基本上是一种群组管理内容的方式。
将有3个不同级别的用户:
群组管理员应该能够从群组中删除成员。无论用户级别如何,任何人都可以成为组的成员,并且可以同时成为多个组的成员。
令我困惑的部分是如何跟踪成员可以参与的多个组。
我应该如何构建数据库以便实现这一目标?
到目前为止,这是我的想法:
//pseudo code:
users
( id , username , password , role ) //role within website
groups
( id , name )
group_members
( group_id , user_id , role ) //role within group
group_members VALUES
( 1 , 1 , 'group admin' )
( 1 , 2 , 'group member' )
( 2 , 2 , 'group member' )
这是我应该如何追踪群组成员资格吗?
答案 0 :(得分:1)
似乎结构比较合理。但是,也许我会将文本角色字段替换为单独的ROLE表,或者用表示角色的整数替换。
group_members
(group_id, user_id, role_id)
role
( role_id, name)
或
group_members VALUES
(1, 1, 1)
role 1 => group admin
role 2 => group member
etc.
答案 1 :(得分:1)
USERS
表user_id
,pk username
password
ROLES
表role_id
,pk role_name
GROUPS
表group_id
,pk group_name
USER_GROUP_ROLES_XREF
表user_id
,pk,fk role_id
,pk,fk group_id
,pk,fk USER_GROUP_ROLES_XREF
表的主键是复合键 - 这意味着确保用户每个组只能有一个角色,因为只允许一个记录与值组合使用。并且由于所有三个值的组合,用户可以参与多个组。
答案 2 :(得分:0)
对我来说很好,虽然我使用int id来表示'group member'或'group admin'(而不是文本)。换句话说,有另一个表示用户类型的表,并且该表中的id将在group_members中分配。
如果只有一个组管理员,另一种方法是将用户ID放入组表中,表示组的管理员。但是,这会将您锁定为始终具有单个组管理员。
答案 3 :(得分:0)
我将您的角色字段更改为布尔值或ENUM(“Y”,“N”)类型的东西并将其称为“is_admin” - 但除此之外它看起来不错
答案 4 :(得分:0)
我会做一些改变:
//伪代码:
用户 (id,username,password,id_role)//网站内的角色
users_role (id,role)
基 (id,name)
group_members (group_id,user_id,id_group_role)//组内的角色
group_role (id,role)
group_members VALUES (1,1,1) (1,2,2) (2,2,2)