Database design 数据库设计:多路径完整性约束
考虑以下情况:学生获得不同主题的分数,其中n年级学生只参加涵盖n年级主题的课程。我们得到一个交换的“属于”平方: 这就是我在主题中所说的“多路径”的意思 (1) 这种约束的技术术语是什么 现在添加以下数据:主题被分组为主题,并且有更多的数据X附加到某些对(学生,主题),因此X本质上是学生X主题笛卡尔积的子集。现在,我们知道了以下事实(F):成绩始终对应于在X中有记录的配对(学生、科目),因此我们可以将表grades中的学生外键提升为引用X的外键:Database design 数据库设计:多路径完整性约束,database-design,constraints,Database Design,Constraints,考虑以下情况:学生获得不同主题的分数,其中n年级学生只参加涵盖n年级主题的课程。我们得到一个交换的“属于”平方: 这就是我在主题中所说的“多路径”的意思 (1) 这种约束的技术术语是什么 现在添加以下数据:主题被分组为主题,并且有更多的数据X附加到某些对(学生,主题),因此X本质上是学生X主题笛卡尔积的子集。现在,我们知道了以下事实(F):成绩始终对应于在X中有记录的配对(学生、科目),因此我们可以将表grades中的学生外键提升为引用X的外键: Grades -------> X --
Grades -------> X -------> Students
| |
| |
v v
Topics ----> Subjects
引入另一个多路径约束(但另一方面确保条件(F))
(2) 对这些事情的理论观点是什么
如果这一点太模糊,让我将其限制在以下方面:
(2')首选的设计是什么:以“不相交”的方式,使表分数具有学生和主题的外键,还是以引入Constant为代价,以“紧凑”的方式引用更接近的表X?我将采用以下表设计: a) 主题-主题 b) 主题-所有可用主题的列表,每个主题都有一个FK to主题 c) 学生-学生的详细信息 d) 学生科目-将科目分配给学生,其他元数据包括级别或班级、开始日期或结束日期(因为学生可能会重复)
e) 成绩-FK到学生\大学科目组合,以及附加元数据、日期、成绩、评论等。实际上,目前我对中给出的解决方案感到满意
小结:在成绩中添加一个列级别id,并使用多列外键(主题id,级别id)和(学生id,级别id)分别引用主题和学生。问题到底是什么?PKs使用哪些列以及如何定义FK约束?否。问题是如何处理不能用简单FK约束表示的约束。这可以用FK约束表示。不管你认为它们是简单的还是复杂的,这都是另一回事。你是什么意思:“以介绍密码为代价?”你想要约束由数据库强制执行,不是吗?“通过代价”,我的意思是自动完整性比数据库强制完整性更可取。剩下的,请看下面我的答案。这就是我最终要做的。我不确定你所说的“FK to student_subject”是什么意思:我从一个单独的自动增量PK开始,以年级为参照,但这个额外的间接层次太麻烦了,所以我将student_subject改为多列(student,subject)PK和相应的分数对学生和科目都有FK。独立的间接层次是必要的,因为学生可能在一年以上选修同一科目,或者他们可能会重修课程,因此你需要知道你需要哪种特定的学生科目组合。如果您使用的是UI,则可以隐藏此附加级别的重定向
Grades -------> X -------> Students
| |
| |
v v
Topics ----> Subjects