SQL 第一范式、第二范式、第三范式、BCNF
作者 : Dolphin
原文地址: http://blog.csdn.net/qingdujun/article/details/27365979
一、第一范式 1NF
要求:每一个分量必须是不可分的数据项。
特点:
1)有主键,且主键不能为空。
2)字段不能再分。
示例:(以下例子 不满足 第一范式)
/*学号 年龄 信息*/
Sno Sage Sinfo
1001 19 陕西省西安市,电话:10086
1001 20 陕西,宝鸡
主键:Sno
不满足原因:1)主键重复。2)Sinfo字段可以再分。
二、第二范式 2NF
要求:在范式一的基础上,且每一个非主属性完全函数依赖于码。
特点:
1)满足第一范式。
2)表中的每一个非主属性,必须完全依赖于本表码。
3)只有当一个表中,主码由两个或以上的属性组成的时候,才会出现不符合第二范式的情况。
示例:(以下例子 不符合 第二范式)
/*学号 课程号 得分 课程名*/
Sno Cno Score Sname
1001 001 99 数据库
主键: Sno,Cno
不满足原因:Sname不完全依赖于码,课程名部分依赖于码Cno。
三、第三范式 3NF
要求:在满足第二范式的基础上,且每一个非主属性既不部分依赖于码也不传递依赖于码。
特点:
1)满足第二范式。
2)非主属性不能传递依赖于码。
示例:(以下例子 不符合 第三范式)
/*学号 系别 系主任*/
Sno Sdept Shead
1001 计算机系 张三
主键:Sno
不满足原因:Shead传递依赖于码,Sno->Sdept->Shead,可得Sno->Shead。
四、BCNF
要求:在满足第三范式的基础上,且不允许主键的一部分被另一部分或其它部分决定。
特定:
1)满足第三范式。
2)所有非主属性对每一个码都是完全函数依赖。
3)所有的主属性对每一个不包含它的码,也是完全函数依赖。
4)没有任何属性完全函数依赖于飞码的任何一组属性。
示例:(以下例子 不符合 第BCNF范式)
/*学生 老师 课程*/
Stu Teacher Course
张三 李开复 数据库
假设:每个老师只教一门课。
候选码:
(Stu,Teacher)->Course
(Stu,Course)->Teacher
这两个码由两个属性组成,而且它们是相互交叉的,所以不存在传递依赖,所以为3NF。
但是由于:Teacher->Course,(主键的一部分被另一部分决定),所以不符合BCNF。
参考文献:王珊,萨师煊.数据库系统概论(第4版) [M].北京:高等教育出版社,2006.170-178.
GISerYang博客园.第一范式,第二范式,第三范式[CP/OL].http://www.cnblogs.com/GISerYang/archive/2012/05/09/2491996.html ,2012-05-09/2014-05-28.
Ruthless博客园.数据库设计三大范式[CP/OL].http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html ,2012-04-01/2014-05-28.
AllenLSY 孤而无寂的CSDN博客.第一范式,第二范式,第三范式,BCNF[CP/OL].http://blog.csdn.net/allenlsy/article/details/5356899 ,2010-03-08/2014-05-28
SQL 第一范式、第二范式、第三范式、BCNF的更多相关文章
- SQL 第一范式、第二范式、第三范式、BCNF范式
一.第一范式 1NF 要求:每一个分量必须是不可分的数据项. 特点: 1)有主键,且主键不能为空. 2)字段不能再分. 示例:(以下例子 不满足 第一范式) /*学号 年龄 信 ...
- oracle系列--基础理论
一.数据库系统架构: 外层(External Level)外层是提供给用户直接操作使用的 概念层(Conceptual Level)用来描述数据库中存放数据的类型.表之间的关系.高级的数据模型.用户的 ...
- .NET软件工程师面试总结
1.手写画出系统架构图,系统代码架构,有什么技术难点? 2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...
- about oracle
Oracle 劳伦斯.埃里森 Larry Ellison history: 人工管理阶段 文件管理阶段 数据库系统阶段 model:[模型是所研究的系统.过程.事物或概念的一种表达形式] 层次结构m ...
- Oracle 11g
Oracle 11g 第一章 Oracle 11g数据库简介 1.1 认识Oracle11g Oracle 11g是Oracle 数据库最新的版本,目前已经被企业广泛的应用. 1.2 Oracl ...
- 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)
1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...
- Mysql性能优化全揭秘-庖丁解牛
「为什么写」 一直想写数据库相关的文章,最直接的原因是数据库这块我们工作中每天都会用到,也是面试求职绕不开的话题,无论你是何种测试,优秀的数据库能力都会非常加分,最近我在总结数据库性能优化这块内容,性 ...
- 数据库建模、面向对象建模>从零开始学java系列
目录 数据库建模 前置知识 使用PowerDesigner数据库建模设计 一对多CDM概念数据模型设计 多对多的PDM物理数据模型设计(针对mysql) PowerDesigner将不同的模型进行转换 ...
- SQL基础随记3 范式 键
SQL基础随记3 范式 键 什么是范式?哈,自己设计会使用但是一问还真说不上来.遂将不太明晰的概念整体下 什么是 & 分类 范式(NF),一种规范,设计数据库模型时对关系内部各个属性之间的 ...
随机推荐
- AJAX编程-封装ajax工具函数
即 Asynchronous [e'sɪŋkrənəs] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用.本质是在HTTP协议的基础上以异步的方式与服务器 ...
- ABAP--如何在ALV_Grid的函数中定义下拉列表
最近经常听到网友和用户需求希望你在ALV Grid的函数中加入下来列表,其实SAP已经考虑了大家的需求,用户的需求是可以实现的.我特地将代码奉献给大家,供大家参考和学习. 代码如下: REPORT.* ...
- 树莓派上安装2.8寸TFT触摸屏
在某宝的这里买了一个2.8寸的TFT触摸屏,其实就是中国版的ADAFRUIT 结合店家的帮助文档做了一下,一次点亮,这里也记录一下自己的安装过程(话说会硬件是会比会软件有不同的乐趣~~~) 由于店家推 ...
- JSP page指令详解
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言. 语法格式如下: <%@ directive attribute="value" %> 指令可以 ...
- 我有一个 APP 创意,如何将其实现?
原文链接http://www.techweb.com.cn/business/2015-05-19/2154266_1.shtml 很多人总觉得找到程序猿..哦,是工程师,就可以了.可是你看,大部分 ...
- Android Studio安装使用图文教程(转)
[开发环境] 物理机版本:Win 7旗舰版(64位) Java SDK版本:jdk1.8.0_20(64位) Android SDK版本:Android 4.4(API 20) Android Stu ...
- 协议(Protocol)---实例
协议:声明一些必须实现的方法和选择实现的方法,用来声明一些方法,即一个Protocol是由一系列的方法声明组成的. 建立协议文件步骤:将鼠标放到文件列表处,利用快捷键 command +N 健,得到如 ...
- iOS中 @synthesize 和 @dynamic 区别
OC object-c 为了让java的开发者习惯 使用.的操作,所以可以将接口类中的变量 使用@property来声明属性.但是在.h中声明的属性,必须在.m中使用@synthesize或者@dyn ...
- CoreAnimation-03-隐式动画
简介 每个UI控件,默认自动创建一个图层(根图层),即每个UI控件对应于至少一个图层 可以手动创建图层,这些图层为非根图层 对非根图层的某些属性(标记为Animatable的属性)进行修改,默认会自动 ...
- 烂泥:KVM安装centos6.5系统
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在前一篇文章中,我介绍了有关KVM的安装与配置.接下来,就来介绍如何在KVM中安装Centos系统. 注意该centos镜像文件,使用的是:CentOS ...