Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 数据库设计:多路径完整性约束_Database Design_Constraints - Fatal编程技术网

Database design 数据库设计:多路径完整性约束

Database design 数据库设计:多路径完整性约束,database-design,constraints,Database Design,Constraints,考虑以下情况:学生获得不同主题的分数,其中n年级学生只参加涵盖n年级主题的课程。我们得到一个交换的“属于”平方: 这就是我在主题中所说的“多路径”的意思 (1) 这种约束的技术术语是什么 现在添加以下数据:主题被分组为主题,并且有更多的数据X附加到某些对(学生,主题),因此X本质上是学生X主题笛卡尔积的子集。现在,我们知道了以下事实(F):成绩始终对应于在X中有记录的配对(学生、科目),因此我们可以将表grades中的学生外键提升为引用X的外键: Grades -------> X --

考虑以下情况:学生获得不同主题的分数,其中n年级学生只参加涵盖n年级主题的课程。我们得到一个交换的“属于”平方:

这就是我在主题中所说的“多路径”的意思

(1) 这种约束的技术术语是什么

现在添加以下数据:主题被分组为主题,并且有更多的数据X附加到某些对(学生,主题),因此X本质上是学生X主题笛卡尔积的子集。现在,我们知道了以下事实(F):成绩始终对应于在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