数据库基础知识小结

news2024/11/14 15:02:23

数据库基础知识小结

什么是数据库,数据库管理员,数据库管理员,数据库系统?

数据库: 数据库(DataBase 简称 DB)就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。

数据库管理系统: 数据库管理系统(DataBase Management System 简称 DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。

数据库管理员: 数据库管理员(DataBase Administrator, 简称 DBA)负责全面管理和控制数据库系统。

数据库系统: 数据库系统(DataBase System,简称 DBS)通常由软件、数据库和数据管理员(DBA)组成。

什么是元组,码,候选码,主码,外码,主属性,非主属性?

  • 元组:元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。在二维表里,元组也称为行。
  • :码就是能唯一标识实体的属性,对应表中的
  • 候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
  • 主码: 主码也叫主键。主码是从候选码中选出来的。一个实体集中只能有一个主码,但可以有多个候选码。
  • 外码: 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
  • 主属性:候选码中出现过的属性称为主属性。比如工人表(工号,身份证号,姓名,性别,部门),显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
  • 非主属性:不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。

关系 – 表,行 – 行,属性 – 列

什么是 ER 图?

ER 图 全称是 Entity Relationship Diagram(实体联系图),提供了表示实体类型、属性和联系的方法。

ER 图由下面 3 个要素组成:

  • 实体:通常是现实世界的业务对象,当然使用一些逻辑对象也可以。比如对于一个校园管理系统,会涉及学生、教师、课程、班级等等实体。在 ER 图中,实体使用矩形框表示。
  • 属性:即某个实体拥有的属性,属性用来描述组成实体的要素,对于产品设计来说可以理解为字段。在 ER 图中,属性使用椭圆形表示。
  • 联系:即实体与实体之间的关系,在 ER 图中用菱形表示,这个关系不仅有业务关联关系,还能通过数字表示实体之间的数量对照关系。例如,一个班级会有多个学生就是一种实体间的联系。(一对多关系)

ER 图示例:学生选课

每个学生可以选若干门课程,同一门课程也可以被若干人选择,所以它们之间的关系是多对多(M: N)。另外,还有其他两种实体之间的关系是:1 对 1(1:1)、1 对多(1:N)。

在这里插入图片描述

讲讲数据库范式

数据库范式是用于规范化数据库设计的一组规则,旨在消除数据冗余、提高数据存储效率和数据完整性。

数据库范式有 3 种:

  • 1NF(第一范式):属性不可再分。
  • 2NF(第二范式):1NF 的基础之上,消除了非主属性对于码的部分函数依赖。
  • 3NF(第三范式):3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖。

重要概念详解:

函数依赖(Functional Dependency):

函数依赖是指在一个关系(表)中,一个或多个属性的值可以唯一确定其他属性的值。在关系中,一个属性(或属性组合)称为决定因素(Determinant),其他属性称为依赖因素(Dependent)。如果在关系 R 中,X 是决定因素,Y 是依赖因素,并且对于任意两个元组 t1 和 t2,如果 t1 的 X 值相等于 t2 的 X 值,则它们的 Y 值也必须相等,那么我们可以说 Y 函数依赖于 X,用符号表示为 X -> Y。

部分函数依赖(Partial Functional Dependency):

部分函数依赖是指在一个关系中,一个属性(或属性组合)依赖于另一个属性(或属性组合),但是该属性(或属性组合)只依赖于决定因素的一部分而不是全部。换句话说,存在非主属性依赖于候选码的一部分。

例如,考虑一个关系 R (学号, 姓名, 班级, 年龄),假设学号是主属性(候选码),姓名和班级依赖于学号,但是年龄只依赖于班级,而不是学号,那么年龄对于班级是部分函数依赖。

完全函数依赖(Full Functional Dependency):

完全函数依赖是指在一个关系中,一个属性(或属性组合)依赖于另一个属性(或属性组合),且该属性(或属性组合)对于决定因素是完全依赖的,没有部分依赖。换句话说,所有的非主属性都完全依赖于候选码。

继续上述例子,如果年龄只依赖于学号,而不依赖于班级,那么年龄对于学号就是完全函数依赖。

传递函数依赖(Transitive Functional Dependency):

传递函数依赖是指在一个关系中,如果 X -> Y 且 Y -> Z,则可以推导出 X -> Z。换句话说,如果存在函数依赖 X -> Y 和 Y -> Z,那么就存在传递函数依赖 X -> Z。

例如,考虑一个关系 R (学号, 姓名, 班级, 学校),假设学号决定了姓名,姓名决定了班级,那么就存在传递函数依赖 学号 -> 班级。

主键和外键有什么区别?

  • 主键(主码):主键用于唯一标识一个元组,不能有重复,不允许为空。一个表只能有一个主键。
  • 外键(外码):外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键。

为什么不推荐使用外键与级联?

阿里巴巴开发手册:

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

说明: 以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群; 级联更新是强阻塞,存在数据库更新风暴的风险; 外键影响数据库的插入速度

原因:

  1. 数据库性能:使用外键和级联操作可能会导致数据库性能下降。级联操作会引起多表之间的复杂关联和更新操作,可能增加数据库的负担,特别是在大规模数据库和高并发情况下。
  2. 数据库复杂性:外键和级联操作会增加数据库的复杂性。当数据库结构涉及多个表之间的关联关系时,外键和级联操作可能增加数据管理和维护的复杂性,不适用于简单的数据库结构。
  3. 数据库死锁:使用级联操作时,可能会引发数据库死锁问题。如果多个表之间存在循环级联更新或删除操作,可能导致死锁情况,影响数据库的正常运行。
  4. 数据一致性:级联操作可能导致数据一致性问题。当使用级联操作时,可能会导致意外删除或更新关联的数据,从而影响数据库的数据一致性。
  5. 增加了复杂性(每次做 DELETE 或者 UPDATE 都必须考虑外键约束)
  6. 对分库分表不友好(因为分库分表下外键是无法生效的)

使用外键的好处:

  • 数据完整性:外键可以确保数据库中的数据完整性。通过在一个表中引用另一个表的主键作为外键,可以确保两个表之间的关联关系是有效的。这样可以防止数据不一致和无效数据的插入,保持数据库的一致性。
  • 数据一致性:外键可以帮助维护数据库中的数据一致性。当对主表的数据进行更新或删除操作时,有了外键约束,数据库会自动检查关联的从表是否有相应的数据,并执行相应的操作,避免了数据的不一致性。
  • 数据查询和连接:使用外键可以更方便地进行数据查询和连接操作。通过外键,可以简化多表之间的数据查询,避免了复杂的嵌套查询和多表连接操作,提高查询效率。
  • 数据库性能:外键可以提高数据库的性能。通过外键,数据库优化器可以更好地理解表之间的关联关系,从而优化查询计划,提高查询效率。
  • 索引使用:外键通常会自动创建索引,提高数据查询的速度。通过在外键字段上创建索引,可以加速表之间的关联查询。
  • 约束管理:使用外键可以更好地管理数据库中的约束。通过外键,可以明确定义表之间的关系,简化数据管理,减少数据错误和异常情况的发生

什么是存储过程?

存储过程(Stored Procedure)是一种预先编译的数据库操作代码块,它包含了一系列的 SQL 语句和逻辑,可以在数据库中被保存并多次重复调用。

特点:

  1. 预编译:存储过程在第一次被创建时会被编译,而不是在每次调用时解析和编译。这样可以提高存储过程的执行效率。
  2. 可重用:存储过程可以在数据库中被保存并多次调用,提供了代码的复用性,减少了重复编写相同功能的SQL语句。
  3. 安全性:存储过程可以定义权限,只有具有足够权限的用户才能调用和执行存储过程,增加了数据库的安全性。
  4. 事务控制:存储过程可以包含多个SQL语句,可以在一个事务中执行,保证数据库操作的原子性和一致性。
  5. 提高性能:存储过程的预编译和缓存机制可以减少数据库服务器的负载,提高数据库的性能。

使用场景:

  1. 复杂业务逻辑:存储过程适用于包含复杂业务逻辑的操作,可以将复杂的数据处理和计算交给数据库服务器处理,减轻应用程序的负担。
  2. 数据校验和约束:存储过程可以用于数据校验和约束的实现,确保数据的有效性和完整性。
  3. 数据库维护:存储过程可以用于数据库维护和数据迁移操作,提供数据库的管理和维护能力。
  4. 批处理操作:存储过程适用于批量数据处理和操作,可以提高数据处理的效率。

drop、delete 与 truncate 区别?

用法不同

  • DROP 用于删除整个表,包括结构和数据,是最彻底的删除操作。
  • DELETE 用于删除表中的数据,但保留表的结构,可以指定条件删除部分数据。(可以回滚事务和记录日志)
  • TRUNCATE 用于删除表中的数据,但保留表的结构,删除整个表的数据,效率比 DELETE 高。

属于不同的数据库语言

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

DML 语句和 DDL 语句区别:

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

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

执行速度不同

drop > truncate > delete

原因:

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

总结:

  • 如果需要删除整个表的数据并且不需要记录日志和触发触发器,TRUNCATE 是最快的选择。
  • 如果需要按条件逐行删除数据并且需要记录日志和触发触发器,使用 DELETE
  • 如果需要彻底删除整个表及其数据,可以使用 DROP

数据库设计通常分为哪几步?

  1. 需求分析 : 分析用户的需求,包括数据、功能和性能需求。
  2. 概念结构设计 : 主要采用 E-R 模型进行设计,包括画 E-R 图。
  3. 逻辑结构设计 : 通过将 E-R 图转换成表,实现从 E-R 模型到关系模型的转换。
  4. 物理结构设计 : 主要是为所设计的数据库选择合适的存储结构和存取路径。
  5. 数据库实施 : 包括编程、测试和试运行。
  6. 数据库的运行和维护 : 系统的运行与数据库的日常维护。

讲讲结构化数据和半结构化数据

结构化数据和半结构化数据是在计算机科学领域中描述数据组织和表示方式的概念。它们用于区分不同类型的数据格式和数据存储方式。以下是对结构化数据和半结构化数据的解释:

1. 结构化数据: 结构化数据是按照严格的数据模型和固定的数据结构进行组织的数据。它们通常采用表格、行和列的形式来表示,类似于关系型数据库中的表。每个数据字段都有固定的数据类型和定义,使得数据在表格中的位置和格式都是预先定义好的。

结构化数据的典型示例是关系型数据库中的数据,如 MySQL、Oracle 等。

优点:

  • 数据存储和查询效率高。
  • 数据的一致性和完整性得到保障。
  • 数据模型清晰,易于理解和维护。

缺点:

  • 对于非常复杂或不规则的数据,结构化数据难以灵活地存储和表示。

2. 半结构化数据: 半结构化数据是指没有严格固定的数据模型和格式要求,但仍然包含一些基本的结构化信息,使得数据能够被有效地组织和存储。半结构化数据在每个数据项之间可能存在不一致的格式,但通常使用标签、标记或者嵌套结构来表示数据的关系。

半结构化数据的典型示例包括 JSON、XML、HTML、NoSQL 数据库中的数据等。

优点:

  • 能够处理非规则、多样化的数据。
  • 可以轻松地适应数据的变化和演化。

缺点:

  • 查询和分析半结构化数据可能相对复杂,因为数据的结构和格式可能不同。
  • 数据的一致性和完整性难以保障,需要额外的处理和验证。

总体而言,结构化数据适用于那些有固定格式和严格数据模型的场景,而半结构化数据适用于数据格式不规则、多变或者需要灵活存储的情况。在实际应用中,根据数据的特点和使用需求,可以选择适当的数据存储和表示方式。

参考

  • 可以轻松地适应数据的变化和演化。

缺点:

  • 查询和分析半结构化数据可能相对复杂,因为数据的结构和格式可能不同。
  • 数据的一致性和完整性难以保障,需要额外的处理和验证。

总体而言,结构化数据适用于那些有固定格式和严格数据模型的场景,而半结构化数据适用于数据格式不规则、多变或者需要灵活存储的情况。在实际应用中,根据数据的特点和使用需求,可以选择适当的数据存储和表示方式。

学习参考

数据库基础知识总结

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

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

相关文章

Oracle SQL 注入上的 Django GIS 函数和聚合漏洞 (CVE-2020-9402)

漏洞描述 Django 于2020年3 月4日发布了一个安全更新,修复了 GIS 函数和聚合中的 SQL 注入漏洞。 参考链接: Django security releases issued: 3.0.4, 2.2.11, and 1.11.29 | Weblog | Django 该漏洞要求开发者使用 JSONField/HStoreField;此外&…

【matlab程序】图像最大化填充画布

【matlab程序】图像最大化填充画布 不做任何修饰: 修饰: 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Pytho…

flutter之graphic图表自定义tooltip

renderer graphic中tooltip的TooltipGuide类提供了renderer方法&#xff0c;接收三个参数Size类型&#xff0c;Offset类型&#xff0c;Map<int, Tuple>类型。可查到的文档是真的少&#xff0c;所以只能在源码中扒拉例子&#xff0c;做符合需求的修改。 官方github示例 …

在 Python 的 requests 二进制数据的传输方式发生了变化

在Python编程中&#xff0c;requests库是一个非常有用的工具&#xff0c;用于发送HTTP请求。由于其简单易用的API和广泛的兼容性&#xff0c;requests库已经成为Python开发者中最常用的网络请求库之一。 然而&#xff0c;最近在requests 0.10.1版本中&#xff0c;POST二进制数据…

力扣学习笔记——239. 滑动窗口最大值

力扣学习笔记——239. 滑动窗口最大值 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输…

php高级工程师范文模板

以下简历内容以php高级工程师招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴&#xff0c;希望能帮助大家在众多候选人中脱颖而出。 php高级工程师简历在线制作下载&#xff1a;百度幻主简历 求职意向 求职类型&…

带submodule的git仓库自动化一键git push、git pull脚本

前言 很久没写博客了&#xff0c;今天难得闲下来写一次。 不知道大家在使用git的时候有没有遇到过这样的问题&#xff1a;发现git submodule特别好用&#xff0c;适合用于满足同时开发和部署的需求&#xff0c;并且结构清晰&#xff0c;方便我们对整个代码层次有一个大概的了…

[Docker]十.Docker Swarm讲解

一.Dokcer Swarm集群介绍 1.Dokcer Swarm 简介 Docker Swarm 是 Docker 公司推出的用来管理 docker 集群的工具&#xff0c; 使用 Docker Swarm 可以快速方便的实现 高可用集群 ,Docker Compose 只能编排单节点上的容器, Docker Swarm 可以让我们在单一主机上操作来完成对 整…

万字解析设计模式之模板方法与解释器模式

一、模板方法模式 1.1概述 定义一个操作中算法的框架&#xff0c;而将一些步骤延迟到子类中&#xff0c;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 例如&#xff0c;去银行办理业务一般要经过以下4个流程&#xff1a;取号、排队、办理具体业…

分布式数据恢复-hbase+hive分布式存储误删除如何恢复数据?

hbasehive分布式存储数据恢复环境&#xff1a; 16台某品牌R730XD服务器节点&#xff0c;每台物理服务器节点上有数台虚拟机&#xff0c;虚拟机上配置的分布式&#xff0c;上层部署hbase数据库hive数据仓库。 hbasehive分布式存储故障&初检&#xff1a; 数据库文件被误删除…

RPCS3(PlayStation 3游戏模拟器)汉化教程

RPCS3 RPCS3 是一款PlayStation 3 模拟器&#xff0c;可让 Windows、Linux 或 BSD 系统的用户运行索尼 PlayStation 3 游戏。 安装教程 包含 Windows/Linux版本 详细安装汉化教程请查看文章 RPCS3&#xff08;PS3模拟器&#xff09;安装及汉化教程 1.首先下载最新版 RPCS3模…

智能汽车的山海之盾

最近一段时间&#xff0c;关于汽车数字化、智能化进程中的安全问题引发了一系列行业讨论。这个话题也得到了行业更广泛的认识与关注。 汽车智能化是大势所趋&#xff0c;而智能化带来了复杂的系统架构与多样化的功能模块&#xff0c;势必会加大安全隐患&#xff0c;但汽车本身又…

npm WARN npm npm does not support Node.js v13.9.0

Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。C:\Users\Administrator>node -v v13.9.0C:\Users\Administrator>npm -v npm WARN npm npm does not support Node.js v13.9.0 npm WARN npm You should probably upgrade to a newe…

LeetCode Hot100 101.对称二叉树

题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 代码&#xff1a; class Solution {public boolean isSymmetric(TreeNode root) {if(rootnull || (root.leftnull && root.rightnull)) {return true;}//用队列保存节点LinkedList<…

ArcGis如何用点连线?

这里指的是根据已有坐标点手动连线&#xff0c;类似于mapgis中的“用点连线”&#xff0c;线的每个拐点是可以自动捕捉到坐标点的&#xff0c;比直接画精确。 我也相信这么强大的软件一定可以实现类似于比我的软件上坐标时自动生成的线&#xff0c;但是目前我还没接触到那里&a…

Spring Boot + hutool 创建海报图片

Spring Boot hutool 创建海报图片 /*** 分享,生成图片* param id* return*/GetMapping("/getShareImg")public void getShareImg(String id,HttpServletResponse response) throws IOException {CouponConsignSaleClassify byId couponConsignSaleClassifyService…

DevEco Studio安装

HUAWEI DevEco Studio For OpenHarmony&#xff08;以下简称DevEco Studio&#xff09;是基于IntelliJ IDEA Community开源版本打造&#xff0c;面向OpenHarmony全场景多设备的一站式集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供工程模板创建、开发、编译…

医保线上购药系统:引领医疗新潮流

在科技的驱动下&#xff0c;医疗健康服务正经历一场数字化的革新。医保线上购药系统&#xff0c;不仅是一种医疗服务的新选择&#xff0c;更是技术代码为我们的健康管理带来的全新可能。本文将通过一些简单的技术代码示例&#xff0c;深入解析医保线上购药系统的工作原理和优势…

Vue框架学习笔记-Object.defineproperty函数

文章目录 前文提要Object.defineProperty作用Object.defineProperty参数使用例图getter&#xff0c;也就是get函数setter&#xff0c;也就是set函数 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 Object.defineProperty作用 当在js中声明了一个变…

python cv2.imread()和Image.open()的区别和联系

文章目录 1. cv2.imread()1.1 cv2.imread参数说明1.2 注意事项 2. Image.open()3. cv2.imread()与Image.open()相互转化3.1 cv2.imread()转成Image.open()&#xff1a;Image.fromarray()3.2 Image.open()转成cv2.imread()&#xff1a;np.array() 1. cv2.imread() cv2.imread()…