MySQL的知识巩固

news2024/11/14 9:20:06

目录

三大范式

第一范式:

第二范式:

第三范式:

巴斯-科德范式(BCNF):

反范式:

MySQL的工作原理


三大范式

第一范式:

一个字段只表明一个事情

优点:

  1. 数据一致性
    在1NF中,由于每个属性都是原子的,因此避免了在一个属性中存储多个值的情况。这有助于确保数据的一致性和准确性,因为每个值都是清晰定义的,并且没有混淆。

  2. 减少数据冗余的潜力
    虽然1NF本身并不直接消除数据冗余,但它为进一步的规范化提供了基础。通过将属性拆分为更小的、原子的部分,可以更容易地识别并消除冗余数据。

  3. 简化数据操作
    在1NF中,每个属性都包含单一的值,这使得数据插入、更新和删除操作更加简单和直接。避免了在一个属性中处理多个值所带来的复杂性。

  4. 提高查询效率
    虽然1NF本身并不直接提高查询效率,但通过将数据组织成更小的、更清晰的单元,可以更容易地构建高效的查询。此外,1NF还有助于避免在查询过程中进行不必要的数据拆分和转换。

  5. 为高级范式打下基础
    1NF是数据库规范化的起点,它为后续的第二范式(2NF)、第三范式(3NF)和BCNF(Boyce-Codd Normal Form)等高级范式提供了基础。通过满足1NF的要求,可以更容易地进一步规范化数据库,以消除部分依赖、传递依赖和冗余数据。

缺点:

  1. 数据冗余
    在1NF中,数据冗余是可能的。因为只要每个属性都是原子的,表中就可以有重复的数据。这种冗余可能导致存储空间的浪费,并增加数据更新和维护的复杂性。

  2. 更新异常
    由于数据冗余,当需要更新某个数据时,可能需要在多个地方进行修改。这不仅增加了操作的复杂性,还可能导致数据不一致的风险。

  3. 插入异常
    如果表中有某些属性是可选的,但在某些情况下这些属性对于完整记录是必要的,那么在1NF中可能会遇到插入问题。例如,如果有一个包含学生和其选修课程的表,而学生可能选修多门课程,那么在1NF中,为了插入一个学生的部分课程信息,可能需要插入一个不完整的记录。

  4. 删除异常
    与插入异常类似,删除数据时也可能导致问题。如果删除了一个包含重要信息的记录,那么与该记录相关的其他信息也可能被丢失,即使这些信息在其他上下文中仍然是有用的。

第二范式:

建立在第一范式的基础上。

若是数据冗余了不好区分所以加上主键可以进行区分

优点

  1. 消除部分依赖
    第二范式要求数据库表中的每个非主属性都完全依赖于主键,而不是仅仅依赖于主键的一部分。这有助于消除部分依赖,即某个属性只依赖于主键的一部分的情况。通过消除部分依赖,可以减少数据冗余和更新异常。

  2. 提高数据一致性
    当非主属性完全依赖于主键时,可以确保数据的一致性。因为每个非主属性都与主键有直接的联系,所以当主键的值发生变化时,可以更容易地更新相关的非主属性,从而保持数据的一致性。

  3. 减少数据冗余
    通过消除部分依赖,第二范式有助于减少数据冗余。例如,如果有一个学生表,其中包含了学生的学号、姓名、系名和系主任等信息,那么按照第二范式的要求,可以将系名和系主任等信息单独放在一个系表中,从而避免在学生表中重复存储这些信息。

  4. 简化数据操作
    在第二范式中,由于每个非主属性都完全依赖于主键,因此数据插入、更新和删除操作更加简单和直接。避免了在一个表中处理多个相关属性所带来的复杂性。

缺点

  1. 可能导致查询复杂化
    当数据被拆分成多个表以满足第二范式的要求时,可能会导致查询操作变得更加复杂。因为需要执行多个表之间的连接操作来获取所需的数据。这可能会增加查询的响应时间和计算成本。

  2. 增加表的数量
    为了满足第二范式的要求,可能需要将原始表拆分成多个表。这会增加数据库中表的数量,从而增加数据库管理的复杂性。

  3. 可能影响性能
    虽然第二范式有助于减少数据冗余和提高数据一致性,但过多的表连接操作可能会影响数据库的性能。特别是在处理大量数据时,表连接操作可能会成为性能瓶颈。

第三范式:

