范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。

通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。

下面就简单介绍下这三个范式。

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
考虑这样一个表:【联系人】(姓名,性别,电话)
如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。

第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。

因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。

可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。

第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。

其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。

通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。

注意:

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

本文转载自 famousdt

数据库三大范式(通俗理解)相关推荐

  1. 数据库三大范式通俗理解

    官方的解释就不放了,想看的可以去百度! 通俗的理解: 第一范式就是属性不可分割,每个字段都应该是不可再拆分的. 比如一个字段是姓名(NAME),在国内的话通常理解都是姓名是一个不可再拆分的单位,这时候 ...

  2. 数据库逻辑设计之三大范式通俗理解

    一.第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解: 表:字段1. 字段2(字段2.1.字段2.2).字段3 ...... 如学生(学号,姓名,性别,出生年月日),如果认为最后一列还 ...

  3. 数据库三大范式通俗解析

    三大范式 一.三大范式通俗解释: 二.详解 一.三大范式通俗解释: (1)简单归纳: 第一范式(1NF):字段不可分: 第二范式(2NF):有主键,非主键字段依赖主键: 第三范式(3NF):非主键字段 ...

  4. 浅谈数据库三大范式的理解

    首先声明一下,我的这个回答是个人工作总结,不适合考试答题昂. 欢迎关注我的博客. 前言:数据库设计其实不仅仅限制于三个范式,往下其实还有很多种,但对于大多数人来说,你又不搞科研,不造飞机大炮,掌握三大 ...

  5. 数据库三大范式的理解

    一: 引言 作为一个数据库的学习者,搞懂关系数据库的三大范式是很有用的.然而教科书上有关数据库范式的介绍都是采用学术性的定义,语法羞涩,让人难懂,故写下自己对数据库范式的理解,给初学者提供帮助,也备日 ...

  6. 数据库三范式通俗理解 -数据库三范式官方定义

    数据库三范式 官方定义 第一范式(1NF):数据库表中的字段都是单一属性的,不可再分. 第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖 第三范式(3NF):在第二范式的 ...

  7. mysql三大范式 答案_数据库逻辑设计之三大范式通俗理解,一看就懂,书上说的太晦涩...

    一.第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解:表:字段1. 字段2(字段2.1.字段2.2).字段3 ...... 如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可 ...

  8. 数据库三大范式的理解(大白话篇)

    第一范式:列的原子性,即每一列(每一个属性,字段)都不可分割. 举例:销售成本=成本的单价*销售的数量,所以这里就不可以以销售成作为字段. 第二范式:非主属性必须完全依赖于主属性,不能存在只依赖于主属 ...

  9. mysql三大范式 答案_数据库三大范式定义与理解

    数据库三大范式定义与理解 发布时间:2018-06-04 10:24, 浏览次数:291 一.第一范式(1NF) 要求: 要求:每一个分量必须是不可分的数据项. 特点: 1)有主键,且主键不能为空. ...

  10. 数据库设计的三大范式通俗解释

    一.三大范式通俗解释: (1)简单归纳: 第一范式(1NF):字段不可分: 第二范式(2NF):有主键,非主键字段依赖主键: 第三范式(3NF):非主键字段不能相互依赖. (2)解释: 1NF:原子性 ...

最新文章

  1. 德国科学院院士:传统企业寻求变革,向智能制造靠近
  2. 网络安全系列之五十二 组策略中的软件限制策略
  3. 机器学习十大算法(二)
  4. python常用命令汇总-python数据分析之pandas常用命令整理
  5. php接口返回错误码,laravel 错误处理,接口错误返回json代码
  6. linux防火墙停用,关闭LINUX防火墙
  7. 在没有复杂插件的情况下从Eclipse启动和调试Tomcat
  8. c语言指针自定义函数,c语言函数指针定义,指针函数和函数指针的区别
  9. 3.0 go mod之远程仓库搭建-代码示例
  10. Java 数字签名原理及产生
  11. 【TiChoo资讯站】
  12. fckeditor for java_配置FCKeditor(FCKeditor for java)
  13. 宋宝华:为了不忘却的纪念,评Linux 5.13内核
  14. UIImageJPEGRepresentation 使用中存在的问题
  15. java excel 密码_用java实现对EXCEL加打开密码的方法?
  16. CF 678F Lena and Queries
  17. char *c和char c[]区别
  18. 小米手机6如何刷成开发版获取root权限
  19. radosgw bucket index sharding
  20. html中给div或者span加边框css样式

热门文章

  1. 全自动磁环绕线机是如何工作的?
  2. MATLAB算法实战应用案例精讲-【智能优化算法】多目标粒子群优化(MOPSO)(补充篇)(附MATLAB和python代码实现)
  3. Pyautogui--键盘鼠标控制工具
  4. 小白学C语言之返回值(return语句)
  5. cesium绘制动态线,多段线
  6. div垂直居中有几种
  7. java 魔法值_可别在代码种写那么多魔法值了!
  8. python爬取付费隐藏内容_如何用python 爬取网页中隐藏的div内容?
  9. 2.4G-WiFi连接路由器过程
  10. 基于python脚本的参数化建模_Python在ABAQUS中