您将如何完成这些要求?
教师有很多成员。 教师属于委员会。 现在 - 在理事会中,来自相应的教师的代表成员。这部分创建了一个循环关系(见图)。我的设计方法存在哪些问题?
答案 0 :(得分:1)
忽略memberId
中的facultyId
和Council
字段。将councilId
字段添加到Faculty
,将facultyId
字段添加到Members
。
数据库将如下所示:
您可以使用以下查询找到理事会中的成员:
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,然后事情应该有效。