SCAU期末笔记 - 数据库系统概念
我校使用Database System Concepts,9-12章不考所以跳过,因为课都逃了所以复习很仓促,只准备过一下每一章最后的概念辨析,我也不知道有没有用
第1章 引言
- 数据库管理系统(DBMS) 由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。
- 数据库系统应用:①高价值;②庞大;③多用户访问。
- 联机事务处理即大量的用户使用数据库,每个用户检索相对少量的数据,进行小的更新。
- 数据分析即审阅数据,给出结论,并推导出规则或决策程序。
- 文件处理系统将数据永久存储在不同的文件中的管理方式。
- 数据不一致性,即同一数据的不同副本不一致(文件处理系统的弊端,说人话就是改了一个忘了改别的)。
- 一致性约束,就是同一类数据是否合法的自动判断(文件处理系统的弊端)。
- 数据抽象
- 物理层详细描述复杂的底层数据结构。
- 逻辑层描述数据库中存储什么数据以及这些数据间存在什么联系。
- 视图层一个数据库内有多个,使用户和系统的交互更简单。
- 实例(instance) :特定时刻存储在数据库中的信息的集合。
- 模式(schema) :数据库的总体设计。
- 物理模式在物理层描述数据库的设计。
- 逻辑模式在逻辑层描述数据库的设计。
- 子模式:描述数据库的不同视图。
- 物理数据独立性:在数据抽象的不同层级都不需要掌握其他层级的结构。
- 数据模型
- 关系模型用表的集合来表示数据和数据间的联系。
- 实体-联系模型使用称作实体的基本对象的集合,以及这些对象间的联系。
- 半结构化数据模型允许在其数据定义中某些相同类型的数据项含有不同的属性集。
- 基于对象的数据模型可以看成对关系模型进行扩展,增加了封装、方法和对象标识等概念。
- 数据库语言
- 数据定义语言(DDL) 定义数据库模式。
- 数据操纵语言(DML) 表达数据库的查询和更新。
- 过程化DML要求用户指定需要什么数据以及如何获得这些数据。
- 声明式DML(也称为非过程化DML)只要求用户指定需要什么数据,而不必指明如何获得这些数据。
- 查询语言:DML中涉及信息检索的部分。
- 数据定义语言
- 域约束指的就是数据类型。
- 引用完整性确保一个关系中的取值在另一个关系中也出现
- 授权
- 读权限:可读不能改
- 插入权限:可加新数据不可改已有的
- 更新权限:可改不能删
- 删除权限
- 元数据(metadata) 是关于数据的数据,说人话就是预处理出来的一个方便后续操作的类似目录的东西。
- 应用程序就是用来以SQL查询来访问数据库中的数据这种方式与数据库进行交互的程序。
- 数据库设计
- 概念设计涉及决定数据库中应该包括哪些属性,以及如何组织这些属性到各个表中。
- 规范化将所有属性集作为输入,生成一组关系表的算法(见第8章)。
- 功能需求说明,用户描述将在数据之上执行的各种操作(或事务)。
- 物理设计阶段,在这个阶段中说明数据库的物理特性,包括文件组织的形式和内部的存储结构。
- 数据库引擎
- 存储管理器是数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供借口的部件。
- 权限及完整性管理器检测是否满足完整性约束,并检查视图访问数据的用户的权限。
- 事务管理器保证即使系统发生了故障,数据库也保持在一致的(正确的)状态,并保证并发事务的执行不发生冲突。
- 文件管理器管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构。
- 缓冲区管理器负责将数据从磁盘上取到内存中,并决定那些数据应被缓冲存储在内存中。
- 数据文件存储数据库自身。
- 数据字典存储关于数据库结构的元数据,特别是数据库模式。
- 索引提供对数据项的快速访问,就相当于很多现成能用的指针。
- 查询处理器
- DDL解释器解释DDL语句并将这些定义记录在数据字典中。
- DML编译器将查询语言中的DML语句翻译为包括一系列查询执行引擎能理解的低级指令的执行方案。
- 查询优化就是从几个候选执行计划中选出代价最小的那个执行计划。
- 查询执行引擎执行由DML编译器产生的低级指令。
- 事务是数据库应用中完成单一逻辑功能的操作集合。
- 原子性:要么都发生,要么都不发生
- 一致性:数据变化前后的正确性
- 持久性:完成后就不会自己回退
- 恢复管理器:保证原子性和持久性
- 故障恢复:为保证原子性,失败要回退
- 并发控制管理器:控制并发事物间的影响
- 存储管理器是数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供借口的部件。
- 数据库体系结构
- 集中式的:所有数据集中存储在一个中心节点,便于管理和维护,但可能受限于单个节点的性能和容量。
- 并行的:利用多个CPU协同工作,提高数据处理能力和系统吞吐量,适用于大规模数据处理和高性能需求。
- 分布式的:数据分散存储在多个节点上,实现跨地域的数据共享和访问,具有高可用性和易于扩展的特点。
- 数据库应用体系结构
- 两层的:应用程序驻留在客户机上,通过查询语言语句调用数据库功能。
- 三层的:客户机仅作为一个前端,没有任何直接的数据库调用。
- 应用服务器:计算在何种条件下做出何种反应。
- 数据库管理员(DBA) 是对系统进行集中控制的人。
第2章 关系模型介绍
- 表(table) :就是表格呗
- 关系(relation) :表在关系模型中的高级表述
- 元组(tuple) :行在关系模型中的高级表述
- 属性(attribute) :列在关系模型中的高级表述
- 关系实例(relation instance) :指代一个关系的特定实例(也就是选中某一行)
- 域(domain) :对于关系的每个属性存在的一个允许取值的集合
- 原子域(atomic domain) :不可再分的单元组成的域
- 空值(null value) 是一个特殊的值,表示值未知或不存在。
- 数据库模式(database schema) 指数据库的逻辑设计。
- 数据库实例(database instance) 是在给定时刻数据库中数据的一个快照。
- 关系模式(relation schema) 的概念对应于程序设计语言中类型定义的概念。
- 码是一种用来区分一个给定关系中的不同元组的方式。
- 超码(superkey) 是一个或多个属性的集合。
- 候选码(candidate key) 是最小的超码。
- 主码(primary key,又称主码约束) 代表被数据库设计者选中来作为在一个关系中区分不同元组的主要方式的候选码,说人话就是每一行的主码都不一样,是对每一行来说唯一的编号之类的。
- 外码约束
- 从 r 1 r_1 r1关系的 A A A属性(集)到 r 2 r_2 r2关系的主码 B B B的外码约束(foreign-key constraint) 表明:在任何数据库实例中, r 1 r_1 r1中每个元组对 A A A的取值也必须是 r 2 r_2 r2中某个元组对 B B B的取值。 A A A属性集被称为从 r 1 r_1 r1引用 r 2 r_2 r2的外码(foreign key) 。 r 1 r_1 r1关系也被称为此外码约束的引用关系(referencing relation) ,且 r 2 r_2 r2被称为被引用关系(referenced relation) 。
- 讲人话就是说假如现在有个公司,把员工的住址和工资分成两个表,那么这两个表里面一定都有
员工姓名
这一列对吧,而且这一列一定是一一对应的,那这一列就是外码了。
- 引用完整性约束(referential integrity constraint) 要求引用关系中的任意元组在指定属性上出现的取值也必然出现在被引用关系中至少一个元组的指定属性上。
- 模式图(schema diagram) 用来表示一个带有主码和外码约束的数据库模式。
- 查询语言类型(query language)
- 命令式(imperative)查询语言中,用户指导系统在数据库上执行特定的运算序列以计算出所需的结果。
- 函数式(functional)查询语言中,计算被表示为对函数的求值,这些函数可以在数据库中的数据上运行或在其他函数给出的结果上运行。
- 声明式(declarative)查询语言中,用户只需描述所需信息,而不用给出获取该信息的具体步骤序列或函数调用,所需的信息通常使用某种形式的数学逻辑来描述。
第3章 SQL介绍
- 数据定义语言提供定义关系模式、删除关系以及修改关系模式的命令。
- 数据操纵语言提供从数据库中查询信息以及在数据库中插入元组、删除元组、修改元组的能力。
- SQL查询结构
- select子句(单关系查询):可以查用
select name from instructor;
看instructor
表中的name
列的所有内容- 在select后面加distinct表示去重
- 在select后面加all表示不去重(默认也是不去重)
- 可以一次select多列
- 后面的列名可以加数学运算符
- from子句:表示你要在哪个表里面查
- where子句:可以加条件判断,表示只有满足条件的行的内容才会被选
- select子句(单关系查询):可以查用
- 多重集关系代数(multiset relational algebra) 是一种运算(不细究底层内容,可以自己看P45的注释3-1)
- as子句是一种重命名结果关系中属性的方式,说人话就是给显示的结果的列改个显示的名字
- order by子句可以让查询结果中的元组按排列顺序显示。
- desc表示降序
- asc表示升序
- 写在前面的优先级更高,比如
order by salary desc, name asc;
表示先按工资降序排列,如果工资相等按照姓名升序排列
- 表别名(table alias)/相关名称(correlation name)/相关变量(correlation variable)/元组变量(tuple variable) 就是as子句里面你改的那个名字
- 集合运算:SQL作用在关系上的union、intersect、except运算对应于数学集合论中的
∪
∪
∪、
∩
∩
∩、
−
-
−运算
- 并(union) ,两个完整的语句加个括号中间用union连接就可以用了
- 默认去重,不去重要在union后面加all
- 交(intersect) ,用法一样
- 如果加all的话也是表示不去重,但是不是说本来出现3次和4次我显示7次,会按照少的那边显示,也就是3次,但是你不加all的话只会显示1次
- 差(except)
- 假如一个项目分别出现6次和3次,如果不加all则会显示0次,如果加了就会显示3次
- 并(union) ,两个完整的语句加个括号中间用union连接就可以用了
- 聚集函数(aggregate function) 是以值集(集合或多重集合)为输入并返回单个值的函数。
- SQL提供了五个标准的固有聚集函数
- 平均值:avg
- 最小值:min
- 最大值:max
- 总和:sum
- 计数:count
- group by子句可以将聚集函数作用在一组元组集上
- having子句可以对分组限定条件
- SQL提供了五个标准的固有聚集函数
- 嵌套子查询:子查询是嵌套在另一个查询中的
select-from-where
表达式。- 一个完整的表达式用括号括起来就可以当成一个表给别人进行其他的查询
- 集合比较
- {<,<=,>,>=} {some,all}
- 比如
where T.salary > S.salary and S.dept_name='Biology'
表示工资比生物系某位老师的工资高的所有老师的姓名 - some表示‘至少比某一个要大’,all表示‘比所有的都大’
- 比如
- exists结构在作为参数的子查询非空时返回true值
- unique结构在作为参数的子查询结果中没有重复的元组时返回true值
- {<,<=,>,>=} {some,all}
- lateral子句:从SQL:2003开始的SQL标准允许from子句中的子查询用关键字lateral作为前缀,以便访问同一个from子句中在它前面的表或子查询的属性。说人话就是括号里面的那个查询的结果也会输出出来。
- with子句提供了一种定义临时关系的方式,这个定义只对包含with子句的查询有效
- 标量子查询:只返回一个包含单个属性的元组的可以出现在表达式任何地方的子查询。
- 数据库修改
- 删除请求的表达方式与查询非常相似,只能删除整个元组而不能删除某些属性上的值。
delete from r where P;
表示满足条件P的行全部删掉。
- 插入
insert into
起手,后面是value
接括号,默认按列顺序,要修改的话就要在表名后面加括号表示第几个在哪一列- 还可以直接将select的结果insert进需要的地方
- 更新
update p set q where r
表示在p表内满足调节r的全部进行q更新
- 删除请求的表达方式与查询非常相似,只能删除整个元组而不能删除某些属性上的值。