我需要一些帮助才能正确设计SQL数据库。这就是我想要的:
**Group A :**
- Alice (Manager)
- Bob
- Carol
**Group B :**
- Dave (Manager)
- Eve
- Mallory
**Group C :**
- Oscar (Manager)
- Trudy
- Isaac
**Group Z**
- Admin (Manager)
- Alice
- Dave
- Oscar
一些限制:
1)每个成员都可以看到他们小组中的人员的计划。对于 例如,当Bob登录时,他可以咨询Alice和Carole的计划 添加到他自己的。
2)经理可以更新他们小组中的人员的时间表,但不能更新他们自己的时间表!所以 爱丽丝可以管理鲍勃和卡罗尔,戴夫可以管理夏娃和马洛里,奥斯卡 管理Trudy和Isaac,最后Admin管理Alice,Dave和 奥斯卡计划。
3)已经同意Alice会帮Dave管理他的小组, 所以,爱丽丝可以管理夏娃和马洛里(但不是戴夫),但夏娃和夏娃 马洛里看不到爱丽丝的计划,因为她仍然属于A组。
4)管理员是唯一可以更新自己计划的经理。还有他 可以咨询每个人的计划,但只有他们小组中的人才能看到 他的计划(所以爱丽丝,戴夫和奥斯卡基本上)
5)用户可以在多个组中(看看Alice,Dave和Oscar那个 也在Z组)。他们可以选择咨询 在他们登录时计划指定的组,这不是问题。
我会做类似的事情:
TABLE User
id
nom
prenom
login
password
userGroup
TABLE group
id
groupName
groupManager
但是这显然不会起作用,除非我可以将Array设置为groupManager的值(我不擅长SQL,但我很确定这是不可能的,不是吗?)
有人可以指导我做一些能让我达到预期目标的东西吗?
答案 0 :(得分:2)
由于您的设计需要用户和组之间的多对多关系(一个组包含多个用户;用户可以在多个组中),我会使用以下内容:
User
(
ID
, Name
, Login
, Password
, etc.
)
Group
(
ID
, Name
, etc.
)
Group_Role
(
ID
, Role_Description
, etc.
)
User_Group_Role
(
ID
, User_ID -- foreign key to User.ID
, Group_ID -- foreign key to Group.ID
, Group_Role_ID -- foreign key to Group_Role.ID
)
所以您的Users表将包含
1 | Alice
2 | Bob
3 | Carol
4 | Dave
5 | Eve
6 | Mallory
99 | Admin
,您的Groups表将包含
1 | Group A
2 | Group B
99 | Group Z
,您的Group_Roles表将包含
之类的内容 1 | Consult
2 | Manage -- cannot manage self
3 | Assist
4 | SuperManage -- can manage self
,最后是User_Group_Role表:
1 | 1 | 1 | 2 -- Alice manages Group A
2 | 2 | 1 | 1 -- Bob consults in Group A
3 | 3 | 1 | 1 -- Carol consults in Group A
4 | 4 | 2 | 2 -- Dave manages Group B
5 | 1 | 2 | 3 -- Carol assists with Group B
6 | 5 | 2 | 1 -- Eve consults in Group A
7 | 6 | 2 | 1 -- Mallory consults in Group A
etc.
这有意义吗?