建模:三个表的关系

时间:2016-06-14 19:17:37

标签: mysql database relationship entity-relationship

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

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

但是他们只能在特定教授曾经的监督下写一篇文章。 (不是同一位教授的两倍) 他们可以用他们的相同的 essay_topic写一篇文章。

这是唯一的限制,但应该有可能:教授可以用同样的论文来监督几个学生。不同的教授可以用同样的论文来监督不同的学生。

所以我们有一篇关系论文(StudentID,EssayTopicID,ProfessorID)。 但我现在还不知道主键是什么。或者我们在这里有什么样的关系?我猜n:1:1(呃型号)。但是,只有StudentID才会成为该表的主键 - 实际上是错的,因为学生只能写一篇文章......

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您记下限制的功能依赖关系,则有助于了解情况:

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

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

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

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