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

时间:2012-04-20 19:05:45

标签: database-design constraints

考虑以下情况:学生获得不同主题的成绩,其中 n 年级学生只参加涵盖 n 年级主题的课程。所以,我们得到了一个可交换的“属于”的广场:

 Grades -----> Students
   |             |
   |             |
   v             v
 Topics -----> Levels

这就是我所说的主题中的“多路径”。

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

现在添加以下数据:主题被分组到主题中,并且还有一些数据X附加到某些对(学生,主题),因此X基本上是笛卡尔积学生x主题的子集。现在知道以下事实(F):成绩总是对应于在X中有记录的对(学生,科目),因此我们可以将表成绩中的学生外键提升为引用X的外键:

 Grades -------> X -------> Students
   |             |
   |             |
   v             v
 Topics ----> Subjects

引入另一个多路径约束(但另一方面确保条件(F))。

(2)关于这些事情的理论观点是什么?

如果这太模糊,请允许我将其限制为以下内容:

(2')什么是首选设计:“不相交”的方式,使得表格等级具有学生和主题的外键,或者以引入圣经为代价的更紧密的表格X的“紧密”方式?

2 个答案:

答案 0 :(得分:0)

我会用下面的表格设计来接近它:

a)科目 - 科目

b)主题 - 所有可用主题的列表,每个主题都有一个FK主题

c)学生 - 学生的详细信息

d)student_subject - 为学生分配科目,其他元数据包括级别或班级,开始日期或结束日期(因为学生可能会重复)

e)成绩 - FK到student_subject组合,附加元数据,日期,成绩,评论等。

答案 1 :(得分:0)

实际上,目前我对How to provide constraint to an associative table relating to two source tables with a common foreign key?

中给出的解决方案感到满意

摘要:将一个列level_id添加到Grades,并分别引用主题和学生的多列外键(topic_id,level_id)和(student_id,level_id)。