Mysql避免冗余外键

时间:2017-03-18 19:39:38

标签: mysql database database-design relational-database database-schema

我有以下数据库架构: Picture of the model

t_class:存储有关类的元数据(主键:class_ID

t_students:通过外键class_ID

链接到类

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

t_grades:将t_exams链接到t_students,因为两者都有关系(没有主键,但有两个外键:exam_ID和{{1} })。它还有一列student_ID,用于存储每个学生在考试中的成绩。

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

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

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

创建代码:

1 个答案:

答案 0 :(得分:1)

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

在我看来,您应该将t_exams直接与t_classes相关联,因为班上的所有学生都应该参加考试。那么,这是你的第一个解决方案。

简单来说:学生属于一个班级,一个班级可以参加考试,一个学生参加的考试可以评分。 enter image description here

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

我同意:我的图表也远非完美,但就像你的一样:我希望你能得到这个想法。