建模:三张表的关系

Modelling: Relationship of three Tables

我有三个实体:学生、教授和 essay_topics。

情况:学生可以写几篇论文essay_topic 教授 的监督。 (粗体:实体)

但他们只能在特定教授的指导下写一篇论文一次。 (不是同一位教授的两次) 而且他们可以写一篇文章essay_topic和他们一样。

这是唯一的限制,但应该有可能:一个教授可以用相同的 essay_topic 指导几个学生。不同的教授可以用同样的essay_topic.

指导不同的学生

所以我们有一篇关系论文(StudentID, EssayTopicID, ProfessorID)。 但是我现在看不到主键是什么。或者我们在这里有什么样的关系?我猜 n:1:1 (呃模型)。但是,只有 StudentID 才是那个 table 的主键——实际上是错误的,因为学生只能写一篇论文……

如果您希望您的数据库引擎防止为每个学生添加多个相同的主题和教授,您将需要一个复合键/复合约束 student_id + topic_id + professor_id。看看这个问题: How do I specify unique constraint for multiple columns in MySQL?

如果你写下你的限制的功能依赖,有助于理解情况:

(student, essay_topic) -> professor
(student, professor) -> essay_topic

您有两个重叠的候选键 - (student, essay_topic)(student, professor)。您可以选择其中一个作为物理模型中的主键,只要您为另一个添加唯一约束即可。

我怀疑这是一种无法在 ER 中精确建模的情况(是的,与关系模型不同,ER 不是一个完整的数据模型)。我会省略基数指示符并包括 FD 作为评论。

PS。请不要混淆实体之间的关系和表之间的关系。实体之间的关系在表中记录为(通常是不同的)实体集之间的关联。表之间的关系是外键约束,对同一实体集的两列强制执行子集限制。