Mysql db设计用户,团队,组

时间:2015-03-03 12:48:18

标签: mysql database-design normalization

我有3个表用户,团队,组。每个团队都可以拥有多个团队。在每个组中都有一个或多个用户。用户可以分为多个组。您认为为所有用户使用组会更好(因此每个团队至少会有一个名为所有用户的组)或者引入另一个表team_user (id,user_id,team_id)

由于

2 个答案:

答案 0 :(得分:0)

我不确定你的意思

  

您认为为所有用户使用组会更好吗(因此每个团队至少会有一个名为所有用户的组)

但无论如何我会同意你的“或”部分句子。

如果用户可以属于多个组,并且组可以包含多个用户,那么您将拥有多对多关系,在查看规范化时最好在3个表中进行描述。

User
----
userId PK

Group
----
groupId PK
teamId -- assumption here, you said a team can have multiple groups, i was interpreting that as a group can't belong to multiple teams.

Team
----
teamiD PK

user_group
----
userId PK
groupId PK

user_group -- unique constraint on userId/groupId
----
id PK
userId 
groupId

答案 1 :(得分:0)

Personaly我更喜欢额外的team_user关系。 但最终它并没有产生很大的不同: 如果你没有它,你需要一些想法来确定每个团队的“所有你的团队”,并确保每个团队都是一个。 (如果团队可以拥有0个用户,则可能为0。巫婆会出现问题“在每个组中都有一个或多个用户。”)在这两种方式中,您必须确保如果添加用户(A),组( B)USER_GROUP关系“用户在团队中”也是如此。 (我认为通过额外的关系,这种约束看起来会更好,但两者都是可能的。)

所以我会有DB Schema:PK =主键的一部分,FK =外键

USER
user_id PK

-

GROUP
group_id PK
team_id FK (becaus n Groups to 1 Team.) 

-

TEAM
team_id PK

关系:

USER_TEAM
user_id PK FK
team_id PK FK
(Optional a own id witch is PK but why would you need that?)

-

USER_GROUP
user_id PK FK
group_id PK FK
(Again: Optional a own id witch is PK but why would you need that?)

在将用户(A),组(B)添加到USER_GROUP之后进行检查的约束(如果是用户(A),在USER_TEAM中的团队(X)条目,其中X作为在组(B)中设置的团队。如果从user_team关系中删除条目,则另一种方式是arround。 (因此,用户也不再是该团队成员。)