第三范式就是在第二范式的基础上进行分表比如说把部门建成一个从表让从表的信息和主表进行间接连接

优点

  1. 减少数据冗余
    第三范式要求非主键字段必须直接依赖于主键,不能存在传递依赖。这意味着每个非主键字段都直接与主键相关联,避免了通过其他非主键字段进行间接关联的情况。这有助于减少数据冗余,节省存储空间。

  2. 提高数据一致性和完整性
    由于第三范式消除了传递依赖,确保了每个非主键字段都直接依赖于主键,因此当主键的值发生变化时,可以更容易地更新相关的非主键字段,从而保持数据的一致性和完整性。此外,第三范式还有助于避免数据插入异常、删除异常和更新异常等问题。

  3. 简化数据维护
    在第三范式中,数据被分解为更小的、更清晰的单元,这使得数据的维护变得更加简单和直接。当需要对数据进行修改、更新或优化时,可以更容易地定位到相关的表和字段。

  4. 提高查询效率
    虽然第三范式可能导致查询时需要执行更多的表连接操作,但在某些情况下,通过减少数据冗余和避免不必要的字段,可以提高查询效率。特别是当查询涉及大量数据时,减少冗余数据可以显著减少查询时间和计算成本。

缺点

  1. 可能导致查询复杂化
    为了满足第三范式的要求,可能需要将原始表拆分成多个表,并通过外键进行关联。这可能导致查询时需要执行更多的表连接操作,增加了查询的复杂性。特别是在处理复杂查询时,可能需要编写更复杂的SQL语句或使用更高级的查询技术。

  2. 增加表的数量
    与第二范式类似,第三范式也可能导致数据库中表的数量增加。这增加了数据库管理的复杂性,特别是在需要频繁进行表连接操作的情况下。

  3. 可能影响性能
    虽然第三范式有助于提高数据的一致性和完整性,但过多的表连接操作可能会影响数据库的性能。特别是在处理大量数据时,表连接操作可能会成为性能瓶颈。此外,为了维护外键约束和确保数据的一致性,可能需要额外的计算和存储资源。

  4. 过度规范化可能导致不实用
    在某些业务场景中,过度规范化可能不符合实际需求。例如,在数据仓库设计中,可能会故意违反第三范式,以便更快地进行数据查询和分析。因此,在实际应用中,需要在规范化和性能之间进行权衡。

巴斯-科德范式(BCNF):

建立在第三范式的基础上, 满足BCNF的关键在于确保关系模式(即表)中的每个非主属性都完全依赖于该关系模式的某个候选键,且不存在部分依赖和传递依赖,可以减少数据冗余和更新异常,但也可能导致查询效率下降。 

部分依赖:比如说:C可以通过AB得到,并且C也可以仅通过A得到,仅通过B得到, 那么就说C部分依赖AB。

完全依赖:比如说:C可以通过AB得到,并且C不可以仅通过A得到,也不可以仅通过B得到, 那么就说C完全依赖AB。

传递依赖:比如说:B可以通过A得到,C可以通过B得到,那么就称C传递依赖A。

反范式:

两个相关连的表把主表常用的一个字段跟主键一起放到外表上这样可以方便查询

优点

  1. 提高查询性能
    • 反范式通过减少查询时的表关联和数据查找步骤,可以显著提高查询性能。
    • 特别是针对经常需要进行联结操作的表,反范式可以避免频繁的联结操作,降低数据库的负载。
  2. 减少数据关联
    • 在正常的范式化数据库中,数据被拆分成多个表,表之间可能存在复杂的关联。
    • 反范式通过数据冗余来消除这些关联,使得读取数据更加快速和简单,减少了错误发生的机会。
  3. 简化查询语句
    • 使用反范式技术,可以大大简化复杂的查询语句。
    • 数据冗余使得查询只需在单个表中进行,不再需要联结多个表,提高了查询语句的可读性和易用性。

缺点

  1. 数据冗余
    • 反范式增加了数据冗余,这可能导致数据的不一致性。
    • 当修改了冗余数据的一份副本而忘记更新其他副本时,数据会出现不一致的情况。
  2. 存储空间浪费
    • 由于冗余数据的存在,反范式会导致存储空间的浪费。
    • 每个冗余数据副本都需要占用额外的存储空间,当数据量大时,可能造成严重的空间浪费。
  3. 更新操作复杂
    • 反范式增加了数据冗余,因此当需要更新数据时,必须同时更新所有相关的冗余数据。
    • 这增加了更新操作的复杂度,并且容易出错。
  4. 数据删除风险
    • 表格内的冗余数据较多时,在删除某些数据时,可能会造成表中一些有用的信息丢失。

