范式理论概述

关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性和数据的一致性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。

范式的标准定义是:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。通俗地讲,范式可以理解为一张数据表的表结构所符合的某种设计标准的级别

使用范式的根本目的是:减少数据冗余,尽量让每个数据只出现一次,获取数据时通过 join 拼接出最后的数据

范式基本概念

表 1-1 学生成绩表

学号 

姓名 

系名 

系主任 

课名 

分数 

20170901176

王小强

计算机系

马小腾

C 语言

95

20170901176

王小强

计算机系

马小腾

计算机基础

99

20170901176

王小强

计算机系

马小腾

高等数学

80

20170901179

李阳

经管系

王小石

经济学

95

20170901179

李阳

经管系

王小石

管理学

92

20170901186

张小俊

数学系

钱小森

高等数学

89

20170901186

张小俊

数学系

钱小森

线性代数

96

函数依赖

若在一张表中,在属性或属性组)X 的值确定的情况下,必定能确定属性 Y 的值, 那么就可以说 Y 函数依赖于 X,写作  X →  Y

也就是说,在数据表中,如果符合函数依赖,那么不存在任意两条记录,它们在 X 属性(或属性组)上的值相同,而在 Y 属性上的值不同。这也就是“函数依赖”名字的由来,类似于函数关系 y = f(x),在 x 的值确定的情况下,y 的值一定是确定的。

例如,对于表 1-1 中的数据,找不到任何一条记录,它们的学号相同而对应的姓名不同。所以我们可以说姓名函数依赖于学号,写作 学号 → 姓名。但是反过来,因为可能出现同名的学生,所以有可能不同的两条学生记录,它们在姓名上的值相同,但对应的学号不同, 所以我们不能说学号函数依赖于姓名。

表中其他的函数依赖关系还有如:

系名 → 系主任

学号 → 系主任

(学号,课名) → 分数

以下函数依赖关系则不成立: 学号 → 课名

学号 → 分数课名 → 系主任

(学号,课名) → 姓名

一、完全函数依赖

在一张表中,若 X Y,且对于  X  的任何一个真子集(假如属性组  X  包含超过一个属性的话),X '   →  Y 不成立,那么我们称  Y 对于  X  完全函数依赖,记做:

例如:

学号 F→ 姓名

(学号,课名) F→ 分数 (注:因为同一个的学号对应的分数不确定,同一个课名 对应的分数也不确定)

二、部分函数依赖

假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于  X,那么我们就称  Y 部分函数依赖于  X,记做:

简单来说,(学号,课名)→ 系名,学号 → 系名,那么(学号,课名)p→ 系名。

三、传递函数依赖

假如  Z  函数依赖于  Y,且  Y  函数依赖于  X  ,且 Y 不包含于  XX  不函数依赖于  Y,那么我们就称  Z  传递函数依赖于  X,记做:

简单来说,系名 → 系主任,学号 → 系名,那么学号 T→ 系主任。


一范式

一范式(1NF):域应该是原子性的,即数据库表的每一列都是不可分割的原子数据项
域:域就是列的取值范围,比如性别的域就是(男,女)

表 1-2 不符合一范式的表格设计

ID

商品

商家ID

用户ID

001

5 台电脑

XXX旗舰店

0000

很明显如图 1-1 所示的表格设计是不符合第一范式的,商品列中的数据不是原子数据项,是可以进行分割的,因此对表格进行修改,让表格符合第一范式的要求,修改结果如图1-2 所示:

表 1-3 符合一范式的表格设计

ID

商品

数量

商家ID

用户ID

001

电脑

5

XXX旗舰店

00001

实际上, 1NF   是所有关系型数据库的最基本要求, 你在关系型数据库管理系统

(RDBMS),例如 SQL Server,Oracle,MySQL 中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。也就是说,只要在 RDBMS 中已经存在的数据表,一定是符合 1NF 的。

二范式

二范式(2NF): 1NF 的基础上,实体的属性完全函数依赖于主关键字混合主键), 不能存在部分函数依赖于主关键字混合主键

如果存在某些属性只依赖混合主键中的部分属性,那么不符合二范式

表 1-4 不符合二范式的表格设计

学生 ID

姓名

所属系

系主任

所修课程

分数

20170901176

王小强

计算机系

马小腾

000001

95

20170901176

王小强

计算机系

马小腾

000002

99

上述表格中是混合主键(学生 ID + 所修课程),但是所属系和系主任这两个属性只依赖于混合主键中的学生 ID 这一个属性,因此,不符合第二范式。

如果有一天学生的所属系要调整,那么所属系和系主任这两列都需要修改,如果这个学生修了多门课程,那么表中的多行数据都要修改,这是非常麻烦的,不符合第二范式。

为了消除这种部分依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表

表 1-5 符合二范式的表格设计(1)

学生 ID

所修课程

分数

20170901176

000001

95

20170901176

000002

99

学生 ID

所属系

系主任

20170901176

计算机系

马小腾

20170901176

计算机系

马小腾

学生 ID

姓名

20170901176

王小强

20170901176

王小强

通过上述的修改,当一个学生的所属系需要调整时,不管学生修了多少门课程,都只需要改变表 1-5 中的一行数据即可。

三范式

3NF 2NF 的基础之上,消除了非主属性对于主键(复合主键)的传递依赖

表 1-6 不符合三范式的表格设计

订单ID

商品ID

商品颜色

商品尺寸

