数据库知识整理——关系的规范化(一)

一、基本的概念
二、范式
三、思考题


一、基本的概念


1、模式和关系实例

模式:模式是一种规范,也就是说起定义该模式下的关系实力应该满足的条件,一般来说其规定的就是表的字段之间应该满足的关系,其相对来说是固定的。
关系实例:关系实例是指满足关系模式的具体的关系的值,其实具体的表的内容,关系实例相对来说是变化的。一个关系模式可以有许多的关系实例。

满足函数依赖的关系模式和关系实例:
满足函数依赖的关系模式:要求的是在该关系模式下的所有的关系实例都应该满足该函数依赖。
满足函数依赖的关系实例:只需要在该关系实例中满足该函数依赖就可以了。

2、函数依赖
a、定义
在关系模式R(U)中,存在属性集X,Y,在该关系模式下的关系实例r,对于任意的r的关系元组s,t,如果s[X]=t[X],则有s[Y]=t[Y,那么就有X->Y,也就是X函数决定Y,Y函数依赖于X。
b、平凡的函数依赖
如果在函数依赖X->Y中,Y是X的子集,那么称X->Y是平凡的函数依赖。
c、传递函数依赖
如果在R(U)上满足X->Y,Y->Z,并且Y->X不成立,Z不是Y的子集,那么就称为Z对X传递依赖。
传递依赖的关键是传递,而不是直接进行依赖,我们可以理解为是间接的依赖,虽然可能会有X->Z,但是直接存在X->Z与有X->Y,Y->Z,两者之间是不同的。传递依赖更强调的是一种间接依赖的概念,例如sno->dno,dno->dean,虽然dean与sno没有直接的关系,但是两者之间存在间接的依赖关系。
也就是说传递依赖会引入一些不良的以来,例如上面的例子中,现实的生活中dean与sno应该是没有关系的,但是由于传递依赖建立两者之间的依赖关系,而这种依赖关系是不良的,也就是说传递的函数依赖有时会引入现实生活中不存在或者不符合逻辑的函数依赖关系。

3、多值依赖
a、描述式定义
在关系模式R(U)中,对于属性集X,Y,Z=U-X-Y,对于该关系模式下的关系实例r,如果对于任意的一对(x,z)的在Y字段上的取值与x在Y字段上的取值是相同的,从关系代数的象集的角度来考虑也就是说如果Yx=Yxz,那么就有X多值决定Y,而Y多值依赖于X,记为X->->Y。
b、形式定义
在关系模式R(U),存在属性集X,Y,Z=U-X-Y,对于关系实例r,如果存在元组s,t,具体的内容为(s[X],s[Y],s[Z]),(t[X],t[Y],t[Z]),那么就必然存在元组(s[X],t[Y],s[Z])和(t[X],s[Y],t[Z]),那么就有X->->Y。
c、从具体的内容含义来看
多值依赖的目的是用来表示属性集合之间没有关系,所以比如存在X->->Y,Z=U-X-Y,那么就是为了说明Y与Z之间没有关系,也就是两个集合之间是对等的,而对等的具体的含义是指两个集合看到的内容应该是相同的。


虽然课上老师是这样说的,但是我的理解更倾向于两者没有关系,所以比如有元祖s,t,如果只有s[Y],S[Z],那么久相当于将这两个关联起来了,也就是说Y与Z这两个属性集之间是存在关系的,所以也就不符合集合之间是没有关系的要求。

d、平凡的多值依赖
如果存在多值依赖X->->Y,其中Y是X的子集,那么就称该以来为平凡的多值依赖

4、连接依赖
a、定义:
对于关系模式R(U),如果对其进行分解,将其分解为不同的关系模式R1(U),R2(U)……对于该模式下的关系实例,将该关系实例同样分成这几个部分,那么将这几个部分进行自然连接,如果最后自然连接得到的是原来的关系实例,那么就说明该关系实例满足该连接依赖,如果模式的所有的关系实例都满足该连接依赖,那么就称该关系模式符合该连接依赖。

b、平凡的连接依赖
如果在其分解的某个Ri(Ui)=R(U),那么就称该连接依赖为平凡的连接依赖

5、函数依赖、连接以来和多值依赖之间的关系
a、函数依赖和多值依赖之间的转换
函数依赖是多值依赖的特殊的例子,也就是说函数依赖是多值依赖,但是多值依赖不一定是函数依赖。

b、多值依赖和连接依赖之间的关系
对于关系模式R(U)存在连接依赖R1和R2,那么与其等价的多值依赖是: R1交R2->->R1,也就是说:

而多值依赖和函数依赖之间并没有直接的转换的关系,所以一般要寻找两者之间的关系的话就通过多值依赖作为中间的媒介。

c、多值依赖和函数依赖之间的区别

  1. 函数依赖是决定的关系,也就是说函数依赖要求的是某些元组是不能出现的,但是多值依赖要求的是需要一些元组来满足多值依赖。
  2. 与之相关的集合不同。例如函数依赖X->Y,那么其成立与否只和X,Y有关,与其他的属性集是没有关系的。但是多值依赖X->->Y要求的是Y与U-Y之间是无关的,是对等的,所以在多值依赖中除了与自己的属性集有关之外,还与剩余的范围有关。
  3. 作用的范围不同。X->Y只要是在该关系模式下,对于任意的包含XY的属性集W,X->Y在W上都是以成立的,但是X->->Y则不一定,总之判断的依据是看Y是否与剩下的元素之间的无关/对等关系是都还仍然成立。对于多值依赖,我认为最好的判断的方法就是看属性集之间的对等/无关的关系是否成立

二、范式

1、不同级别的范式
  1. 1NF:要求所以的属性都是单属性,不能是复合属性,属性不能再分,而具体属性集合应该细分到什么程度与具体的应用需求有关。1NF的缺点是其会引入一些不符合实际的函数依赖。
  2. 2NF:要求所有的非主属性完全依赖于码,也就是说其要求的只是 如果非主属性要依赖于码,那么必须是完全依赖,不能是部分以依赖,并没有要求非主属性不能以来与其他的非主属性(BCNF才要求的是所有属性都必须依赖码)。所以判断的步骤是:首先判断出码是什么,找出非主属性,然后判断非主属性的函数以来关系,判断是否有非主属性部分依赖于码。
  3. 3NF:不存在X->Y,Y->Z,Y不决定X,Z不是Y的子集,并且Z是非主属性。
  4. BCNF:对于所有的函数依赖X->Y(Y不是X的子集),其中X必须是码(只是要求是码,没有要求是候选码,所以比候选码多出一些属性也是可以得)
  5. 4NF:如果存在多值依赖X->->Y,那么X中必定含有码。
  6. PJNF:如果存在链接以来R1,R2……,那么满足(1)或者(2)中的任意一个条件:
    (1)存在Ri=R,也就是说这是一个平凡的多值依赖
    (2)任意的Ri中都含有码

2、不同级别的范式之间的关系

  1. 1NF会引入不良的函数依赖
  2. 2NF消除了非主属性对码的部分依赖
  3. 3NF消除了非主属性对码的传递依赖(这其实实现了非主属性直接依赖于码)
  4. BCNF消除了主属性对码的部分依赖和传递依赖
  5. 4NF消除非平凡的多值依赖,这里可以这样理解,在4NF中非平凡的多值依赖必须要依赖于码,那么如果不存在非平凡的多值依赖,那么就一定是4NF的,所以我们只要在BCNF的基础上消除非平凡的多值依赖就可以达到4NF

三、思考题

1、全码的关系模式中存在非平凡的函数依赖吗

不存在。
证明:假设在R(U)的关系模式中,如果存在非平凡的函数依赖,假设为X->Y,Z=U-Y,那么XZ->Y(U-Y)=U,也就是说U-Y->U,U-Y函数决定了所有的属性,那么U-Y就是码,与其是全码矛盾,所以是不存在的。

2、在传递依赖的时候为什么要求Y不能决定X,Z不能是Y的子集

  • Y如果决定X,那么X<->Y,也就是两者是等价的,那么也就不存在什么传递的意思,直接就函数依赖了,那么也就与定义该概念相违背了
  • Z如果是Y的子集,那么X->Z是显然的,也就没有考虑的意义了
3、一个只有一个候选码的3NF关系模式是BCNF吗?

是。
证明:假设只有一个候选码的3NF不是BCNF,那么其中一定存在函数依赖X->Y,由于是3NF,所以其满足(1)(2)(3)中至少一个条件:
(1)X->Y是平凡的函数依赖
(2)X是码
(3)Y是主属性
以上的三个条件其实就是破坏有非主属性对码 的传递依赖的条件,(1)破坏的是Z不能是Y的子集,(2)破坏的是Y破坏的是Y不能决定X,(3)破坏的是非主属性这一个条件。
由于我们假设是BCNF,所以应该满足的条件是Y是主属性,那么唯一的码一定有Y属性集合。
记Z=U-Y,那么XZ->Y(U-Y),也就是说U-Y->U,而U-Y不含Y,所以其不是原来的码,所以U-Y是该关系模式的一个新的码,与关系模式只有一个码矛盾,所以其一定是BCNF的,证毕。

4、PJNF是4NF
证明:
在该关系模式中,对于任意的函数依赖X->->Y(XY不等于U,否则就是平凡的函数依赖),其等待的连接依赖为*(X(U-Y),XY),由于是PJNF,所以满足(1)(2)中的任意一个条件:
(1)X(U-Y)=U或者XY=U,那么多值依赖都是平凡的多值依赖,那么一定是4NF的(多值依赖有对称性)
(2)X(U-Y)和XY都含有码
现在考虑如果满足条件(2)的时候的情况:假设X(U-Y)中含有码,假设码为K,那么K与Y的交集为空集,并且K->Y,那么根据联联合律有X->Y,
同样由XY中有码可以证明X->U-Y,所以X->U,所以X是码,所以是4NF。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值