当前位置: 首页 > news >正文

数据库三大范式、Union和Union all的区别

数据库三大范式

  1. 什么是范式
  • 范式就是我们在设置数据库的表时,一些共同需要遵守的规范
  • 掌握这些设计时的范式,可以让我们在项目之初,设计库的表结构更加合理和优雅
  1. 三大范式之间的关系
  • 三大范式之间,是逐级递进的关系,也就是说后一个范式是在前一个范式的基础上推行。(这三者之间不能颠倒,后者都是建立在前者之上的,顺序不能颠倒。)
  1. 什么是第一范式
  • 表库设计时,主要是为了确保原子性,也就是存储的数据具有不可再分性。
注意:这里的原子性不等同于MySQL特点中的原子性

MySQL特性之原子性

  • 指事务是操作数据库的基本单位,要么全部执行成功,要么全部失败回滚
  • 这样做确保了数据库在任何情况下都能保持一致的状态,不会出现中间数据

第一范式的原子性

  • 指一个字段不可再分割,其中不能包含其他更小的数据单元。也就是说,一个字段的数据不能再被进一步分解为更小的数据单元
    举例:
+----------------------+--------+-------+
| student              | course | score |
+----------------------+--------+-------+
| 张三,男,185cm      | 语文   |    95 |
| 李四,男,185cm      | 数学   |   100 |
| 王五,男,185cm      | 英语   |    88 |
| 赵六,女,170cm      | 语文   |    99 |
| 钱七,女,170cm      | 数学   |    90 |
+----------------------+--------+-------+

按照第一范式的要求 : 每个字段不可在分割,应为下表所示

+--------------+-------------+----------------+--------+-------+
| student_name | student_sex | student_height | course | score |
+--------------+-------------+----------------+--------+-------+
| 张三         | 男          | 185cm          | 语文   |    95 |
| 李四         | 男          | 185cm          | 数学   |   100 |
| 王五         | 男          | 185cm          | 英语   |    88 |
| 赵六         | 女          | 170cm          | 语文   |    99 |
| 钱七         | 女          | 170cm          | 数学   |    90 |
+--------------+-------------+----------------+--------+-------+

第一范式(1NF)小结

  • 第一范式,我们通常也叫 1NF
  • 第一范式要求我们必须遵守原子性,即数据库表的每一列都是不可分割,每列的值具有原子性,不可再分割,每个字段的值都只能是单一值。
  1. 什么是第二范式
  • 首先第二范式是在满足第一范式的基础上
  • 其次第二范式要求表中的所有列,其数据依赖于主键。即一张表只存储同一类型的数据,不能有任何一列数据与主键没有关系
+--------------+-------------+----------------+
id| student_name | student_sex | student_height | 
+--------------+-------------+----------------+
1| 张三         | 男          | 185cm          |
2| 李四         | 男          | 185cm          |
3| 王五         | 男          | 185cm          |
4| 赵六         | 女          | 170cm          |
5| 钱七         | 女          | 170cm          |
+--------------+-------------+----------------+
+-----------+-------------+
| course_id | course_name |
+-----------+-------------+
|         1 | 语文        |
|         2 | 数学        |
|         3 | 英语        |
+-----------+-------------+
+----------+------------+-----------+-------+
| id | student_id | course_id | score |
+----------+------------+-----------+-------+
|        1 |          1 |         1 |    95 |
|        2 |          1 |         2 |   100 |
|        3 |          1 |         3 |    88 |
|        4 |          2 |         1 |    99 |
|        5 |          2 |         2 |    90 |
+----------+------------+-----------+-------+

第二范式(2NF)小结

  • 第二范式,我们通常也叫 2NF
    ○ 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的
    ○ 满足第二范式(2NF)必须先满足第一范式(1NF)
  • 第一范式要求我们必须遵守原子性
  • 第二范式要求表中的所有列,其数据依赖于主键
    ○ 即一张表只存储同一类型的数据,不能有任何一列数据与主键没有关系
    ■ 如果表是单主键,那么主键以外的列必须完全依赖于主键,其它列需要跟主键有关系
    ■ 如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分
  1. 什么是第三范式
  • 首先第三范式是在满足第二范式的基础上
  • 其次第三范式要求表中每一列数据不能与主键之外的字段有直接关系
    ○ 表中的非主键列必须和主键直接相关而不能间接相关
    ○ 非主键列之间不能相关依赖,不存在传递依赖
+------------+--------+------+--------+--------------+--------------+
| student_id | name   | sex  | height | department   | dean         |
+------------+--------+------+--------+--------------+--------------+
|          1 | 张三   | 男   | 185cm  | 计算机系     | 老大     |
|          2 | 李四   | 女   | 170cm  | 金融系       | 老二     |
|          3 | 王五   | 女   | 170cm  | 金融系       | 三弟     |
+------------+--------+------+--------+--------------+--------------+
+------------+--------+------+--------+---------------+
| student_id | name   | sex  | height | department_id |
+------------+--------+------+--------+---------------+
|          1 | 张三   | 男   | 185cm  |             1 |
|          2 | 李四   | 女   | 170cm  |             2 |
+------------+--------+------+--------+---------------+
+---------------+-----------------+-----------------+
| department_id | department_name | department_dean |
+---------------+-----------------+-----------------+
|             1 | 计算机系        | 老大        |
|             2 | 金融系          | 老二        |
+---------------+-----------------+-----------------+

