1.第一范式1NF:列不可再分

1.每一列属性都是不可再分的属性值,确保每一列的原子性

2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据

例:

有一个学生表,假设有两个字段分别是 name,address,而address内容写的是:江苏省南京市浦口区xxx街道xxx小区。如果这时来一个需求,需要按省市区分类,显然不符需求,这样的表结构也不是符合第一范式的。

应该设计成  name,province(省),city(市),area(区),address

2.第二范式(2NF)属性完全依赖于主键

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键

每一行的数据只能与其中一列相关,即一行数据只做一件事,只要数据列中出现重复的数据,那么就要把表拆分开来。

例:

有一个订单表如下:

orderId(订单编号),roomId(房间号), name(联系人), phone(联系电话),idn(身份证)

如果这时候一个人同时订了好几个房间,就会变成一个订单编号对应多条数据,这样子联系人都是重复的,就会造成数据冗余,这时我们应该把拆分开来。

如:

订单表:

orderId(订单编号),roomId(房间号), peoId(联系人编号)

联系人表:

peoId(联系人编号),name(联系人), phone(联系电话),idn(身份证)

3.第三范式(3NF)属性不依赖于其它非主属性    属性直接依赖于主键

第二范式(3NF)是在第一范式(2NF)的基础上建立起来的,即满足第三范式(3NF)必须先满足第二范式(2NF)。

简单点意思就是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

例:

假设有一个员工(employee)表,它有九个属性:id(员工编号)、name(员工名称)、mobile(电话)、zip(邮编)、province(省份)、city(城市)、district(区县)、deptNo(所属部门编号)、deptName(所属部门名称)

员工表的province、city、district依赖于zip,而zip依赖于id,换句话说,province、city、district传递依赖于id,违反了 3NF 规则。为了满足第三范式的条件,可以将这个表拆分成employee和zip两个表,如下

employee

id name zip
101 张三 100001
102 李四 200001
103 王五 510001

地区表area

zip province city district
100001 北京 北京 海淀区
200001 上海 上海 静安区
51000 广东省 广州 白云区

为什么需要范式

数据库范式为数据库的设计、开发提供了一个可参考的典范,在许多教学材料中也是作为关键的课程内容。
那么范式的提出是为了解决什么问题?

  • 第一范式,要求将列尽可能最小的分割,希望消除某个列存储多个值的冗余的行为
    比如用户表中的地址信息,拆分为省、市这种明确的字段,可以按独立的字段检索、查询
  • 第二范式,要求唯一的主键,且不存在对主键的部分依赖,希望消除表中存在冗余(多余)的列
    比如订单表中的商品分类、详情信息,只需要由商品信息表存储一份即可。
  • 第三范式,要求没有间接依赖于主键的列,即仍然是希望消除表中冗余的列
    比如用户表中不需要存储额外的 其所在城市的人口、城市特点等信息。

很明显,这些范式大都是为了消除冗余而提出的,即尽可能的减少存储成本。

没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

数据库三范式(浅显易懂)相关推荐

  1. python学习笔记 day44 数据库三范式

    参考自 https://www.cnblogs.com/wangfengming/articles/7929118.html 1. 数据库三范式概念: 为了建立减少冗余,结构合理的数据库,涉及数据库时 ...

  2. 为什么我不喜欢数据库三范式

    插曲 最近,一个远房亲戚的小表弟准备选修专业 找到我问: "哥,现在学数据库有没有前途阿?""当然有啊,前途大大的呢""那我现在开始学数据库,需要先从 ...

  3. MySQL笔记(七)数据库三范式

    这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是数据库三范式.有错误的欢迎大家指出... 数据库三范式 (1)第一范式(1NF): 定义:每一列都是不可分割的原子数据项(强调的是列的 ...

  4. 数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性

    参考:http://www.cnblogs.com/xrq730/p/5100442.html 细说数据库三范式 2.1 第一范式(1NF)无重复的列,保证每列的原子性,即每一列的各个属性值之间不能有 ...

  5. 三句话归纳数据库三范式

    数据库三范式,网友已经总结n多了,这里不再赘述. 其实,归纳起来,就三句话: 一:行不可再分 二:列不可再分 三:列不可重复

  6. 从数据库三范式角度分析一对多、多对多和一对一关系

    文章目录 前言 一.三范式的目的 二.三范式及其对应关系 1.第一范式 2.第二范式 3.第三范式 4.一对一关系 总结 前言 几乎绝大多数项目的最终目的都是通过操作数据库来实现的,所以,操作数据库的 ...

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

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

  8. MySql——数据库三范式

    用于自己学习时的简单解释 数据库三范式:是数据库的设计原则,主要目的是为了避免数据冗余. 数据库的设计应当遵循三范式 第一范式:任何一张表都应该有主键,每一个字段必须具有原子性不可再分 第二范式:在第 ...

  9. 如何在数据库三范式的基础上进行数据库冗余设计

    数据库设计过程中不仅要考虑遵循第三范式,还要考虑是否冗余 很多数据库设计书籍都强调数据库设计三范式,而三范式的一个重要工作就是消除冗余,可以消除冗余在大多数情况下是正确的.当在实际的业务模型中,处理复 ...

  10. mysql三范式和反三范式_数据库三范式和反三范式

    要说数据库什么最抽象,我觉得就是这个三范式,不是很好理解,但是表在设计的时候又必须要知道这么一个规则. 首先使用最简洁的话说说这三范式: 第一范式(1NF:The First Normal Form) ...

最新文章

  1. Cygwin简介及其下载安装卸载
  2. windows10 安装mqtt服务器和client客户端进行本地调试
  3. 排队枪毙游戏c语言,基于C语言实现的约瑟夫生者死者游戏
  4. xml--Schema约束
  5. Do you want to put on or loose weight?
  6. java中生成pdf文件,java 中生成pdf 文件
  7. ROS笔记(24) Amcl
  8. 谷歌紧急修复已遭在野利用的Chrome 0day
  9. linux快速查找文件中所包含的指定字段的个数
  10. HashMap(HashSet)的实现
  11. 三维计算机视觉(六)--3DSC(3D形状上下文特征)
  12. 数字信号处理-04- FPGA常用运算模块-除法器
  13. VMware 11.0 简体中文版|附永久密钥
  14. 联想ts250进bios_联想Think TS250/TS550安装server 2008 R2/2012系统教程【一】
  15. 2022版首发,阿里Java开发手册(黄山版).PDF
  16. RT-Thread在正点原子Apollo上使用MAX30102读取心率、血氧参数
  17. 远程控制计算机显示为什么不能满屏,win7远程桌面不能全屏显示怎么办-处理win7远程桌面不能全屏显示的方法 - 河东软件园...
  18. System.out.println()标准输出方法性能影响一窥
  19. java使用jacob给word添加水印
  20. 查找父类的所有子类 crtl+alt+b

热门文章

  1. 宁夏首票关税保证保险报关单顺利通关
  2. 放大镜功能怎么打开?打开电脑放大镜功能的方法
  3. 圣旨开头写“奉天承运皇帝诏曰”是谁发明的?
  4. html实战-用表格制作qq注册
  5. 【linux】 基础 I / O
  6. 监听鼠标 滚动条事件
  7. Nginx location(正则)
  8. PLSQL_13版本配置
  9. IE下面双击checkbox反应延迟的问题
  10. 国内镜像源(阿里、网易、清华、中科大) ubuntu20.04下载地址超快