范式基本概念 第一范式、第二范式、第三范式
范式理论概述
关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性和数据的一致性,目前业界范式有:第一范式(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 不包含于 X,X 不函数依赖于 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 |
范式基本概念 第一范式、第二范式、第三范式相关推荐
- MySQL (4) 第一范式 第二范式 第三范式 BC范式
第一范式 第一范式:所有属性都是不可分割的原子值. 也就是每个属性都是不可再分的. 例如下图就不符合第一范式的要求 实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS) ...
- 第一范式 第二范式 第三范式 BC范式
第一范式 第一范式:所有属性都是不可分割的原子值. 也就是每个属性都是不可再分的. 例如下图就不符合第一范式的要求 实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RD ...
- 第一范式第二范式第三范式学习笔记
三楚白云生佛手,九江寒月照禅心. --李日华<佛手岩> 文章目录 前言 一.第一范式(1NF) 二.第二范式(2NF) 三.第三范式(3NF) 四.参考学习视频 五.名词解释&知识 ...
- 第一范式 第二范式 第三范式理解
数据库中设计一个好的标准化范式能大大减少数据冗余,增强数据的易操作性. 范式的演变: 第一范式:表中没有重复数据组 属性不可以再分,具有一个主键(主键组) 例如: 出现从重复的数据组,把它转换为第一范 ...
- 3.6.2数据库系统-范式判断:范式分类、第一范式、第二范式、第三范式、BC范式
3.6.2数据库系统-范式判断:范式分类.第一范式.第二范式.第三范式.BC范式 范式分类 第一范式 例题 第二范式 例题 第三范式 例题 BC范式 例题 范式分类 逐步优化以解决问题:插入异常.删除 ...
- java的第一范式,数据库第一范式第二第三范式关系详解
一.范式的定义 程序员在做数据库设计时不是心血来潮胡乱设计的,而是需要遵循一定的规范而为之,这些规范就是为了设计出合理而实用的数据库而总结的的,专门适用于任何关系型数据库. 数据库设计在很大程度上取决 ...
- 范式的概念和应用(1.2.3.bc.4.5)
范式类型 关系数据库中的几种设计范式 1 第一范式(1NF) 在任何一个 关系数据库中,第一范式(1NF) [2] 是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库. 所谓第一 ...
- MySQL基本使用(内容较多建议熟读并背诵)
文章目录 前言 DDL 数据库的创建 操作数据库表 对表的CURD DML DQL 单表操作 简单的运算 模糊查询 子查询 约束 外键 级联概念 表的关系 一对多 一对一 多对多 主从表 级联操作 联 ...
- java自学:MySQL
1.数据库概念 1.1.数据库的基本概念 1.2.常见的数据库软件介绍 2.MySQL安装与使用 2.1.MySQL的安装与卸载 2.2.MySQL服务启动与关闭 2.3.MySQL登录和推出 2.4 ...
最新文章
- 二叉树的中序遍历(递归)
- PhpStorm 默认快捷键
- python安装idle_(1)Python 安装使用IDLE
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- php mescroll,mescroll.js上拉加载下拉刷新组件使用详解
- mysql insert ignore into 与replace 避免重复插入
- 常见方案 目录 1. 发现目前 WEB 上主流的视频直播方案有 HLS 和 RTMP,	1 2. 实现直播的方法有很多,但是常用的,就这几个。 3个直播协议:rtmp、rtsp、hls。 和三个端:
- xtile 下载_Stata: gen 命令中的 group() 函数的潜在风险
- 记vsftpd虚拟用户登录返回530 Login incorrect解决过程
- 栈的数据结构特点(小白基础)
- 嵌入式开发日记(3)——利用Python接收并处理JY61传感器数据
- android 流畅动画svg,android svg动画
- 狄拉克δ函数的数学迷思
- python 全栈开发,Day106(结算中心(详细),立即支付)
- iframe不能显示内容的问题
- sublime text 3 调色板插件
- 搜索引擎发展趋势探讨
- java动物代码_Java基于接口实现模拟动物声音代码实例
- group by使用
- Picasso 源码 学习(一) 图片加载流程
热门文章
- 英语学习:X Y Z开头
- java txt替换内容_使用Java替换文件中的文本
- python读取文本文件时报错‘utf-8‘ codec can‘t decode byte 0xb4 in position 100:
- java毕业设计青少年公共卫生教育平台源码+lw文档+mybatis+系统+mysql数据库+调试
- CF刷题(01)——难度1600
- zabbix监控僵尸进程
- Python常用数据类型
- (二)绘图:五角星2.2-----turtle库画笔抬起、放下、粗细、颜色
- photoshop-反相调整颜色
- 我的世界1.8.9无需正版的服务器,我的世界1.8.9正式版