数据库范式以及drop、delete 与 truncate区别

news2024/10/6 4:03:49

数据库范式了解吗?

 我们从一个数据库设计的初始化阶段开始, 但是并没有规范化设计的背景知识

而要求我们设计一个员工管理系统, 可能得到表结构如下:

数据异常

首先这个表有如下问题:

1. 数据冗余: 我们可以看到部门名称相同时, 部门地址也是重复的  因此会重复存储数据

2. 插入异常: 因为这是一个以员工为对象的表,当我们想新建一个部门时,如果这个部门还没有员工, 就会导致无法维护这个表的信息

3. 更新异常: 如果我们需要修改部门信息, 必须先找到员工再从员工找到对应部门, 如果遗漏员工则会导致数据更新遗漏

4. 删除异常: 假设财政部只有两个员工, 如果将两个员工全部删除, 会导致财政部也随之消失

所有问题的来源只有一个: 数据冗余

规范化

因此我们引入规范化解决数据冗余问题 

第一范式

 表中电话字段存在可再分属性, 根据业务中的要求不满足原子属性这个概念

同时并未指定表的主键 , 我们做出如下修改令表满足第一范式:

 我们假设部门名称+姓名  是不重复的   作为复合主键

并将电话中的两个属性拆分成工作电话和个人电话

注意:以下两个图都满足第一范式要求: 姓名=姓氏+名字 并不一定是可再分,需要根据业务确定原子属性定义

第二范式

接下来我们介绍第二范式:

    非主键字段(部门地址等)必须完全依赖于主键字段(部门名称 + 姓名),  那么要想满足第二范式则必须保证所有非主键字段都要靠整个主键字段推出   即部门名称 + 姓名 ==> 部门地址

但我们发现只需要部门名称就可以推出部门地址  部门名称==>部门地址,

即不符合第二范式的要求

我们将部门单独可以推出的信息摘出, 单独作为一个小表

 

并使用部门编号和工号作为两个表的唯一主键, 方便修改 

第三范式

接下来引入第三范式:

 

我们可以看到 工号 作为主键, 可以推出职位, 当然也可以推出月薪

但是职位作为非主键  却也可以推出月薪  工号=>职位=>月薪  因此 我们称这个表存在传递依赖

 我们再把传递依赖部分摘出, 当然也加入一个职位编号作为新表的主键

上表以满足第三范式的要求

反规范化

有时查询结果需要跨库查询,连接查询时 可能会导致降低性能

因此我们也会进行反规范化来直接返回我需要的数据 通过冗余空间的方式获得时间的提升

drop、delete 与 truncate 区别?

数据库基础知识总结 | JavaGuide(Java面试 + 学习指南)

用法不同

  • drop(丢弃数据): drop table 表名,直接将表都删除掉,在删除表的时候使用。
  • truncate(清空数据) : truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长 id 又从 1 开始,在清空表中数据的时候使用。
  • delete(删除数据) : delete from 表名 where 列名=值,删除某一行的数据,如果不加 where 子句和truncate table 表名作用类似。

truncate 和不带 where子句的 delete、以及 drop 都会删除表内的数据,但是 truncatedelete 只删除数据不删除表的结构(定义),执行 drop 语句,此表的结构也会删除,也就是执行drop 之后对应的表不复存在

属于不同的数据库语言

truncatedrop 属于 DDL(数据定义语言)语句,操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。而 delete 语句是 DML (数据库操作语言)语句,这个操作会放到 rollback segment 中,事务提交之后才生效。

DML 语句和 DDL 语句区别:

  • DML 是数据库操作语言(Data Manipulation Language)的缩写,是指对数据库中表记录的操作,主要包括表记录的插入、更新、删除和查询,是开发人员日常使用最频繁的操作。
  • DDL (Data Definition Language)是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改的操作语言。它和 DML 语言的最大区别是 DML 只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。

另外,由于select不会对表进行破坏,所以有的地方也会把select单独区分开叫做数据库查询语言 DQL(Data Query Language)。

执行速度不同

一般来说:drop > truncate > delete(这个我没有实际测试过)。

  • delete命令执行的时候会产生数据库的binlog日志,而日志记录是需要消耗时间的,但是也有个好处方便数据回滚恢复。
  • truncate命令执行的时候不会产生数据库日志,因此比delete要快。除此之外,还会把表的自增值重置和索引恢复到初始大小等。
  • drop命令会把表占用的空间全部释放掉。

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

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

相关文章

【UE5】给模型指定面添加自定义材质

实现步骤 1. 首先我们向UE中导入一个简单的模型,可以看到目前该模型的材质插槽只有一个,当我们修改材质时会使得模型整体的材质全部改变,如果我们只想改变模型的某些面的材质就需要继续做后续操作。 2. 选择建模模式 3. 在模式工具栏中点击…

手机改图片文字软件有哪些?简单分享这几款

手机改图片文字软件有哪些?现在有很多手机APP可以帮助我们实现图片中文字的提取和修改,但是其中一些工具可能会缺乏一些必要的功能,或者不太适合某些特定的用途。在这篇文章中,我们将介绍几款非常实用的手机改图片文字软件。 第一…

