◆ 第一范式(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:非主键列是直接依赖于主键,还是直接依赖于非主键列。

转载于:https://blog.51cto.com/wujeangwei/228549

三个范式的定义与理解相关推荐

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

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

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

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

  3. 【数据库】期末复习:SQL语句、关系代数的运算、范式的定义和判断、求最小函数依赖集、ER图转关系模式

    文章目录 SQL语句 查询select 其他 视图 关系代数的运算 并.差.笛卡尔积.投影和选择 连接 自然连接 笛卡尔积 详细版(如果完全不了解就看这里) 范式的定义和判断 如何求候选码 一些例题 ...

  4. 群、环、域的概念,定义和理解.

    群.环.域的概念,定义和理解. 以下链接很好的解释了群环域的概念. http://sparkandshine.net/algebraic-structure-primer-group-ring-fie ...

  5. 轻量级模型设计与部署总结(关键字定义/架构理解/高效CNN)

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[模型部署]技术交流群 后台回复[模型部署工程]获取基于TensorRT的分类.检测任务 ...

  6. 数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解

    数据库|第一范式.第二范式.第三范式.BC范式.第四范式简单理解 在设计数据库的时候,虽说将我们要的数据正确完整导入数据库是很关键的,但是对于数据库的设计者来说,如何将大量数据合理有效正确地导入数据库 ...

  7. 关于机器学习的定义的理解

    对机器学习定义的理解 Tom M.Mitcjell provided a widely quoted, more  formal definition: "A computer progra ...

  8. Math.ceil(),Math.floor()与Math.round()三个函数的定义。

    为什么80%的码农都做不了架构师?>>>    JavaScript: The Definitive Guide, 4th Edition中对Math.ceil(),Math.flo ...

  9. static的三种用法,定义静态变量,静态函数,静态代码块!

    static的三种用法,定义静态变量,静态函数,静态代码块! 1.定义静态变量 class PersonStatic { //静态变量的特点 //1.静态变量无需生成对象就可被调用,可以使用类名和对象 ...

最新文章

  1. iOS开发异常错误总结之——wait_fences: failed to receive reply: 10004003
  2. wxWidgets:wxBrush类用法
  3. html整个项目怎么导出来,怎样将jquery导入web项目中?
  4. CVPR 2019 | 西北工业大学开源拥挤人群数据集生成工具,大幅提升算法精度
  5. vmware esxi 4.0 上安装postfix,mailx发送邮件
  6. 大数据之Zookeeper
  7. 荣耀手机安装谷歌框架_华为荣耀9青春版安装谷歌框架 无需Root 华为荣耀手机安装谷歌框架...
  8. mp4视频解码生成图片
  9. uniapp使用uCharts区域图
  10. PartnerLink,PartnerLinkType详解
  11. redis 基本原理及安装
  12. Django相关操作(连续跳转和登录注册为例)
  13. 【C++代码】区间重叠问题
  14. 如何购买ssl证书?
  15. 2020.7.25T1挑竹签(jz暑假训练day10)
  16. ECharts-Javascript的图表库推荐
  17. Python中‘r‘,‘r+‘,‘w‘,‘w+‘,‘a‘,‘a+‘区别总结
  18. 微信企业号开发之地理位置获取
  19. MAC版Lightroom Classic 2022(Lrc2022)v11.5已发布,支持M1/M2和Intel三种系统,解决无法成功安装等问题
  20. 超短线地挂单买卖技巧

热门文章

  1. 高端android手机,高端机型很难选择?这几款手机就很不错,你肯定有中意的
  2. kubernetes英语怎么读_陷阱英语单词怎么读?
  3. mysql 每条记录大小_计算数据库中各个表的数据量和每行记录所占用空间
  4. 算法中分类与聚类的区别?
  5. java socket 远程调用_SpringBoot使用Netty实现远程调用的示例
  6. 反射获取成员方法并运行
  7. MetInfo最新版代码审计漏洞合集
  8. linux安装xgboost快速高效方法
  9. kubernetes目录挂载
  10. 服务端如何识别是selenium在访问以及解决方案参考一