//数据库老师老不在,看书很辛苦。 遇到范例更加费解,真的是自己读自学。 好诗好诗
范式转换数据库范式是规范的。 像同心圆一样,最外层的要求最低,最内层的要求最高。
规范要求由低到高,分别为1NF 2NF 3NF BCNF 4NF 5NF
数据库在日常使用中达到3NF的要求已经很苛刻,即使根据BCNF分割新表也不会超过1次。 但是,谁叫我们制造问题呢~
范式对应要求水平高的范式包括比其低的范式的要求
1NF 1NF :关系中的所有属性都是不可分离的
这是表结构的基本要求,所有可以写在数据库中的表都满足2NF 2NF。 消除非主属性对关键候选项的部分函数依赖。 (代码-P非主) ) )。
p应当说明箭头上的y函数依赖于x,但同时y并不完全依赖于x,y部分函数依赖于x。 例:(学号、课程名称)-P姓名代码也称为候补键。 候选键是指,将能够唯一识别元组的一个或多个属性的集合的所有候选键的并集、从主属性r中除去主属性而得到的属性称为非主属性3NF 3NF :消除非主属性对候选键的传递函数依赖(代码-T非主) ) )。
据说z函数依赖于y,y函数依赖于x,z传递函数依赖于x。 例(A-D D-C BCNF BCNF )消除对候补密钥的主属性的部分、传递函数依存(代码-PT主)
BCNF解题思路BCNF解题步骤1,求r中所有FD左侧的闭包,取一个闭包{X},如果可以包含r中所有元素,则该FD满足BCNF2,如果不能包含r中所有元素,则r为两个关系RRR
{X}定义是指从x直接或间接导出的所有要素的集合。 这正好是一些函数依赖和传递依赖的性质。 所以闭包是他们俩的具体应用!
在BCNF例题中,已知r(a、b、c、d、e )包括FD:AB-C C-D D-B D-E,求BCNF分解的新集合。
首先,写出与r中所有FD的左侧对应的闭包
{A,B}={A,b,c,d,E}
{C}={B、c、d、E}
.
实际上即使不列举,如果发现不满足第2个,就根据第2个进行分解,根据{C}分解r
R1={B,c,d,E} R2={A,C}
R2已经只有两种元素,一定满足BCNF规范,不需要考虑,接下来继续考虑R1是否满足BCNF,表示R1中所有FD左侧的闭包
{D}={B,d,E}
.
出现不满意的闭包时,继续分解R1,按照{D}分解R1
R3={B,d,E} R4={C,D}
R4不需要再划分,然后考虑R3是否满足BCNF,写出与R3中所有FD左侧相对应的闭包
{D}={B,d,E}
在R3中,所有闭包都满足条件,递归分解结束后,我完成了BCNF的主题,所以这里暂时就只有这些了。 接下来会陆续更新。
这次的博客参考了很多资料,最后感觉很简单。
喜欢的话请关注。