商家ID

用户ID

001

0001

深空灰

300*270*40

XXX旗舰店

00001

很明显,表 1-7 中,商品颜色依赖于商品 ID,商品 ID 依赖于订单 ID,那么非主属性商品颜色就传递依赖于订单 ID,因此不符合三范式,解决方案是将大数据表拆分成两个或者更多个更小的数据表

表 1-7 符合三范式的表格设计(1)

订单ID

商品ID

商家ID

用户ID

001

0001

XXX旗舰店

00001

商品ID

商品颜色

商品尺寸

0001

深空灰

300*270*40

范式基本概念 第一范式、第二范式、第三范式相关推荐

  1. MySQL (4) 第一范式 第二范式 第三范式 BC范式

    第一范式 第一范式:所有属性都是不可分割的原子值. 也就是每个属性都是不可再分的. 例如下图就不符合第一范式的要求 实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS) ...

  2. 第一范式 第二范式 第三范式 BC范式

    第一范式 第一范式:所有属性都是不可分割的原子值.  也就是每个属性都是不可再分的.  例如下图就不符合第一范式的要求   实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RD ...

  3. 第一范式第二范式第三范式学习笔记

    三楚白云生佛手,九江寒月照禅心. --李日华<佛手岩> 文章目录 前言 一.第一范式(1NF) 二.第二范式(2NF) 三.第三范式(3NF) 四.参考学习视频 五.名词解释&知识 ...

  4. 第一范式 第二范式 第三范式理解

    数据库中设计一个好的标准化范式能大大减少数据冗余,增强数据的易操作性. 范式的演变: 第一范式:表中没有重复数据组 属性不可以再分,具有一个主键(主键组) 例如: 出现从重复的数据组,把它转换为第一范 ...

  5. 3.6.2数据库系统-范式判断:范式分类、第一范式、第二范式、第三范式、BC范式

    3.6.2数据库系统-范式判断:范式分类.第一范式.第二范式.第三范式.BC范式 范式分类 第一范式 例题 第二范式 例题 第三范式 例题 BC范式 例题 范式分类 逐步优化以解决问题:插入异常.删除 ...

  6. java的第一范式,数据库第一范式第二第三范式关系详解

    一.范式的定义 程序员在做数据库设计时不是心血来潮胡乱设计的,而是需要遵循一定的规范而为之,这些规范就是为了设计出合理而实用的数据库而总结的的,专门适用于任何关系型数据库. 数据库设计在很大程度上取决 ...

  7. 范式的概念和应用(1.2.3.bc.4.5)

    范式类型 关系数据库中的几种设计范式 1 第一范式(1NF) 在任何一个 关系数据库中,第一范式(1NF) [2] 是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库. 所谓第一 ...

  8. MySQL基本使用(内容较多建议熟读并背诵)

    文章目录 前言 DDL 数据库的创建 操作数据库表 对表的CURD DML DQL 单表操作 简单的运算 模糊查询 子查询 约束 外键 级联概念 表的关系 一对多 一对一 多对多 主从表 级联操作 联 ...

  9. java自学:MySQL

    1.数据库概念 1.1.数据库的基本概念 1.2.常见的数据库软件介绍 2.MySQL安装与使用 2.1.MySQL的安装与卸载 2.2.MySQL服务启动与关闭 2.3.MySQL登录和推出 2.4 ...

最新文章

  1. 二叉树的中序遍历(递归)
  2. PhpStorm 默认快捷键
  3. python安装idle_(1)Python 安装使用IDLE
  4. 【剑指offer】调整数组顺序使奇数位于偶数前面
  5. php mescroll,mescroll.js上拉加载下拉刷新组件使用详解
  6. mysql insert ignore into 与replace 避免重复插入
  7. 常见方案 目录 1. 发现目前 WEB 上主流的视频直播方案有 HLS 和 RTMP, 1 2. 实现直播的方法有很多,但是常用的,就这几个。 3个直播协议:rtmp、rtsp、hls。 和三个端:
  8. xtile 下载_Stata: gen 命令中的 group() 函数的潜在风险
  9. 记vsftpd虚拟用户登录返回530 Login incorrect解决过程
  10. 栈的数据结构特点(小白基础)
  11. 嵌入式开发日记(3)——利用Python接收并处理JY61传感器数据
  12. android 流畅动画svg,android svg动画
  13. 狄拉克δ函数的数学迷思
  14. python 全栈开发,Day106(结算中心(详细),立即支付)
  15. iframe不能显示内容的问题
  16. sublime text 3 调色板插件
  17. 搜索引擎发展趋势探讨
  18. java动物代码_Java基于接口实现模拟动物声音代码实例
  19. group by使用
  20. Picasso 源码 学习(一) 图片加载流程

热门文章

  1. 英语学习:X Y Z开头
  2. java txt替换内容_使用Java替换文件中的文本
  3. python读取文本文件时报错‘utf-8‘ codec can‘t decode byte 0xb4 in position 100:
  4. java毕业设计青少年公共卫生教育平台源码+lw文档+mybatis+系统+mysql数据库+调试
  5. CF刷题(01)——难度1600
  6. zabbix监控僵尸进程
  7. Python常用数据类型
  8. (二)绘图:五角星2.2-----turtle库画笔抬起、放下、粗细、颜色
  9. photoshop-反相调整颜色
  10. 我的世界1.8.9无需正版的服务器,我的世界1.8.9正式版