什么是关系数据理论:用来评判数据库逻辑设计“好坏程度”的标准;二是如果逻辑设计中存在“不好”的关系模式,如何将其修改为“好”的关系模式。
函数依赖:举个例子:学生表中,一个学生的学生号确定了,学生的姓名及其他属性值也就被唯一地确定了所以有这样的函数依赖:Sno---->Sname,Sno--->School.
但是函数依赖也分好坏:假如如下有一个函数依赖关系:
当一个学生学号确定下来了,相应的学院和院长信息也被确认了,学生学号和课程编号可确认一个成绩值。下面的关系表如下:
评价函数依赖可以从如下四个方面进行:
1.数据冗余:比如院长姓名重复出现,浪费存储空间。
2.更新异常:当更新数据库时,更换院长后,要把每一个院长的值给更新。
3.插入异常:一个学院刚成立,没有学生,那么此时院长信息也无法插入。
4.删除异常,如果一个学院学生全都毕业了,则在删除信息的同时,也把院长信息给删除了。
部分函数依赖:若X->Y但是Y不完全函数依赖于X,则称Y对X部分函数依赖。比如(学生学号,课程号)--->可以唯一决定一个学院,但是对于学院来说是对(学生学号,课程号)是部分函数依赖。
因为学生学号--->学院名称,然而学生学号只是(学生学号,课程号)属性组的真子集。
完全函数依赖:X----->Y,但是X中的真子集却无法满足可以唯一确定Y。
传递依赖:X->Y, Y->Z所以X->Z.
候选码:可以唯一决定一个元组的属性或者属性组就叫做候选码。R(U,F),K是属性组U中的真子集,且K->U,U完全依赖于K,而不是部分完全依赖于K。
超码:存在一个关系R(U,F),有K->U,U部分完全依赖于K,那么就把关系/关系组K叫做此关系的超码。
主码:如果候选码多于一个,则选择其中的一个作为主码。
外码:关系R中有X并非R的码,而是另外一个关系中的码。
全码:一个关系中的码包括了这个关系中的全部属性。
范式:符合某一种级别的关系模式的集合。
规范化:一个低一级别的关系模式通过通过模式分解可以分解成若干个更高级别的范式的关系模式的集合。
1NF,2NF,3NF,BCNF,4NF.从左到右级别越高,而且级别低的包含了级别高的关系模式。
1NF:作为二维表,关系要符合一个最基本的条件是每一个分量必须是不可分的数据项。
2NF:当一个关系属于1NF,然后每一个非主属性都完全函数依赖于任一一个候选码。
举个例子:下面的例子就不符合一个2NF关系,因为对于住所和学院这两个非主属性码部分函数依赖于候选码(学生号,课程号)。
可以将其进行分解,分解后成为:这时就符合每一个非主属性完全函数依赖于码。
3NF:在2NF的基础上,加上一条每一个非主属性值也不部分函数依赖于任意一个码。用上面的图解释:Sno->School,School->Sloc,那么Sloc传递依赖于Sno。所以不符合3NF。
BCNF:
多值依赖:举个例子:(属性1,属性2)---->属性3,属性3仅仅由属性1决定,无论属性2的值取什么都不改变。跟部分函数依赖的区别在于:部分函数依赖它的属性2的值跟属性3的值是挂钩的。
定义:X->->Y成立,当且仅当对R(U,F)的任一关系r(某一行),给定的一对(x,z)值,有一组Y,这组值仅仅决定于x值而与z值无关。
在这个例子中:李勇,王军这些授课老师的值和参考资料的取值毫无关系,只与所教科目有关系:物理。
平凡的多值依赖:若X->->Y,且Z为空,X,Y,Z都是U的子集,X+Y+Z=U,则称X_>->Y为平凡的多值依赖。
4NF:如果在符合1NF的基础上,关系R的每个非平凡多值依赖X->->Y(Y不是X的真子集),X都含有候选码。