[MySQL]数据库基本概念
[MySQL]数据库基本概念
学习使用工具
HillZhang的数据库复习笔记 https://hillzhang1999.gitee.io/2020/05/29/shu-ju-ku-fu-xi-ji-yu-mysql/#toc-heading-2
《数据库系统概念(中文第六版)》
SQL 与关系代数 https://rgb-24bit.github.io/blog/2019/sql-relational-algebra.html
一、数据库定义及基本概念
数据库管理系统(DataBase-Management System, DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。
这个数据集合通常称作数据库(database),其中包含了关于某个企业的信息。DBMS的主要目标是要提供一种可以方便、高效地存取数据库信息的途径。
数据库系统(DBS)的核心是数据库管理模型。是在文件系统上发展起来的,计算机系统引用数据库后的系统。 由DB、DBMS(及其开发工具)、应用系统、DBA(数据库管理员)构成。能够减少冗余、提高数据独立性、并集中检查数据完整性。
数据库系统的一个主要目的是给用户提供数据的抽象视图,也就是说,系统隐藏关于数据存储和维护的某些细节。
数据库系统提供数据定义语言(DDL)来定义数据库模式,以及数据操纵语言(DML)来表达数据库的查询和更新。
- DML:实现增删改查,有过程化DML和声明式DML两种。
二、数据库的三级模式结构
-
模式(全体数据逻辑结构)
数据库中全体数据的逻辑结构和特征的描述。一个数据库只有一个模式,定义数据的逻辑结构,如:数据之间的联系,与数据有关的安全性、完整性要求。关系型数据库中的表属于模式。
-
外模式(局部数据逻辑结构)
数据库中局部数据的逻辑结构和特征的描述。一个数据库可以有多个外模式。保证数据库安全性的有力措施。是模式的逻辑子集。
-
内模式(全体数据物理结构)
数据物理结构和存储方式的描述。一个数据库只有一个内模式。是数据在数据库内部的表达方式,物理结构指的是数据在硬盘上是怎么被保存的。
-
二级映像
三级模式是对数据的三个抽象级别,二级映象在DBMS内部实现这三个抽象层次的联系和转换。
-
外模式/模式映像
定义外模式与模式之间的对应关系。保证数据的逻辑独立性。即用户的应用程序与数据库中的逻辑结构是相互独立的。
-
模式/内模式映像
定义数据全局逻辑结构与存储结构之间的对应关系。 保证数据的物理独立性。即用户的应用程序与储存在硬盘上的数据库中的数据是相互独立的。
-
三、关系模型
-
关系模型概述
关系模型的数据结构是:二维表结构,它是关系型数据库的基础。
关系数据模型由关系数据结构、关系操作和关系完整性约束三部分组成。
关系必须是规范化的,满足一定的规范条件。
关系数据库必须满足1NF范式,即一张表中不包含子表。(关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表)。
-
关系数据库的结构
关系数据库由表的集合构成。在关系模型的术语中:
- 关系:通常指一张表
- 元组:表中的一行记录
- 属性:表中的一列,有属性名和属性值(分量)
- 分量:元组中的一个属性值
- 关系模式:对关系的描述,通常有几张表就有几个关系模式
- 域:属性值的取值范围
- 键:
- 超键(关键字):在关系中能唯一标识元组的属性集
- 候选键:超键中可能包含无关紧要的属性,候选键指任意真子集都不能成为超键的超键。
- 主键:用户选作元组标识的候选键
- 外键:如果关系模式R中的属性k是其他关系模式的主键,则k是R中的外键(表与表的关系通过外键来描述)外键表中的外键不能有主键表中不存在的数据。(保证数据的完整性和一致性)R称为外键依赖的参照关系,k称为外键的被参照关系。
- 主属性:一个属性只要在任何一个候选键中出现过,这个属性就是主属性。
- 非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。
-
关系的完整性约束
- 实体完整性:关系必须有主键,且主键不能重复,不能为空
- 参照完整性:以外键的形式维护实体间的引用关系,可以为空或者值为被参照关系的主键值
- 用户自定义完整性:用户由应用环境决定的针对具体关系数据库的约束(属性类型等)
-
关系代数
关系代数的基本运算包括:选择、投影、并、集合差、笛卡尔积和更名。
-
投影 \(∏_{account}(user)\)
关系R上的投影是从R中选择出若干属性列组成新的关系。
SELECT account FROM user;
-
选择 \(σ_{id=1}(user)\)
关系代数中的选择和 SQL 中的
SELECT
不是一个意思,而是更接近WHERE
, 我们可以通过选择运算选择关系中符合指定条件的部分。SELECT * FROM user WHERE id = 1;
-
并/交 \(∏_{id}(user)∪∏_{id}(profile)\) \(∏_{id}(user)∩∏_{id}(profile)\)
并运算可以将两个集合并起来,对应到 SQL 中就是
UNION
操作,交运算对于的 SQL 语句是INTERSECT
。SELECT id FROM user UNION SELECT id FROM profile; SELECT id FROM user INTERSECT SELECT id FROM profile;
-
集合差 \(∏_{id}(user)-∏_{id}(profile)\)
可以从一个集合中排除另一个集合中的内容,对于到 SQL 中就是
EXCEPT
操作。SELECT id FROM user EXCEPT SELECT id FROM profile;
-
笛卡尔积 \(user×profile\)
笛卡尔积是一个很重要的运算,通过笛卡尔积我们可以将 任意 两个关系的信息结合在一起,笛卡尔积的运算结果会将两个关系的所有列作为新的关系的列,将两个关系的所有行的组合作为新的关系的行。对应到 SQL 中便是
CROSS JOIN
。SELECT * FROM user CROSS JOIN profile;
-
连接
连接运算是从两个关系的笛卡尔积中选取属性间满足一定条件的元组形成一个新的连接。
-
自然连接
自然连接将两个关系的 属性集 的 并集 作为新的关系的属性,同时会对两个关系中的相同属性进行比较筛选。假如两个关系不存在相同的属性,那么自然连接的结果便和 笛卡尔积 相同。
SELECT * FROM user NATURAL JOIN profile;
-
内连接
可以把内连接看做添加了选择语句的笛卡尔积。
SELECT * FROM user INNER JOIN profile ON user.id >= profile.id;
-
外连接
可以把外连接看做是 内连接 的扩展,首先计算出两个关系内连接的结果,然后根据外连接的类型补充数据到内连接的结果上。
左外连接:首先可以计算出 User 和 Profile 的内连接,然后用空值来填充在左侧关系中存在而右侧关系中不存在的项就可以了。
右外连接:首先可以计算出 User 和 Profile 的内连接,然后用空值来填充在右侧关系中存在而左侧关系中不存在的项就可以了。
全外连接:左外连接和右外连接的并。
-
-