Database design 使用Boyce Codd范式分解示例解释非加性性质

Database design 使用Boyce Codd范式分解示例解释非加性性质,database-design,dependencies,database-normalization,relational-algebra,functional-dependencies,Database Design,Dependencies,Database Normalization,Relational Algebra,Functional Dependencies,我已经阅读了定义并大致了解了它-在无损连接之后,您不应该丢失任何信息。但是为什么这个具体的例子适用于第三个分解解决方案呢? 这个例子来自Elmasri和Navathe的《数据库系统基础》 我们有一个名为TEACH的表格,其中有学生、教师和课程栏。它是第三范式,我们正试图把它变成BCNF(Boyce Codd范式) 教授(学生、课程、讲师) 本文说,关系教学有三种可能的分解 1) {Student, Instructor} and {Student, Course} 2) {Course, Ins

我已经阅读了定义并大致了解了它-在无损连接之后,您不应该丢失任何信息。但是为什么这个具体的例子适用于第三个分解解决方案呢? 这个例子来自Elmasri和Navathe的《数据库系统基础》

我们有一个名为TEACH的表格,其中有学生、教师和课程栏。它是第三范式,我们正试图把它变成BCNF(Boyce Codd范式)

教授(学生、课程、讲师)

本文说,关系教学有三种可能的分解

1) {Student, Instructor} and {Student, Course}
2) {Course, Instructor} and {Course, Student}
3) {Instructor, Course} and {Instructor, Student}
根据文本,只有两个函数依赖项

1) {学生,课程}->讲师

2) 讲师->课程

根据文本,只有解决方案3是有效的,因为它不会生成伪元组,因此具有非加性特性

伪元组来自于非主属性或非外键的连接。学生不是主要属性吗?那么为什么解决方案1不起作用呢


我对为什么是解决方案3的理解是,我们无法从解决方案1和2中检索诸如“我有一位讲师,讲师教授什么课程?”之类的信息。这将与原始表中的函数依赖性相关,即讲师->课程。

您似乎没有掌握规范化。你需要学习和使用精确的定义

规范化通过(无损/非加性)连接回关系的投影来替换关系。当一个问题FD(函数依赖)位于其中一个组件的超键列上时,移除该问题FD(函数依赖)的二元分解是无损/非可加的。(超级键是CK(候选键)的超集)。(“连接非主属性或非外键”并不表示有损情况。你为什么这么认为?)一旦拥有组件,你必须确定它们的CK/超级键是什么

您的意思大概是这两个FD构成了原始表的封面。(即,唯一有效的FD是有效的FD,因为这些FD有效。)那么组件中唯一有效的非平凡FD是讲师->课程,{讲师}是组件{讲师,课程}的CK,并且组件的超键上唯一的连接选项是3)

Student是它出现在其中的每个组件的主要属性,这意味着它是CK的成员。但是对于无损性来说,重要的是联接是否在超键上,{student}不是任何组件的超键

PS 1。这并不是说“在无损加入后,您不应该丢失任何信息”。根据定义,无损连接是指不丢失任何信息的情况。类似地,“不会生成伪元组”的定义与“具有非加性属性”的含义相同


PS 2。你的“理解”没有得到清楚的解释。假设原始关系包含“讲师向学生讲授课程”的行。当FD讲师->课程在原件中保留时,也可以将其描述为保留“讲师教授课程,讲师教授学生”的行。由于表格连接的含义是表格含义的和/或连接,因此我们可以通过将“讲师讲授课程”和“讲师讲授学生”的两个表格(见第3页)连接起来来重建表格。但是,FD不允许我们用AND per 1)&2)来重新表述原始含义。因此,在这些情况下,用连接替换它是不合适的。

好的,我已经添加了书中所述的函数依赖项。是的,我不清楚标准化,但我们的课程在课程的最后两天匆匆完成了这个部分,我们没有关于这个材料的作业。没有机会练习。
1) {Student, Instructor} and {Student, Course}
2) {Course, Instructor} and {Course, Student}
3) {Instructor, Course} and {Instructor, Student}