我已经阅读了定义并得到了它 - 在无损加入之后你不应该丢失任何信息。但为什么这个具体的例子用于第三个分解解决方案呢? 这个例子来自Elmasri和Navathe的数据库系统基础。
我们有一个名为TEACH的表格,包括学生,教师和课程。它处于第3范式,我们正试图将其变成BCNF(Boyce Codd Normal Form)。
TEACH(学生,课程,讲师)
STUDENT COURSE INSTRUCTOR
Nathan Database Mark
Smith Database Navathe
Smith Op Sys Ammar
Smith Theory Schulman
Wallace Database Mark
Wallace Op Sys Ahamad
Wong Database Omienscki
Zelaya Database Navathe
文本说关系TEACH
有三种可能的分解1) {Student, Instructor} and {Student, Course}
2) {Course, Instructor} and {Course, Student}
3) {Instructor, Course} and {Instructor, Student}
根据文本,只有两个功能依赖
1){student,course} - >讲师
2)讲师 - >当然
根据文本,只有解决方案3是有效的,因为它不会产生虚假元组,因此具有非附加属性。
虚假元组来自加入非主要属性或非外键。不是学生的主要属性吗?那么为什么解决方案1不起作用呢?
我对解决方案3原因的理解是我们无法检索诸如&#34之类的信息;我有一位教师,教师教授什么课程?"从解决方案1和2开始。这将与原始表中的函数依赖关系相关,即教师 - >场。
答案 0 :(得分:1)
您似乎没有掌握正常化。您需要学习并使用精确的定义。
规范化通过对它的预测(无损/非无条件地)加入它来替换关系。去除有问题的FD(函数依赖性)的二进制分解在其中一个组件的超级键的列上是无损/非加性的。 (超级密钥是CK(候选密钥)的超集。)("加入非主要属性或非外键" 不表征有损案例。为什么你认为?)一旦你有组件,你必须确定他们的CK /超级密钥是什么。
大概你的意思是那两个FD形成原始表的封面。 (即,持有的唯一FD是持有的那些,因为那些持有。)然后,组件中唯一的非平凡FD是教师 - >课程和{Instructor}是组件{讲师,课程}的CK,并且唯一的选择是组件超级键的连接是3)。
学生是其出现的每个组成部分的主要属性,这意味着它是CK的成员。但是对于无损是最重要的是连接是否是在超级密钥上,而{student}不是任何组件的超级密钥。
PS 1.不是那么"在无损加入后你不应该丢失任何信息"。 根据定义无损连接是 时,您不会丢失任何信息。同样,"不会产生虚假元组" 根据定义意味着同样的东西因为"具有[非]添加属性"。
PS 2.您的理解"没有清楚解释。假设原始关系持有行,其中"讲师INSTRUCTOR教授课程课程给学生学生"。当FD教练 - >课程在原文中保存,也可以描述为持有行"讲师INSTRUCTOR教课程课程和讲师INSTRUCTOR教学生学生"。由于表的JOIN的含义是表的含义的AND /连接,我们可以通过将两个表连接到&#34来重建表;教师INSTRUCTOR教授课程课程" &安培; "讲师INSTRUCTOR教学生学生"每3)。但是FD并不允许我们用AND per 1)& amp; 2)。因此,在这些情况下用JOIN替换它是不合适的。