按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。

常见的范式有1NF、2NF、3NF、BCNF。下面对这几种常见的范式进行简要分析。

1、1NF(第一范式):

第一范式,就是数据表的列不可再分,数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

看下面数据表,对于选课列明显是可以再分的,所以它是违反第一范式的。

学号 姓名 选课
10001 张三 数学,语文,英语
10002 李四 语文,英语
10003 王五 语文,英语,历史

2、2NF(第二范式):

第二范式必须先满足第一范式。另外包含两部分的内容:一是表必须有一个主键;二是表中非主键列必须完全依赖于主键,而不能只依赖于主键的一部分。

学号 课程 成绩 课程学分
10001 数学 100 6
10001 语文 90 2
10001 英语 85 3
10002 数学 90 6
10003 数学 99 6
10004 语文 89 2

表中主键为 (学号,课程),我们可以表示为 (学号,课程) -> (成绩,课程学分), 表示所有非主键列 (成绩,课程学分)都依赖于主键 (学号,课程)。 但是,表中还存在另外一个依赖:(课程)->(课程学分)。这样非主键列 ‘课程学分‘ 依赖于部分主键列 ’课程‘, 所以上表是不满足第二范式的。

我们把它拆成如下2张表:

学生选课表:

学号 课程 成绩
10001 数学 100
10001 语文 90
10001 英语 85
10002 数学 90
10003 数学 99
10004 语文 89

课程信息表:

课程 课程学分
数学 6
语文 3
英语 2

那么上面2个表,学生选课表主键为(学号,课程),课程信息表主键为(课程),表中所有非主键列都完全依赖主键。不仅符合第二范式,还符合第三范式。

3、3NF(第三范式):

定义:首先是满足 2NF,另外非主键列必须直接依赖于主键,表中的列不存在对非主键列的传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

再看这样一个学生信息表:

学号 姓名 性别 班级 班主任
10001 张三 一班 小王
10002 李四 一班 小王
10003 王五 二班 小李
10004 张小三 二班 小李

上表中,主键为:(学号),所有字段 (姓名,性别,班级,班主任)都依赖与主键(学号),不存在对主键的部分依赖。所以是满足第二范式。但是,表中存在一个传递依赖,(学号)->(班级)->(班主任)。也就是说,(班主任)这个非主键列依赖与另外一个非主键列 (班级)。所以不符号第三范式。

把这个表拆分成如下2个表:

学生信息表:

学号 姓名 性别 班级
10001 张三 一班
10002 李四 一班
10003 王五 二班
10004 张小三 二班

班级信息表:

班级 班主任
一班 小王
二班 小李

这样,对主键的传递依赖就消失了。上面的2个表都符合第3范式。

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

4、BCNF(BC范式):

定义:在第三范式的基础上,消除主属性对于码部分的传递依赖。

假设仓库管理关系表(仓库号,存储物品号,管理员号,数量),满足一个管理员只在一个仓库工作;一个仓库可以存储多种物品,则存在如下关系:

(仓库号,存储物品号)——>(管理员号,数量)

(管理员号,存储物品号)——>(仓库号,数量)

所以,(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表的候选码,表中唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

(仓库号)——>(管理员号)

(管理员号)——>(仓库号)

即存在关键字段决定关键字段的情况,因此其不符合BCNF。把仓库管理关系表分解为两个关系表  仓库管理表(仓库号,管理员号) 和 仓库表(仓库号,存储物品号,数量),这样这个数据库表是符合BCNF的,并消除了删除异常、插入异常和更新异常。

5、4NF(第四范式):

设R是一个关系模型,D是R上的多值依赖集合。如果D中存在多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。

例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。

原博客链接:https://blog.csdn.net/xidianliuy/article/details/51566576

MySQL数据库:范式相关推荐

  1. mysql范式与反范式_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”...

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

  2. 从第一范式到第二范式所做的操作是_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

  3. mysql数据库建仓范式_存mysql个数

    MySQL学习笔记之数据类型详解 注:以下内容针对MySQL5.0及以上版本 MySQL的数据类型非常多,选择正确的数据类型对于获得高性能至关重要,本文是我结合网上看到的一些blog加上<高性能 ...

  4. MySQL | 数据库的六种约束、表的关系、三大范式

    文章目录 数据库约束 NOT NULL(非空约束) UNIQUE(唯一约束) DEFAULT(缺省约束) PRIMARY KEY(主键约束) AUTO_INCREMENT 自增 FOREIGN KEY ...

  5. Mysql数据库与数据库三大范式

    作者:左新宇 链接:https://zhuanlan.zhihu.com/p/59394493 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. MySQL 常用命令 ...

  6. MySQL 数据库设计范式/优化

    数据库设计范式 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式. 目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF ...

  7. MySQL | 数据库基础理论、六大设计范式详解

    从本篇博文开始,会陆续介绍MySQL数据库的相关内容,分为以下几个部分: 数据库基础理论 基本CURD操作(常用SQL) 索引及其底层实现原理 MySQL体系结构与存储引擎 MySQL优化之SQL和索 ...

  8. Mysql 数据库设置三大范式 数据库五大约束 数据库基础配置

    数据库设置三大范式 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足第一范式. 第一范式的合理遵循需要根据系统给的实际需求 ...

  9. MySQL数据库-笔记03【范式(1NF、2NF、3NF)、查询练习题*10道(附解析)】

    学习地址:一天学会 MySQL 数据库      MySQL安装教程      MySQL专栏

  10. 违反mysql三范式_违反数据库第三范式引发的一个问题

    数据库第三范式的定义,是这样的: A table is in a third normal form when the following conditions are met - It is in ...

最新文章

  1. 10个Eclipse珍藏插件推荐
  2. Python自动化运维——系统性能信息模块
  3. 侯捷面向对象编程C++
  4. 单元测试怎么测试线程_单元测试线程代码的5个技巧
  5. Python学习第二天----网络基础及操作系统简介(安装linux系统)
  6. c++ fstream类详解
  7. 《JavaScript高级程序设计2》学习笔记——BOM
  8. HDU 1565 方格取数(简单状态压缩DP)
  9. 周鸿祎:有的人在25岁时就死了,但在75岁时才被埋葬
  10. 拓端tecdat|R语言基于树的方法:决策树,随机森林,Bagging,增强树
  11. 【原创】MySql常见出错解决
  12. 三防电子产品美军标MIL-STD-810G
  13. Java自定义数组排序
  14. HTML页面 引用js文件中文乱码
  15. HBuilderX 打包问题
  16. 一切照旧... ...
  17. md5sum命令的使用
  18. 微型计算机循环结构程序,微机原理(循环程序设计)..doc
  19. 【MathType】彻底解决公式大小与文章文字大小不统一(含字体的字号与磅(pt)和像素(px)之间的换算关系)
  20. Springboot毕设项目华阳大众汽车售卖系统v9f90(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. 七十九、深度和广度优先搜索算法
  2. Map和hashmap
  3. 四十四、Hexo搭建自己的博客
  4. [好东西]使用ngrok把本机的网站端口映射到外网
  5. 对凸优化(Convex Optimization)的一些浅显理解
  6. CVPR 2020最新热点:物体位姿估计
  7. MixPath:基于权重共享的神经网络搜索统一方法
  8. ECCV 2018 | 美图云联合中科院提出基于交互感知注意力机制神经网络的行为分类技术...
  9. 牛客网 短最优升级路径 【Dijkstra算法】+【路径记录】
  10. 电音之王 对64bit int 取模