什么是正确的 ERD 设计方法?

What would be the correct ERD design approach?

我曾尝试设计这个,但我不知道如何实现 dot point 4 (team leaders)。我的 erd 允许任何成员领导任何团队。我该如何修改它?

尝试:http://i.imgur.com/LHwOmL6.png

正如你所看到的,我认为我在 MEMBER 和 TEAM 之间的关系是错误的,因为任何成员都可以领导任何违反我规则的团队。 (忽略类型)

TEAM
-------
team_id
name
department_id

Person
--------
person_id
name

Team Member
---------------
team_id
person_id
is_leader

Department
-----------
Department_id
name

让我们一步步满足您的要求。

A department has 1 or more teams.

那么,让我们创建一个部门 table。

Department
----------
Department ID
Department Name
...

A team can only be in a single department.

现在,我们创建一个团队 table。

Team
----
Team ID
Department ID
Team Name
...

部门 ID 是返回部门的外键 table。 (Department ID, Team ID) 有一个唯一索引,因此您可以看到一个部门中的团队。

Members can join 1 or more teams

Teams can have 1 or more members

首先,我们需要一个会员table。

Member
------
Member ID
Member Name
...

接下来,团队和成员 table 具有多对多关系。我们用 TeamMember 联结 table.

表示这种关系
TeamMember
----------
Team ID
Member ID
Join Time Stamp
...

主键是(Team ID, Member ID)。您还将拥有一个关于(成员 ID、团队 ID)的唯一索引。您从主键中获取团队成员。您从唯一索引中获取该成员所属的团队。

A member can lead 0 or more teams.

Each team has a single member leader...

如您所见,这些是棘手的要求。这是对这些关系建模的一种方法。

Leader
------
Team ID
Member ID
Promotion Time Stamp
...

这个Leadertable有主键(Team ID)和唯一索引(Member ID,Team ID)。主键只是团队 ID,以强制执行每个团队一名领导者的要求。

必须先检查 TeamMember table 上是否存在(团队 ID,成员 ID),然后才能将行写入 Leader table。这强制执行了领导者必须是团队成员的要求。

否则,您可以将这些列放在 TeamMember table 中,对于非领导者,这些列的值为空。