一、第一范式 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. JavaScript常见案例

    一.点灯开关控制: <!DOCTYPE html><html lang="en"><head> <meta charset="U ...

  2. QLineSeries QChartView 生成折线

    效果图 // 创建折线上点的序列 QLineSeries *splineSeries = new QLineSeries(); //QSplineSeries *splineSeries = new ...

  3. 【Jenkins】testng+testNgXslt+ant优化测试报告

    步骤: 准备: testng-results.xsl saxon-8.7.jar 下载地址:http://download.csdn.net/download/a804229570/10210509 ...

  4. <airsim文档学习> Street View Image, Pose, and 3D Cities Dataset

    原文地址:  https://github.com/amir32002/3D_Street_View 说明:个人学习笔记,翻译整理自github/airsim. 简介 该存储库共享包含6DOF相机姿态 ...

  5. ES6新特性,对象的快速创建

    //es6对象快速赋值 //es5对象赋值 var name="xiaoming"; var age=18 var person={ name:name, age:age } co ...

  6. Problem F: 平面上的点——Point类 (VI)

    Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定.现在我们封装一个“Point类”来实现平面上的点的操作. 根据“append.cc”,完成Point类的构造方 ...

  7. Java notepad++ 配置

    1.下载安装插件 NppExec https://nchc.dl.sourceforge.net/project/npp-plugins/NppExec/NppExec%20Plugin%20v0.6 ...

  8. Java学习笔记35(sql补充)

    在上一篇里,写了数据库的增删该查,没有写完,这里补充 CREATE DATABASE Zs_Base; USE Zs_Base; # 创建表 CREATE TABLE PRODUCT( ID INT ...

  9. Oracle创建表空间报错:O/S-Error: (OS 3) 系统找不到指定的路径

    创建sql:         CREATE TABLESPACE TBSP_1 DATAFILE 'E:/oracle/product/10.2.0/tablespaces/weblogic.dbf' ...

  10. Windows10 VS2017 C++ ini解析(使用simpleini头文件)

    simpleini项目地址: https://github.com/brofield/simpleini 下载,新建项目,并将SimpleIni.h文件通过包含目录的方式加载进来. 创建test.in ...