数据库设计中的循环关系有3个表

时间:2014-10-04 20:29:54

标签: database-design circular-reference

您将如何完成这些要求?

教师有很多成员教师属于委员会。 现在 - 在理事会中,来自相应的教师的代表成员。这部分创建了一个循环关系(见图)。我的设计方法存在哪些问题?

Circular reference in design

3 个答案:

答案 0 :(得分:1)

忽略memberId中的facultyIdCouncil字段。将councilId字段添加到Faculty,将facultyId字段添加到Members

数据库将如下所示:

enter image description here

您可以使用以下查询找到理事会中的成员:

SELECT
    *
FROM
    Council AS c
    INNER JOIN
    Faculty AS f
    ON
        f.councilId = c.councilId
    INNER JOIN
    Members AS m
    ON
        m.facultyId = f.facultyId

答案 1 :(得分:0)

我会在每个表中保留id +名称(所以教师名+教师名,memberid + membername和councilid + councilname)。

然后你可以拥有以下链接表:faculty_members与facultyid,memberid,faculty_council的表,facultyid和councilid作为列,一个council_members,memberid和councilid作为列。

答案 2 :(得分:0)

"我的设计方法存在哪些问题?"

无处。您已经获得了业务规则,并且您已对其进行了适当的建模。

据推测(大概是因为你没有明确说明这种效果),"问题"你认为有一个规则,即理事会的一个代表性成员必须是理事会所属的教员。也就是说,理事会中的FacultyID必须等于成员中出现的具有相关成员ID的行的FacultyID。也就是说,来自理事会的(MemberID FacultyID)对必须是来自成员的(MemberID FacultyID)对的子集。

理事会的外键声明可以实现这一点,但您需要(MemberID FacultyID)作为会员的唯一密钥。您需要将此(额外的,冗余的)UNIQUE声明添加到Member,然后事情应该有效。