数据库三范式【看了就有收获,最简单的例子解释】
1. 数据库的三范式是什么????
范式=规范,原则上是必须遵循的(但是需求不同可以不遵循),特殊情况可以不遵循
第一范式(1NF):符合数据表的原子性【就是每一个属性不可再分】
表中的同一列数据相同
一个列名只能对应一列
并且每一列都不可再分
行的上下关系互不影响(看不懂这里没关系,例子懂了就行)
举例:第一个是不满足第一范式的 【是可以再分的】(将签到的两行改成一行就满足一范式了)
这个例子就是满足一范式的。
第二范式(2NF):消除了非主属性对于码【主属性的集合】的部分函数依赖(简单来说:表中的非主属性【姓名】必须完全依赖于主属性【学号】,也就是说通过主属性能够获取到一个唯一的姓名。)
名词解释;
码(候选码):就是主属性的集合。 有了码就可以获取到码对应的其他属性【id【主属性】确定--就可以确定 姓名 系名和系主任 (非主属性)。课名【主属性】可以获取分数【非主属性】】
主属性:码里面的属性就是主属性,包括id,课名。
非主属性:不是主属性的就是非主属性,包括姓名和系名和系班主任,分数。
函数依赖:函数y=f(x)代表给定一个x值,y的值也是确定的。在数据表中,如果属性x确定的情况下,必定能确定Y的值,那么就说Y函数依赖于X 写作X---Y。
比如在表中,给定一个学号,必定能够获取到唯一的一个姓名。那么就说明姓名依赖于函数学号。写作:学号---姓名。
在表中的以来函数还有
学号---系名
学号---系班主任
完全函数依赖:举例说明:(学号、课名)---成绩【成绩【非主属性】依赖于学号和课名【都是主属性】才能获取唯一的成绩】,少任意一个主属性都不能获取唯一的成绩(学生的分数必须依赖于两个主属性【id和课名】才能获取到唯一的成绩【非主属性】)
完全函数依赖表格举例:
部分函数依赖:举例说明:姓名【非主属性】只需要通过id【主属性】就可以确定,不需要另一个主属性(课名),这就叫部分函数依赖(姓名部分函数依赖于id和课名(就是姓名并不是需要通过两个主属性才能获取到,姓名只依赖于id))
第三范式(3NF):在二范式的基础上,消除了非主属性对于码的传递函数依赖。也就是说,如果存在非主属性对于码的传递函数依赖,则不符合三范式的要求
传递函数依赖:如果Y依赖于X,Z又依赖于Y,那可以说Z依赖于X。
比如:系名依赖于id(学号),系主任依赖于系名,那么系主任传递函数依赖于学号。不满足三范式,那么如何解决呢?将其分为更细的表(从而增删改查一条信息不会对其他表造成很大的影响)
综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,
注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【不用关联查询,直接单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式
================================简化版本=================================
范式就是规范,就是要遵守的原则。一般要遵守有三种范式
1NF(1范式): 设计数据库表的列的时候,这些列唯一,不可拆分。 列的原子性,其实这种范式可以不用管,关系型数据库默认都满足。
2NF(2范式):表中行是唯一,通常设计一个主键来实现,通过主键就可以查询到对应的信息。
3NF(3范式): 如果一张表的数据能够通过其他表的外键推导出来,不应该单独设计,通过外键的方式关联查询出来。【避免冗余字段】
综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,
注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【**变多表查询为单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式**
数据库三范式【看了就有收获,最简单的例子解释】相关推荐
- 如何在数据库三范式的基础上进行数据库冗余设计
数据库设计过程中不仅要考虑遵循第三范式,还要考虑是否冗余 很多数据库设计书籍都强调数据库设计三范式,而三范式的一个重要工作就是消除冗余,可以消除冗余在大多数情况下是正确的.当在实际的业务模型中,处理复 ...
- python学习笔记 day44 数据库三范式
参考自 https://www.cnblogs.com/wangfengming/articles/7929118.html 1. 数据库三范式概念: 为了建立减少冗余,结构合理的数据库,涉及数据库时 ...
- 为什么我不喜欢数据库三范式
插曲 最近,一个远房亲戚的小表弟准备选修专业 找到我问: "哥,现在学数据库有没有前途阿?""当然有啊,前途大大的呢""那我现在开始学数据库,需要先从 ...
- MySQL笔记(七)数据库三范式
这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是数据库三范式.有错误的欢迎大家指出... 数据库三范式 (1)第一范式(1NF): 定义:每一列都是不可分割的原子数据项(强调的是列的 ...
- 数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性
参考:http://www.cnblogs.com/xrq730/p/5100442.html 细说数据库三范式 2.1 第一范式(1NF)无重复的列,保证每列的原子性,即每一列的各个属性值之间不能有 ...
- 三句话归纳数据库三范式
数据库三范式,网友已经总结n多了,这里不再赘述. 其实,归纳起来,就三句话: 一:行不可再分 二:列不可再分 三:列不可重复
- 从数据库三范式角度分析一对多、多对多和一对一关系
文章目录 前言 一.三范式的目的 二.三范式及其对应关系 1.第一范式 2.第二范式 3.第三范式 4.一对一关系 总结 前言 几乎绝大多数项目的最终目的都是通过操作数据库来实现的,所以,操作数据库的 ...
- 数据库三范式通俗理解 -数据库三范式官方定义
数据库三范式 官方定义 第一范式(1NF):数据库表中的字段都是单一属性的,不可再分. 第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖 第三范式(3NF):在第二范式的 ...
- MySql——数据库三范式
用于自己学习时的简单解释 数据库三范式:是数据库的设计原则,主要目的是为了避免数据冗余. 数据库的设计应当遵循三范式 第一范式:任何一张表都应该有主键,每一个字段必须具有原子性不可再分 第二范式:在第 ...
最新文章
- 如何估算大型项目的工作量
- python 字符串%和format_python基础任务二
- STM32使用LWIP库新建tcp_sever
- oracle窗口累计函数,oracle 窗口函数 (keep)
- HelloMybatis
- TI单芯片毫米波雷达代码走读(十七)—— 恒虚警(CFAR)检测浅谈
- 编程模拟高尔顿钉板(正态分布)C++
- Linux入门基础教程
- 硬件工程师和软件工程师哪个更有前途?我会告诉你嵌入式工程师更有前途
- 数据分析实战(二) 基于美国人口adult数据集R语言分析实战
- latch mysql_关于MySQL latch争用深入分析与判断
- 【批量去除图片的背景】
- 【JavaScript】预解析
- 2011年养成的一个工作习惯
- 【ubuntu】ls颜色的含义
- 28天打造专业红客(十一)
- 用IDEA进行Java后台开发(一)
- antd+react ---手机号校验(流程中使用)
- Fortran 95 固定过程
- The King’s Ups and Downs HDU - 4489