MySQL的工作原理

当客户端通过链路成功连接到MySQL服务器时,MySQL的连接管理模块会负责处理这一连接请求,允许客户端通过默认的3306端口进行通信,并且默认支持最多1000个并发连接。一旦连接建立,MySQL服务器便以服务的方式运行起来。

随后,客户端发送的SQL语句会被MySQL的分析器接收,分析器会对这些语句进行严格的语法检查。如果语句存在语法错误,分析器会立即将错误信息反馈给客户端。若语句语法正确,分析器会进一步生成执行计划,该计划详细描述了如何执行这条SQL语句。在这个过程中,MySQL会考虑SQL语句的结构特点,比如连表查询中的括号优先级,以及是否可以利用索引来加速查询。通过EXPLAIN命令,我们可以直观地查看这个执行计划。

在执行SQL语句之前,MySQL还会进行权限检查,确保客户端拥有执行该语句的权限。如果权限不足,MySQL会返回相应的错误消息。

值得注意的是,在MySQL 8.0之前的版本中,如果执行的是查询语句,MySQL会先尝试从查询缓存中获取结果。然而,从MySQL 8.0开始,这个功能已经被移除,因为在实际应用中,查询缓存的效果并不理想。

接下来,执行器会根据执行计划来执行SQL语句。在执行过程中,MySQL会进行各种查询优化操作,以提高查询效率。这些优化操作可能包括选择合适的索引、调整查询顺序等。

最终,数据操作会涉及到底层的存储引擎。MySQL支持多种存储引擎,如InnoDB、MyISAM等,它们负责在磁盘上存储和检索数据。每个表的数据通常都存储在MySQL文件目录下的data目录中。

当SQL语句执行完毕后,执行结果会通过之前建立的连接被返回给客户端。这样,客户端就可以根据返回的结果进行后续处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2238958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

越野车TV 1.0.5337 | TV端越野赛车游戏,解锁无限金币

越野车TV是一款专为电视设计的越野赛车游戏,最初是安卓手机端的游戏,现已移植到TV端并兼容遥控器操作。这款游戏的特点是解锁了VIP,所有资源都可以免费使用。游戏采用3D横版卡通风格,提供真实的越野赛车体验。玩家可以在崎岖的赛道…

MySQL 迁移 dm

参考链接 此处为语雀内容卡片,点击链接查看:MySQL 5.7.27 迁移 DM 8 语雀 迁移前准备 以下中的命名,密码都是可修改的,这里给出的就只是一个例子 创建表空间 # 创建表空间名为 dbTest,路径为 Z:\fei\data\dm\dbT…

信息安全工程师(82)操作系统安全概述

一、操作系统安全的概念 操作系统安全是指操作系统在基本功能的基础上增加了安全机制与措施,从而满足安全策略要求,具有相应的安全功能,并符合特定的安全标准。在一定约束条件下,操作系统安全能够抵御常见的网络安全威胁&#xff…

从0开始学习Linux——文件管理

往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…

vue中调用全屏方法、 elementUI弹框在全屏模式下不出现问题、多级嵌套弹框蒙层遮挡问题等处理与实现方案

全屏模式下弹框不展示的原因是elementUI的弹框我们让他挂在body中了,而我们全屏的div盒子不是整个文档,这时候就找不到弹框了。 当我们把弹框改为插入到父元素上 这时候会出现蒙层盖住整个页面,什么也点不了的问题。 这是elementUI官方的一个…

特征检测与特征匹配方法笔记+代码分享

在一幅图像中,总能发现其独特的像素点,这些点可以被视为该图像的特征,我们称之为特征点。在计算机视觉领域中,基于特征点的图像特征匹配是一项至关重要的任务,因此,如何定义并识别一幅图像中的特征点显得尤…

补: 力扣145 : 二叉树的后序遍历

天才的回归 ---- 二叉树的后序遍历 描述: **给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 ** 示例: 解法:递归就不说了,看下遍历法,与先序和中序略有不同 简单来说注意两个点: 1&…

Centos8 安装 JDK / Python / MySQL / Redis / Nginx