复杂性管理与重复性管理

在前面我们说到了所谓的"计算机科学", 重点在于如何控制大型系统的复杂性. 复杂性本身当然也是个很大的话题, 而一种常见的复杂性的来源则是重复性, 即是由不断的重复所带来的复杂性. 重复性带来的复杂性常被人忽视, 大概是因为一开始它是不起眼的, 而当人们意识到它…

软技能的重要性:在面试中展示团队合作与沟通能力

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

2023年下半年西安/广州/深圳软考(中/高级)开班啦!!!

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成项…

​LeetCode解法汇总1448. 统计二叉树中好节点的数目

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一棵…

初识Java 3-1 控制流

目录 if-else语句 迭代语句 for循环 for-in语法 return break和continue 标签机制 switch 本笔记参考自: 《On Java 中文版》 Java不允许将数字作为布尔值使用,若需要在一些条件语句中使用一个非布尔值,比如if(a),那么就需…

美团北极星榜单,服务零售的医美新样本

事实证明,任何时候,人们对美的追求都是刚需,只是有时候被压抑了。 德勤中国的《中国医美行业2023年度洞悉报告》(以下简称“报告”)显示,中国医美市场规模预计在2023年超过2000亿元,实现20%增速…

残差网络、Dropout正则化、Batch Normalization浅了解

残差网络: 为什么需要残差网络: 残差网络的目的是为了解决深度神经网络在训练过程中遇到的退化问题,即随着网络层数的增加,训练集的误差反而增大,而不是过拟合。残差网络的优点有以下几点: 残差网络可以…

上门服务系统|上门服务软件开发|上门服务改善生活质量的便捷之选

随着现代生活的快节奏和社交距离的需求,我们越来越渴望能够以更便捷、高效的方式获得我们所需的服务。为了满足这一需求,我们公司开发了一款创新的上门服务系统,旨在将便利与质量相结合,为您提供无与伦比的体验。 无论您是忙碌的白…

惠普NS1020激光打印机碳粉警告提示及添加碳粉方法

本文也适用于惠普NS1020、1020c 和 1020w 系列打印机。 通过碳粉量指示灯检查碳粉量。 如果碳粉量是满的或指示器显示 1,可选择添加一个碳粉或者忽略不添加。如果碳粉量指示灯显示 2或 2 和碳粉量警告感叹号图标 ,则表示碳粉量不足或严重不足&#xff0…

ORACEL 账户被锁定、无监听

现象1:oracle数据库账号被锁定 OA页面情况:OA系统可以正常登录,但是表单查不出数据 PL SQL 连接情况:有明确的提示,oracle账号被锁。 Tomcat控制台情况:有明确提示账号被锁 解决办法 在命令行中输入就可…

批量身份证图片转Excel,核验真伪,保留头像,只需一款软件

你是否曾经遇到过需要将大量员工的身份证图片转化为Excel表格的情况?这种情况可能会让你感到无从下手。但是,现在有了金鸣表格文字识别电脑客户端,一切都将变得轻松便捷。 首先,你只需要前往金鸣识别官网下载并安装金鸣表格文字识…

企业网络设备监控工具

如今,组织在运营业务方面面临着日益激烈的竞争和日益复杂的问题,在这种情况下,拥有以最高效率运行的网络基础设施不再是奢侈品。相反,对于任何希望在各自领域成为领跑者的组织来说,这是必要的。网络基础设施中每个网络…

python爬虫14:总结

python爬虫14:总结 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好…

查看edge浏览器插件的安装位置

C:\Users\zhang\AppData\Local\Microsoft\Edge\User Data\Default\Extensions 这是我的目录,把中间的的替换成你的电脑用户名就可以了 你也可以先输入目录的部分名称,下拉找对应的目录

docker部署前端项目保姆级教程

本地启动docker(有不会启动的吗?下载docker(小海豚)双击起来就行) 准备阿里云账号(免费) 没有就去注册一个,记住密码后面要用到 官网地址:阿里云登录 - 欢迎登录阿里云…

基于OpenCV+LPR模型端对端智能车牌识别——深度学习和目标检测算法应用(含Python+Andriod全部工程源码)+CCPD数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境OpenCV环境Android环境1. 开发软件和开发包2. JDK设置3. NDK设置 模块实现1. 数据预处理2. 模型训练1)训练级联分类器2)训练无分割车牌字符识别模型 3. APP构建1)导入OpenCV库…

SAP_ABAP_OLE_EXCEL批导案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977 一、OLE_EXCEL批导 1.1 下载按钮 1.2 选择EXCEL上传,解析EXCLE数据, Call屏幕。 1.3 实现效果 1.4…

git学习笔记 | 版本管理 - 分支管理 - 常见场景

文章目录 git学习笔记Git是什么仓库常见的命令commit 备注规范在文件下设置git忽略文件 .gitignore 版本管理git log | git reflog 查看提交日志/历史版本版本穿梭 git resetgit reset HEAD <file> git checkout -- fileName 丢弃工作区的修改git revertGit恢复之前版本的…