sql 范式:1NF、2NF、3NF、BCNF(函数依赖)
第一范式(1NF)
每个属性都是不可分的基本数据项.(必须有主键,列不可分)
eg:非第一范式的表:(列可再分)
学院名称 | 高级职称人数 | |
教授 | 副教授 | |
信电学院 | 3 | 34 |
管理学院 | 5 | 23 |
外语学院 | 3 | 12 |
满足第一范式的表
学院名称 | 教授 | 副教授 |
信电学院 | 3 | 34 |
管理学院 | 5 | 23 |
外语学院 | 3 | 12 |
第二范式(2NF)
1NF基础上消除部分函数依赖, 消除数据冗余和增、删、改异常。
每个非主属性都完全函数依赖于主键
2NF关系举例:
不满足2NF的关系:
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
满足2NF的关系:
(完全函数依赖:在关系模式R(u)中,X,Y是U的子集,Y函数依赖于X 并且 Y非函数依赖于X的子集,则称Y完全函数依赖于X。X f >Y)
(部分函数依赖:在关系模式R(u)中,X,Y是U的子集,Y函数依赖于X 并且 Y函数依赖于X的子集)
(函数依赖:某个属性集决定另一个属性集时,例如学生学号属性集Sno决定学生姓名属性集Sname,称Sname函数依赖于Sname )
(平凡函数依赖:Y函数依赖于X,并且Y包含于X,例如(Sno)->(Sno)、(Sno、Sname)->(Sno))
(非平凡函数依赖:Y函数依赖于X,并且Y不包含于X,例如(Sno,Sname)->(Ssex))
第三范式(3NF)
2NF基础上消除传递函数依赖,属性集直接依赖于主键。
非第三范式表(Sno->BounsLevel,BounsLevel->BounsMoney)
Sno | Sname | Sage | BounsLevel | BounsMoney |
1 | Carrie | 21 | A | 2000 |
2 | Cherry | 20 | B | 1500 |
第三范式表:(消除传递函数依赖)
Sno | Sname | Sage | Bno |
1 | Carrie | 21 | 1 |
2 | Cherry | 20 | 2 |
Bno | BounsLevel | BounsMoney |
1 | A | 2000 |
2 | B | 1500 |
(传递函数依赖:Y函数依赖于X,Z函数依赖于Y,且X不包含Y,X非函数依赖于Y,则称Z传递函数依赖于X。X t >Z)
鲍依斯-科得(巴斯)范式(BCNF)
3NF基础上消除主属性依赖,即不存在关键字段决定关键字段的情况。
(非主属性 :不包含在主码中的属性称为非主属性。)
反例:(SID->GID,GID->SID存在关键字决定关键字的情况)
SID(仓库ID) |
GoodsID(商品ID) |
MID(管理员ID) |
GoodsNum(商品数量) |
001 |
20170510 |
1 |
200 |
符合BCNF
StoreHouseID(仓库ID) |
GoodsID(商品ID) |
GoodsNum(商品数量) |
001 |
20130104 |
200 |
StoreHouseID(仓库ID) |
ManagerID(管理员ID) |
001 |
1 |
最新文章
- HTML插入地图的方法
- Nginx详解(一)
- 快速升级php5.6
- spring-data-elasticsearch整合elasticsearch
- Nginx学习笔记(七) 创建子进程
- note.js之 Mongodb在Nodejs上的配置及session会话机制的实现
- visual studio粘贴html代码.会自行添加一些未知代码(自动格式化)
- 无法启动 IIS Express Web 服务器
- HDU1024 DP的优化 最大M子段和问题
- atom编辑器启动后文件不能编辑的解决办法
- 简单hdfs相关操作命令
- 《Linux内核分析》第四周学习总结
- db2 MON_GET_PKG_CACHE_STMT 表函数 抓取分析SQL
- docker tool
- 使用FBTweak
- array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。
- CodingLife的CSS样式整理
- Base class does not contain a constructor that takes '0' argument
- POJ 3613 Cow Relays (floyd + 矩阵高速幂)
- jQuery.ajax向后台传递数组问题
热门文章
- react学习笔记2之正确使用状态
- U-BOOT2016.05 配置内存大小
- C#函数的默认参数——填坑记
- matlab将矩阵数据归一化到[0,255]
- 消息中间件系列五:RabbitMQ的使用场景(异步处理、应用解耦)
- ios原生项目内嵌u3d工程
- datatable to List<;T>;带缓存
- Spring data Jpa,Mybatis,读写锁,@Lock 使用
- jquery实现同时展示多个tab标签+左右箭头实现来回滚动
- 离线提取域控HASH的方法