我有实体“学生”和“课程”,它们与称为“考试”的多对多关系相关联。关系“Exam”有一个属性“Grade”。对于这个 ER 模型,我制作了一个关系模式:
Student(StudentID, StudentName, DoB)
Course(CourseID, CourseName)
Exam(StudentID, CourseID, Grade)
有人可以解释一下您如何将学生无法为一门课程获得多个成绩的事实放入关系模式中吗?例如,我们不能有 和 之类的(Student1, Course1, Grade1)
记录(Student1, Course1, Grade2)
。
您将为此创建一个唯一约束,
exam (StudentId, CourseId)
通常可以通过该表上覆盖两列的唯一索引来实现。这是 MySql 中的快速演示
在关系数据库中,每个表都应该有一个主键。
主键可以是一列,例如 StudentId,也可以是复合键,例如 (StudentID, CourseID),这正是您在考试中应该使用的。
然后,考试的主键保证“学生不能为一门课程获得多个成绩”,因为这需要多行具有相同的 (StudentID, CourseID) 值。