第三范式(3NF)小结

  • 第三范式,我们通常也叫 3NF
    ○ 第三范式(3NF)是在第二范式(2NF)的基础上建立起来的
    ○ 满足第三范式(3NF)必须先满足第二范式(2NF)
  • 第一范式要求我们必须遵守原子性
  • 第二范式要求表中的所有列,其数据依赖于主键
    ○ 即一张表只存储同一类型的数据,不能有任何一列数据与主键没有关系
    ■ 如果表是单主键,那么主键以外的列必须完全依赖于主键,其它列需要跟主键有关系
    ■ 如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分
  • 第三范式要求表中每一列数据不能与主键之外的字段有直接关系
    ○ 表中的非主键列必须和主键直接相关而不能间接相关
    ○ 非主键列之间不能相关依赖,不存在传递依赖

union和union all 的区别

  • 在 SQL 中,UNION和UNION ALL都是用于合并多个SELECT语句的结果集的操作符,但二者的核心区别在于是否去除重复记录以及由此带来的性能差异。

1. 核心区别:是否去重

  • UNION:会自动去除合并后结果集中的重复行(即完全相同的记录)。
    为了实现去重,UNION会对结果集进行排序和比对,这会消耗额外的计算资源。
  • UNION ALL:直接合并所有结果集,保留所有记录(包括重复行),不会进行去重操作。
    由于无需处理去重,UNION ALL的执行效率通常远高于UNION。

2. 前提条件(两者共通) 使用UNION或UNION ALL时,需保证多个SELECT语句满足以下条件:

  • 返回的列数必须相同;
  • 对应位置的列数据类型必须兼容(无需完全一致,但需可隐式转换)。

示例说明

假设有两个表table1和table2,数据如下:

  • table1:(1, 'a')、(2, 'b')
  • table2:(2, 'b')、(3, 'c')
    使用UNION:
SELECT * FROM table1
UNION
SELECT * FROM table2;

结果(去重后):

(1, 'a')、(2, 'b')、(3, 'c')
使用UNION ALL:

SELECT * FROM table1
UNION ALL
SELECT * FROM table2;

结果(保留重复):

(1, 'a')、(2, 'b')、(2, 'b')、(3, 'c')
总结

  • 若需合并结果并去除重复,用UNION(但性能较低);
  • 若确定无重复记录,或允许保留重复,优先用UNION ALL(性能更优)。
http://www.fuzeviewer.com/news/334/

相关文章:

  • 用gdb的动态视角看ret2text的实现
  • 1027随笔
  • ask_skill
  • SVN 主分支合并之通过主分支合并子分支执行流程
  • 现代c++编程体验2
  • 化繁为简:解密国标GB28181算法算力平台EasyGBS如何以兼容性与易用性赋能安防集成
  • 计算机毕业设计springboot音乐畅听系统 基于Spring Boot框架的智能音乐播放系统编写 Spring Boot驱动的音乐在线欣赏平台构建
  • vue2 封装组件使用 v-mode【el-radio,el-input】
  • P11993 [JOIST 2025] 迁移计划 题解
  • ERP和CRM、SRM、MES之间的关系,怎么理解?
  • 2025年市面上氟碳铝单板品牌、市场氟碳铝单板公司、国内氟碳铝单板生产厂家、2025年氟碳铝单板品牌、口碑好的氟碳铝单板产品综合评测
  • 扩展欧几里德算法
  • 嵌入式基础--第七周作业--OLED显示
  • Luogu P3237 [HNOI2014] 米特运输 题解 [ 蓝 ] [ 树形 DP ] [ 哈希 ]
  • 各个版本的sqlite-jdbc jar下载链接
  • echart - f
  • BongoCat日志搜索程序:正则表达式与高级筛选
  • c# 使用 jwt
  • macro出pin
  • 读书笔记:告别数据冗余!Oracle引用分区让父子表管理如此简单
  • 2025 年 10 月绕包电缆头,熔接电缆头,预制电缆头,冷缩管电缆头厂家最新推荐,产能、专利、环保三维数据透视
  • 2025年浅拾兰花双萃致臻精华油:从成分与技术维度解析其护肤效能
  • 路沿石加工设备厂家有哪些?2025石材机械十大品牌
  • 2025年10月重庆装饰装修公司推荐排行榜:十家企业综合对比与实用指南
  • 工业水泵控制移动终端APP需求于开发
  • 《CSS盒子模型》笔记总结 - 教程
  • MCS-51中断系统
  • 触控感应芯片电容式触摸IC 4通道触控方案VK36N4D
  • 测试领域,苏州永创-STD2000X-半导体分立器件电参数测试仪系统能测试哪些元器件和参数 - FORCREAT
  • 2025年AI IDE的深入对比与推荐排行:从好用到生成效果的转变