安装 JDK 华为镜像 JDK 下载地址:https://repo.huaweicloud.com:8443/artifactory/java-local/jdk/ 这里安装 JDK8 为例: # 这里直接通过 wget 下载 wget https://repo.huaweicloud.com:8443/artifactory/java-local/jdk/8u202-b08/jdk-8u202-linux-x…

使用轻易云平台高效集成聚水潭与南网订单数据

高效实现聚水潭与南网供应商对接的数据集成方案 普通发货对接南网供应商配送通知接口 在现代数据集成项目中,如何高效、可靠地实现不同系统之间的数据对接是一个关键挑战。本文将聚焦于一个实际案例:将聚水潭平台的数据集成到南方电网商城平台&#xff…

【经验分享】一招解决VMware虚拟机存储空间越来越大的问题

【经验分享】一招解决VMware虚拟机硬盘空间越来越大的问题 前言一、解决办法二、补充说明 前言 在使用虚拟机过程中,会出现用着用着虚拟机硬盘占用空间越来越大的问题。即使删除了文件,依然会占用宿主机的硬盘空间。如果虚拟机一开始分配的硬盘空间过大…

使用Element UI实现一个拖拽图片上传,并可以Ctrl + V获取图片实现文件上传

要在 Element UI 的拖拽上传组件中实现 Ctrl V 图片上传功能,可以通过监听键盘事件来捕获粘贴操作,并将粘贴的图片数据上传到服务器。 版本V1,实现获取粘贴板中的文件 注意,本案例需要再你已经安装了Element UI并在项目中正确配…

Ascend Extension for PyTorch是个what?

1 Ascend Extension for PyTorch Ascend Extension for PyTorch 插件是基于昇腾的深度学习适配框架,使昇腾NPU可以支持PyTorch框架,为PyTorch框架的使用者提供昇腾AI处理器的超强算力。 项目源码地址请参见Ascend/Pytorch。 昇腾为基于昇腾处理器和软…

strtok_s详解,实现使用strtok_s分割字符串,并返回包含分割符的子串

1.strtok_s函数原型 strtok_s 是一个线程安全的字符串分割函数,它是 strtok 的一个变体,用于将字符串分割成一系列的标记(tokens)。与 strtok 不同,strtok_s 需要一个额外的参数来保存上下文信息,这样它就…

Docker--Docker是什么和对Docker的了解

Docker 的本质 Docker的本质是LXC(Linux容器)之类的增强版,它本身不是容器,而是容器的易用工具。 Docker通过虚拟化技术,将代码、依赖项和运行环境打包成一个容器,并利用隔离机制来使得容器之间互相独立、…

大数据新视界 -- 大数据大厂之 Impala 性能优化:优化数据加载的实战技巧(下)(16/30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【测试框架篇】单元测试框架pytest(3):用例执行参数详解

一、前言 上一篇内容介绍了用例编写的规则以及执行用例,执行用例时我们发现有些print输出内容,结果没有给我们展示,这是因为什么原因呢?接下来我们会针对这些问题进行阐述。 二、参数大全 我们可以在cmd中通过输入 pytest -h 或…

设计模式-七个基本原则之一-开闭原则 + SpringBoot案例

开闭原则:(SRP) 面向对象七个基本原则之一 对扩展开放:软件实体(类、模块、函数等)应该能够通过增加新功能来进行扩展。对修改关闭:一旦软件实体被开发完成,就不应该修改它的源代码。 要看实际场景,比如组内…

Android Room框架使用指南

Room框架使用指南 项目效果创建应用,配置Gradle1、在app Module的build.gradle配置kapt插件2、配置依赖:3、配置依赖包版本号创建实体类创建DAO1、DAO简介2、WordDao设计以及相关注解说明3、监听数据变化添加Room数据库1、Room数据库简介2、实现Room数据库实现存储库实现View…

前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)

文章目录 1. npm (Node Package Manager)2. Yarn (Yarn Package Manager)3. pnpm4. Bower5. Parcel总结 前端开发中常用的包管理器主要有以下几个: 1. npm (Node Package Manager) 简介: npm 是 Node.js 的默认包管理器,也是最广泛使用的包…

C++builder中的人工智能(23):在现代C++ Windows上轻松录制声音

在这篇文章中,我们将探讨如何在现代C Windows上轻松录制声音。声音以波形和数字形式存在,其音量随时间变化。在C Builder中,使用Windows设备进行录音非常简单。要录制声音,在多设备应用程序中,必须使用FMX.Media.hpp头…