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 |
sql 范式:1NF、2NF、3NF、BCNF(函数依赖)的更多相关文章
- 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解
[转] 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解 本文对大多数初学数据库原理的同学绝对是个大福利,哈哈,完完整整的看完此篇博文一定能够清晰地理解数据库的四大范式. ...
- [MySQL] 关系型数据库的设计范式 1NF 2NF 3NF BCNF
一.缘由: 要做好DBA,就要更好地理解数据库设计范式.数据库范式总结概览: 为了更好地理解数据库的设计范式,这里借用一下知乎刘慰老师的解释,很通俗易懂.非常感谢! 二.具体说明: 首先要明白”范 ...
- 数据库范式1NF 2NF 3NF详细阐述
范式:关系数据库中的关系是要满足一定要求的,满足不同程度要求的不同范式.满足最低要求的叫第一范式,简称1NF ,在第一范式中满足进一步要求的为第二范式,其余以此类推.通俗来说是满足数据库关系表中的一套 ...
- 【转】数据库范式(1NF 2NF 3NF BCNF)详解一
以下内容转自:http://jacki6.iteye.com/blog/774866 --------------------------------------------分割线---------- ...
- 数据库范式(1NF 2NF 3NF BCNF)详解一
数据结构设计模式编程制造 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常 ...
- 数据库范式(1NF 2NF 3NF BCNF)
http://blog.csdn.net/xuxurui007/article/details/7738330 http://www.cnblogs.com/laodao1/archive/2009/ ...
- 数据库范式(1NF 2NF 3NF BCNF)详解
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给 ...
- 转:数据库范式(1NF 2NF 3NF BCNF)
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给 ...
- 【转】数据库范式(1NF 2NF 3NF BCNF)
范式判断流程图 1. 四种范式之间关系 2.第二范式.第三范式.BCNF区别: 2NF:非主键列和主键列之间,是完全依赖于主键,还是依赖于主键的一部分(只依赖某个主键): 3NF:非主键列之间,不存在 ...
- 【转】数据库范式(1NF 2NF 3NF BCNF)详解二
以下内容转自:http://jacki6.iteye.com/blog/774889 -------------------------分割线----------------------------- ...
随机推荐
- 搭建web之 服务器鉴权失败,请确认服务器已启用密码鉴权并且账号密码正确?
实例化时,登录过程中出现 服务器鉴权失败! 这是由于密码错误所致! 第一种情况:原始随机密码 第一种情况,你没有修改密码,则可以直接查找原始密码: 过程详见官网 使用密码登录的前提条件 密码: 若用户 ...
- Effective Java 第三版——72. 赞成使用标准异常
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- 原创科幻短篇《VR》
近些年VR很火,现在似乎又降温了,那么问题来了:VR到底有前景吗?我农村来的读书又少看不清楚哇.近些年房地产很火,现在似乎还是很火,那么问题来了:房价到底会降吗?我农村来的读书又少看不清楚哇. 以下正 ...
- python和C++联合调试
python可以利用SO的方式去调用C++中的函数,但是需要一种调试方案来进行python和C++的联合调试,效果是直接在c++代码中打断点,然后python在进行c++so调用的时候,直接进入到断点 ...
- 在Visual Studio 2013中安装Mysql for EntityFramework
1. 安装Visual Studio 20132. 下载mysql,安装mysql.3. 下载 mysql-for-visualstudio-1.2.7.msi, 下载链接:https://cdn.m ...
- Clash Royale开发日志
2018-04-17 本次更新: [修复点击时间bug] [修复断线重连后不自动开始脚本bug] 2018-04-16 本次更新增加以下功能: [支持断线重连机制(5分钟)] [界面UI设置] 201 ...
- Content of "Essential Software Test Design"
Content of "Essential Software Test Design" 2015-11-16 PART I 7 TEST DESIGN TECHNIQUES: AN ...
- idea当配置eclipse快捷键时,全局替换的快捷键是什么?
简介 每次为了新版本新建一个分支的时候,都要改每个maven的版本号,好麻烦,有么有?如下图: 当idea配置eclipse快捷键时,默认是没有全局替换快捷键的,需要设置 步骤 首先打开setti ...
- Maven项目:Malformed POM expected START_TAG or END_TAG ........
今天在执行maven命令 mvn assembly:assembly -Dmaven.test.skip=true的时候报了个错,大概是Malformed POM expected START_TAG ...
- OpenGL 获取当前屏幕坐标的三维坐标(gluUnProject使用例子 Qt)
之前使用VS+glut实现了gluUnProject使用例子,用于渲染管道的逆过程,将屏幕坐标转换为opengl三维坐标,本文将尝试使用QT来实现. 代码如下: main.cpp 12345678 ...