RDB的规范化理论(函数依赖+范式)

 

一、概念分析

 

1、函数依赖:这个概念术语语义范畴,只能根据语义确定属性间是否存在这种依赖,此外别无原则。就是说,从字面上读起来觉得“A能唯一确定B”这句话是通顺的、不违反你的常规逻辑的,那么B就函数依赖于A,我记作AB.

    a、区别完全函数依赖和部分函数依赖

    存在一个关系RU)(U是一个关系的所有属性),如有XY属于U且满足XY,且对于任何X的真子集X1 都有Y不函数依赖于X1,则称Y完全函数依赖于X,我暂时记作

X  (f)  Y。

如果A  (f)  B,那么(A ,C) (p)  B  (部分函数依赖)。

 

    

     b、区分直接函数依赖和传递函数依赖

R(U)  中,如果XY,(Y不属于X)X不函数依赖与YZ函数依赖于Y,则称ZX传递函数依赖

 

2、范式:

 

范式和规范化方法,规范化目的是介绍冗余和异常:

 

 

 

第一范式(1NF):R中每个属性都是不可分的原子值

第二范式(2NF):R(U)中每个非主属性完全函数依赖与关键字。

第三范式(3NF):R(U)中每个非主属性都不部分依赖也不传递依赖于关键字,则称R满足第三范式。

BCNF(扩充的第三范式):如R(U)XY属于U,假定满足R属于1NF,且若Y非平凡函数依赖于XX必含关键字,则称R满足BCNF

 

 

 

二、实例说明:

 

这些概念比较抽象,所以我设计了“博客系统”的几个表来应用上面的理论:

 

用户信息表userinfo:

 


 

 

 

 



 

 


 

 

显然,这三个表都满足1NF

 

接着,因为三个表的primary不是复合主键,所以不存在部分函数依赖的关系。所以,满足2NF。如果user的主键是id+name,因为idpwd,那么将不满足完全函数依赖的关系。

 

接着,在reviews表中,IdButtetin_board_nameIns_id,并且Buttetin_board_nameid不成立,所以Ins_id间接函数依赖于id,所以不满足3NF

 

最后,显然不满足BCNF:如userinfo表中的namepwd,name中不含关键字。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值