Mysql 避免冗余外键

Mysql avoid redundant foreign keys

我有以下数据库架构:

t_class:存储关于class(主键:class_ID

的元数据

t_students:通过外键 class_ID

链接到 class

t_exams:存储有关考试的元数据(目前没有外键)

t_grades:将 t_exams 链接到 t_students,因为两者具有 n 到 m 的关系(没有主键,但有两个外键:exam_IDstudent_ID).它还有 grade 列,用于存储每个学生的考试成绩。

问题:可能 t_grades 没有特定考试的条目。使用当前架构,如果 t_grades 没有条目,则无法获得 class 的所有考试。

我的解决方案:
a) 在t_exams中添加一个键class_ID。缺点:它更像是一个冗余键,我不能将它添加为外键(导致 mysql 错误 1452)
b) 自动将 class 的所有学生添加到 t_grades 并且将 t_grades.grade 留空。这也感觉很多余。

问题:有没有更好的方法来解决这个特定问题,还是我应该坚持使用我的解决方案之一?

创建代码:

我真的不喜欢你绘制数据库设计图的方式,但我理解你的问题。

我认为您应该将 t_exams 直接连接到 t_classes,因为 class 中的所有学生都应该参加考试。所以,这是你的第一个解决方案。

简单来说:学生属于class,class可以参加考试,学生参加的考试可以评分。

对我来说,这似乎是一个完全合乎逻辑的设计。我不明白为什么你不能实施这个?我想我们需要查看您的 CREATE TABLE 查询?

我同意:我的图表也远非完美,但就像你的一样:我希望你能理解。