一、第一范式 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。

SQL 第一范式、第二范式、第三范式、BCNF范式的更多相关文章

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

    作者 : Dolphin 原文地址: http://blog.csdn.net/qingdujun/article/details/27365979 一.第一范式 1NF 要求:每一个分量必须是不可分 ...

  2. SQL基础随记3 范式 键

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

  3. bcnf范式

    3.5范式--bcnf范式到底是什么呢? 对于bcnf范式,通过查阅资料,我的理解是--主键依赖的去除.比如说:一个仓库管理的表格,有以下属性(管理员编号,仓库号,货物编号,货物数量)其中每个管理员管 ...

  4. 重温sql 设计的基本三大范式

    第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名.编号.地址.……)其中"地址"列还可 ...

  5. BCNF范式及其分解方法(对一次Lab作业的总结)

    BCNF是比第三范式更严格一个范式.它要求关系模型中所有的属性(包括主属性和非主属性)都不传递依赖于任何候选关键字.也就是说,当关系型表中功能上互相依赖的那些列的每一列都是一个候选关键字时候,该满足B ...

  6. oracle系列--基础理论

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

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

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

  8. about oracle

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

  9. Oracle 11g

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

随机推荐

  1. 佛祖保佑永无BUG代码注释

    // // _oo0oo_ // o8888888o // 88" . "88 // (| -_- |) // 0\ = /0 // ___/`---'\___ // .' \\| ...

  2. [hdu P3085] Nightmare Ⅱ

    [hdu P3085] Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...

  3. 最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“2003- Can't connect MySQL Server on 'localhost'(10038)“。

    优先考虑mysql数据库是否开启 1.先看报错窗口.   通过百度,最终找到的原因是:远程3306端口未对外开放. 于是下面进行远程3306端口开放操作.   首先远程连接服务器,点击“开始”-“管理 ...

  4. 牛客练习赛23CD

    链接:https://www.nowcoder.com/acm/contest/156/C 来源:牛客网 题目描述 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 ...

  5. excel表格中,怎么根据一列重复的数据求对应另一列总和

    如下: 求出姓名对应分数总和对应 : 首先复制一份Sheet2 对Sheet1进行操作选中A列姓名 数据->删除重复项->以前选中区域排序->删除重复项 然后删除对应成绩项选中张三对 ...

  6. LINQ分组取出第一条数据

    Person1: Id=, Name="Test1" Person2: Id=, Name="Test1" Person3: Id=, Name="T ...

  7. ECharts访问后台,JSON格式返回数据实例

    完成图 一.页面代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  8. 获取进程ID,父进程ID,进程完整路径

    准备写一个进程管理的功能模块,今天下午先写了扫描获取本机各个进程路径,获取各个进程映像名称,进程完整路径. 要获取进程信息,第一步想到的就是提权,提权代码用过多次了,今天也小结了一下(http://w ...

  9. eclipse导入git项目出现There are no resources that can be added or removed from the server错误

    上传到git上的项目因为配置了过滤文件,将.settings文件和.project文件都过滤掉了,settings文件中主要存放的是各种插件配置,约束你可以更好的利用IDE进行编码 因为将这两个文件过 ...

  10. java中一些对象(po,vo,dao,pojo)等的解释

     一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对 ...