作者 : 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的更多相关文章

  1. SQL 第一范式、第二范式、第三范式、BCNF范式

    一.第一范式 1NF 要求:每一个分量必须是不可分的数据项. 特点: 1)有主键,且主键不能为空. 2)字段不能再分. 示例:(以下例子 不满足 第一范式) /*学号      年龄        信 ...

  2. oracle系列--基础理论

    一.数据库系统架构: 外层(External Level)外层是提供给用户直接操作使用的 概念层(Conceptual Level)用来描述数据库中存放数据的类型.表之间的关系.高级的数据模型.用户的 ...

  3. .NET软件工程师面试总结

    1.手写画出系统架构图,系统代码架构,有什么技术难点?  2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...

  4. about oracle

    Oracle  劳伦斯.埃里森 Larry Ellison history: 人工管理阶段 文件管理阶段 数据库系统阶段 model:[模型是所研究的系统.过程.事物或概念的一种表达形式] 层次结构m ...

  5. Oracle 11g

    Oracle 11g 第一章  Oracle 11g数据库简介 1.1  认识Oracle11g Oracle 11g是Oracle 数据库最新的版本,目前已经被企业广泛的应用. 1.2  Oracl ...

  6. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  7. Mysql性能优化全揭秘-庖丁解牛

    「为什么写」 一直想写数据库相关的文章,最直接的原因是数据库这块我们工作中每天都会用到,也是面试求职绕不开的话题,无论你是何种测试,优秀的数据库能力都会非常加分,最近我在总结数据库性能优化这块内容,性 ...

  8. 数据库建模、面向对象建模>从零开始学java系列

    目录 数据库建模 前置知识 使用PowerDesigner数据库建模设计 一对多CDM概念数据模型设计 多对多的PDM物理数据模型设计(针对mysql) PowerDesigner将不同的模型进行转换 ...

  9. SQL基础随记3 范式 键

    SQL基础随记3 范式 键 什么是范式?哈,自己设计会使用但是一问还真说不上来.遂将不太明晰的概念整体下   什么是 & 分类 范式(NF),一种规范,设计数据库模型时对关系内部各个属性之间的 ...

随机推荐

  1. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener

    atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener 1. 自定义web服务器的实现方案,基于原始socket vs   ...

  2. Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结

    Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结 1. 普通代理1 1.1.1. 普通代理2 2. 隧道代理3 3. 反向代理 4 4. 正向代理也可以使用apache实现 ...

  3. 【读书笔记】iOS-引用计数

    Cocoa采用了一种称为引用计数的技术,有时也叫做保留计数.每个对象有一个与之相关联的整数,称作它的引用计数器或保留计数器.当某段代码需要访问一个对象时,该代码将该对象的保留计数器值加1,表示“我要访 ...

  4. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  5. Spring(四)Bean注入方试

    一.构造方法注入 定义:通过构造函数来完成依赖关系的设定 优缺点: 在构造对象的同时,完成依赖关系的建立 如果关联的对象很多,那和不得不在构造方法上加入过多的参数 基中有index:如果指定索引从0开 ...

  6. C语言---文件

    1. 需要了解的概念 包括:数据流.缓冲区.文件类型.文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的.进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流 ...

  7. sql2008备份集中的数据库备份与现有的xxx数据库不同解决方法

    原文链接:http://wncbl.cn/posts/1993c22/ 问题描述 今天在配置一个 ASP 站点时,导入以前的数据库备份文件,提示:sql2008备份集中的数据库备份与现有的xxx数据库 ...

  8. 问题解决——使用GP-3120TN打印条形码标签

    终于大致的尝试出了参数和编程手册里指令的使用. 在这里,感谢佳博中一个叫做"Gprinter 陶玮"的工程师所提供的技术支持.非常感谢,如果没有你,在写这篇文章之前我可能换别的打印 ...

  9. hive的常用命令

    #从hive中直接进入hdfs的daas/bstl/term/userinfo目录下 hive> !hadoop fs -ls /daas/bstl/term/userinfo; 查看hive表 ...

  10. HTML5不支持标签和新增标签

    1.HTML5不支持或不赞成使用的标签 <acronym>——定义只取首字母的缩写,HTML5 不支持.使用<abbr>定义缩写代替,其中title 属性可用于在鼠标指针移动到 ...