【数据库范式详解】1NF-BCNF
来源:互联网 发布:育知同创学费 编辑:程序博客网 时间:2024/06/06 02:17
关系型数据库,由于数据分别存储在不同的表中,因此设计不当就会造成严重的数据冗余。
而如果表的粒度设计得太小,又会放大关系型数据库读写很慢的缺点,表的连接操作会带来很大的开销。
因此在设计库表时,有1NF、2NF、3NF、BCNF、4NF、5NF这些范式,从前到后要求依次提高。
本文将介绍前4种范式及使用他们的原因,在实际设计时,一般要求满足3NF即可。
我的另外两篇文章:
《学生选课系统库表设计》
《网上商城开发阶段文档》
从ER图到表的创建,就是符合3NF范式的,大家在了解几个范式的原理后,可以参考。
1NF:(关系型数据库必须满足的范式)
定义:
表的设计中,每一列都应是原子的、不可再分。这里的不可再分也是相对的,例如地址这个属性,可以细粒度地把它当成复合属性来看,分为xx国xx省,也可以粗粒度的用一列来表示。
存在的问题:
假设一门课由一个老师教,一个学生可以选多门课。有选课表(学生id,学生姓名,学生性别,教师id,教师姓名,教师性别,课程id,课程名),显然该表满足1NF,但存在三种异常。
数据冗余:一门课程,n个学生选,则老师和课程的信息就重复存储了n次。
插入异常:假设想添加一条数据,以表示某学生入学。则有效的信息只有学生id,学生姓名,学生性别。其他位置必须用NULL值表示,否则无法进行insert操作。
删除异常:假设一批学生毕业了,要求清空他们的选课记录,则此时,如果不将学生的信息用NULL值表示,则所有的教师信息和课程信息也将会被清空。
更新异常:假设某个老师要更改自己教的课程名,则选了这门课的所有学生,课程名一列都需要更改。
因为1NF的不足,提出了2NF。
2NF:
定义:
表的设计中,不存在非superkey字段对任一candidate key字段的部分函数依赖(部分函数依赖指的是存在复合key中的某些字段决定非key字段的情况),也即所有非superkey字段都完全依赖于任意一组candidate key。
不满足2NF的例子:
假设某选课系统中存在如下函数依赖,其完全闭包F+={
(学号,课程名称) → (成绩,学分,姓名,年龄),①
(课程名称) → (学分),②
(学号) → (姓名, 年龄) ③}
这个Fc的key是(学号,课程名称)。由于②和③都存在非关键字段对候选键的部分函数依赖(学分依赖候选键的一部分),所以它是不满足2NF的。
修改:
满足2NF也会有数据冗余、插入/删除/更新异常的问题,因此提出了3NF。
3NF:
定义:
已知F+,则每张表涉及到的属性组成一个集合E,考虑它在F+上的函数依赖集,
若对任意的函数依赖 α-->β,满足如下三个条件之一,则称为该表的设计满足3NF。
①α-->β是一个平凡依赖(β∈α)
②α是key
③β-α的每一个属性A,都∈某一个该表的候选键,该条件等价于α不传递依赖于superkey
证明③的两个条件等价:
α不是superkey的情况下才会用到第三个条件来判断。则α必定是被某个superkey决定的属性,即有:γ->α .而α->β,若β不属于候选键的一部分,那么就会出现γ->β的情况,这是不符合3NF的。但如果β是候选键的一部分,那么γ->β就是一个平凡依赖了。
- 数据库范式1NF,2NF,3NF,BCNF详解
- 数据库范式详解-- 1-5NF.BCNF
- 【数据库范式详解】1NF-BCNF
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式 1NF 2NF 3NF BCNF 详解示例
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解二
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- (转)数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解一
- 数据库范式(1NF 2NF 3NF BCNF)详解
- git创建仓库步骤
- windown server 环境中使用rman备份到网络共享文件夹.
- spring-batch预研篇
- 回顾大一·C语言编程4.3(2)
- 原来Hadoop也是无心下的产物
- 【数据库范式详解】1NF-BCNF
- 程序在点击返回按钮是弹出AlertDialog
- ubantu16.04安装 nginx
- 九月 29, 2017 10:38:30 上午 org.apache.catalina.loader.WebappClassLoader loadClass 信息: Illegal access: t
- Angular最新教程-第十一节 路由四 (嵌套路由)
- ActiveMq+Zookeeper的高可用集群环境搭建
- iOS 二维码的扫描使用,以及图片预览,类似于相册
- cocos2dx Lua 定时器
- 项目报错“JavaServer Faces 2.2 can not be installed : One or more constraints”等一系列问题