范式(详解)

   💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。



非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
 

第一范式1NF

关系中的每一个分量必须是一个不可分的数据项 通俗地说,第一范式就是表中不允许有小表的存在。比如,对于如下的员工表,就不属于第一范式:

实例:用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任姓名,课程号,成绩)

依赖关系(学生->学号,学生->学生姓名,学生->系号,系号->系主任姓名学生->课程号,(学生,课程号)>成绩)

1NF不能排除数据几余和更新异常等问题,因为其中可能存在部分函数依赖

数据冗余 : 假设张三想多选几门课程, 需要写入学号 姓名 学院 等等 信息 

更新异常:(1)修改异常 (2)插入异常 (3)删除异常

(1)修改异常  假设要修改张三的名字 改为 李四    001 对应 张三  002 对应李四 出现异常

(2)插入异常 假设要插入艺术学院 需要增加很多信息

(3)删除异常 假设要删除高等数学 整行都会被删除 

第二范式2NF


如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。
通俗地说,2NF就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个列
按照定义,上面的学生表就不满足2NF,因为学号不能完全确定课程号和成绩(每个学生可以选多门课)。
将学生表分解为:
学生(学号,学生姓名,系编号,系名,系主任)
选课(学号,课程号,成绩)
每张表均属于2NF。

关系分解 =》 消除部分函数依赖

第三范式3NF


在满足1NF的基础上,表中不存在非主属性对码的传递依赖
继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任和系名,是由学号->系编号,再由系编号->系主任,系编号->系名,因此存在非主属性对主属性的传递依赖,
将学生表进一步分解为:
学生(学号,学生姓名,系编号)
系(系编号,系名,系主任)
选课(学号,课程号, 成绩)
每张表都属于3NF。

第三范式存在的问题

主属性存在对候选码的部分依赖 

例如:书店依赖店长  店长依赖书店

此时则引入BC范式

BC范式

设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。


即为:对于关系模式R,若 R为第一范式,且每个属性都不部分依赖于候选键也不传递依赖于候选键,那么称R是BC范式。


相对于第三范式,BC范式的要求更加严格。第三范式只是要求R为第二范式且非键属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。

由关系模式的定义可以得到如下结论,若R属于BCNF,则R有:
1.所有非主属性对每一个码都是完全函数依赖。满足2NF和3NF
2.所有的主属性对每一个不包含它的码,也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。
由于R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。但是若R∈3NF,则R未必属于BCNF。

BC范式能够消除插入异常和删除异常。

  1. 所有的主属性对每一个不包含它的码,也是完全函数依赖。

    这条原则意味着,在一个BCNF的关系中,每一个决定因素(即码)都必须是候选键,或者至少包含候选键的所有属性。对于任何非候选键的属性集,它们不能决定候选键中的任何一个主属性(即候选键的组成部分),除非这个属性集本身就是一个候选键。换句话说,不存在任何部分依赖(partial dependency)或传递依赖(transitive dependency)到候选键的主属性上。

    举例
    假设有一个关系R(A, B, C, D),其中(A, B)是一个候选键。如果C完全依赖于(A, B)(即C是(A, B)的函数),这是正常的。但如果C还依赖于A(或B,或A和B的任何非完全组合),则违反了BCNF。在这个例子中,没有直接违反,因为(A, B)是完整的候选键。但如果(A)是另一个候选键,且C仅依赖于A,而B与C无关,则(A, B)→C就违反了BCNF,因为B不是必需的。

  2. 没有任何属性完全函数依赖于非码的任何一组属性。

    这条原则进一步限制了非候选键属性对任何非候选键属性集的依赖。它要求,如果一个属性完全依赖于某个属性集,那么这个属性集必须是候选键。换句话说,非候选键属性之间不能有函数依赖关系,除非这些关系是通过候选键建立的。

    举例
    继续使用上面的例子R(A, B, C, D),假设(A, B)是唯一的候选键。如果D依赖于C(即C→D),但C本身不是候选键的一部分,且C也不完全依赖于(A, B)(即C不是由(A, B)完全决定的),那么这就违反了BCNF。因为D现在依赖于一个非候选键属性C,而没有直接依赖于候选键(A, B)。

❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值