数据库系统
数据库系统
数据库的基本概念
1. 数据库体系结构
1. 集中式数据库系统
- 数据是集中的
- 数据管理是集中的
- 数据库系统的素有功能(从形式的用户接口到DBMS核心)都集中在DBMS所在的计算机
2. C(client客户端)/S(server服务器)结构
- 客户端负责数据表示服务
- 服务器主要负责数据库服务
- 数据库系统氛围前端和后端
- ODBC、JDBC
3. 分布式数据库
- 物理上分布,逻辑上集中
- 物理上分布、逻辑上分布
- 容灾系统、冗余备份
特点
- 数据独立性:除了数据的逻辑独立性和物理独立性外,还有数据分布独立性(分布透明型)
- 集中与自治共享结合的控制结构:各局部的DBMS可以独立地管理局部数据库,具有自治的功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。
- 适当增加数据冗余度:在不同的场地存储同一数据的多个副本,可以提高系统的可靠性和可用性,同时也能提高系统性能。
提高系统的可用性:即当系统中某个节点发生故障时,因为数据有其他副本在非故障的场地上,对其他所有场地来说,数据依旧是可用的,从而保证数据的完备性。
- 全局的一致性、可串行性和可恢复性。
分布式数据库透明性
- 分片透明:是指用户不必关心数据是如何分片的,它们对数据的操作在全局关系上执行,即如何分片对用户是透明的。
- 复制透明:用户不用关系数据库在网络中各个节点的复制情况,被复制的数据的更新由系统自动完成。
- 位置透明:用户不必知道所操作的数据是放在何处,即数据分配到哪个或哪些站点存储对用户是透明的。
- 局部映像透明性(逻辑透明):是最低层次的透明性,该透明性提供数据到局部数据库的映像,即用户不必关心局部DBMS支持那种数据模型、使用那种数据操纵语言,数据模型和操纵语言的转换是由系统完成的。因此,局部映像透明性对异构型和同构异质的分布式数据库系统是非常重要的。
例题1 && 例题2


4. 并行数据库
- 共享内存式
- 无共享内存式
2. 三级模式结构

外模式对应视图 模式对应基本表 内模式对应存储文件

3. 数据仓库:OLAP
特点:
- 面向主题:数据按主题组织
- 集成的:消除了源数据中的不一致性,提供整个企业的一致性全局信息
- 相对稳定的(非易失的):记录了企业从过去某一时刻到当前各个阶段的信息,可对发展历程和未来趋势做定量分析和预测。

OLTP是常见的数据库系统,OLAP是联机分析系统
数据库设计过程

需求分析产出:数据流图、数据字(对数据流图做说明)、需求说明书
概念结构设计 -> 画E-R模型
逻辑结构设计 -> 关系模式
数据库概念设计阶段
1. 概念设计过程
- 先进行需求分析
- 概念设计阶段
- 抽象数据
- 设计局部ER模型
- 合并局部模型,并进行消除冲突
- 重构优化、消除冗余

1. 集成的方法:
- 多个局部E-R图一次集成
- 逐步集成,用累加的方法一次集成成两个局部E-R。
2. 集成产生的冲突及解决方法(针对同一对象):
- 属性冲突:包括属性域冲突和属性取指冲突。
- 命名冲突:包括同名异义和异名同义。
- 结构冲突:包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包括的属性个数和属性排列次序不完全相同。
2. E-R图(必考)
实体用矩形、属性用椭圆、关系用箭头、联系用棱形
- 实体:现实世界中可以区别于其他对象的事物或事件。
- 属性:属性是实体某方面的特性。
- 简单属性:不可再分的
- 复合属性:可再分更小的部分,即可划分为别的属性。
- 单值属性和多值属性:
- 单值属性:定义的属性对于一个特定的实体都只有一个单独的一个值。
- 多值属性:在某些特定的情况下,一个属性可能对应一组值,称为多值属性。
- NULL属性:表示无意义或不知道。
- 派生属性:可以从其他属性的来。
- 联系:实体的联系氛围实体内部联系与实体间的联系。联系类型有:1比1、1比n、n比n。


若实体(两个嵌套的矩形表示):在现实世界中有一种特殊的依赖联系,该联系是指某实体是否存在对于另外一些实体具有很强的依赖关系,即一个实体的存在必须依赖于另外一个实体为前提,而将这类实体称为若实体,例如附件依赖于邮件。
特殊化:在现实世界中,某些实体一方面具有一些共性,另一方面还具有各自的特性,一个实体集可以按照某些特性区分为几个子实体。
聚集:一个联系作为另外一个联系的一端。

数据库逻辑结构设计
1. 关系模型相关概念
三要素:数据结构、数据操作、数据的约束条件
相关概念:
- 目或度:关系模式中属性的个数。
- 候选码:唯一标识元组,且无冗余。 可以有多个候选键,从多个候选键中选择一个作为主码(主键)。
- 主键:关系模式中唯一标识元组的属性。
- 主属性和非主属性:组成候选码的属性是主属性,其他就是为非主属性。
- 外键:其他关系的主键。
- 全码:关系模式的所有属性组是这个关系的候选码。
关系的三种类型:
- 基本关系:实质的表,会存在数据库当中。
- 视图表:从基本关系中抽取一部分展示在视图中,虚表,并没有进行实质性的存储。
- 查询表:使用sql语言查询结果的表,虚表,并没有进行实质性的存储。
完整性约束
- 实体完整性约束:主键唯一且非空。
- 参照完整性约束:外键是其他关系的主键或外键为空。
- 用户自定义完整性约束(check)
- 触发器:逻辑关系,对数据库进行操作时,会触发执行。
2. E-R图转关系模式
一个实体型必须转换为一个关系模型,即一张关系表。
联系转关系模式:
- 一对一联系的转换有两种方式:
- 独立的关系模式:并入两端主键及联系自身属性(主键:任意一端主键)。
- 归并(任意一端):并入另一端主键及联系自身属性(主键:保持不变)。


- 一对多联系的转换有两种方式:
- 独立的关系模式:并入两端主键及联系自身属性(主键:多的一端主键)。
- 归并(多的一端):并入另一端主键及联系自身属性(主键:保持不变)。

- 多对多的转换有一种方式:
- 独立的关系模式:并入两端主键及联系自身属性(主键:两端主键的组合键)。

关系代数(重点)
实体表格,垂直叫做属性列或目或度,水平叫做元组行。
并、交、差关系代数计算
参与运算的结构必须一样

笛卡尔积计算:符号为 X
参与运算的结构可以不一样。其属性列为二者之和,元组行数为两者之积。

投影:垂直方向,符号为 π
将其属性列进行筛选

选择:水平方向
对元组进行条件筛选

自然连接:符号为 ⋈
属性列:二者之和减去重复列。
元组行数:同名属性列取指相等,会过滤元组。



规范化理论(重点)
规范化理论基本改变
1. 函数依赖
设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中任意两个元组u、v,只要有u[X] = v[x],就有u[Y] = v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X->Y。
关系模式:R(A,B,C),依赖集可能为:部分函数依赖({AB->C,A->C})、传递函数依赖({A->B, B->C}),即推导出A->C。
关系模式R<U,F>来说有以下的推理规则:
- 自反律:若,则X->Y成立。例如Y为B、X为BC、U为ABC,则BC->B成立。
- 增广律:若,则XZ->YZ成立。即X依赖于Y,两侧同时增加一个新的属性,其依赖性依旧存在。
- 传递律:若X->Y且Y->Z,则X->Z成立。
- 合并规则:由X->Y,X->Z,则X->YZ。
- 伪传递规则:由X->Y,WY->Z,则XW->Z。
- 分解规则:由X->Y及,则X->Z。
2. 候选键、主键、外键
- 候选键:唯一标识元组,且无冗余,不可为空,可以有多个候选键。
- 主键:从候选键中选取任意一个作为主键。
- 外键:其他关系的主键。
图示法求候选键
- 将关系的函数依赖关系,用“有向图”的方式表示。
- 找出入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键。
- 若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的节点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键。
例题1:给定关系R(A1,A2,A3,A4)上的函数依赖集F={A1->A2,A2->A3,A3->A2,A2->A4},则其候选关键字为?
- A1入度为0,且能遍历全部结点,所以候选关键字为A1.
例题2:关系模式P(A,B,C,D,E,F,G,H,I,J)满足下列函数依赖:FD={ABD->E, AB->G, B->F, C->J, CJ->I, G->H},求候选码?
- 找出入度为0的集合,即(ABCD)。
- 判断该集合能不能遍历全部结点,可以即为候选码。
例题3:关系R(A,B,C)满足下列函数依赖:F{B->C, B->A, A->BC},其候选关键字为?
- 无入度为0的结点。
- 找其中间结点(既有入度也有出度的结点),判断其中间结点能不能遍历全部结点。
- A可以遍历B、C, B可以遍历A、C
- 其候选关键字为A和B。
主属性和非主属性
定义:组成候选码的属性就是主属性,其它的就是非主属性。
例题1: 
候选键为:(ST,CITY)、(ST、ZIP)
其主属性为:ST、CITY、ZIP
非主属性:无



范式判断(重点)
数据库设计不到3NF(第三范式)时,都会出现:数据冗余、修改异常、插入异常、删除异常等问题。
第一范式(1NF)
在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式。
第二范式(2NF)
当且仅当关系模式R是第一范式,且每个非主属性完全依赖候选键(没有不完全依赖)时,则称关系模式R是第二范式。
第三范式(3NF)
当且仅当关系模式R是第二范式,且R中没有非主属性传递依赖于候选键时,即称关系模式R是第三范式。

- 将系信息拆解出来,系信息(系号、系名称、系位置),学生关系(学号、姓名、系号)
BC范式
设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。

模式分解
- 保持函数依赖分解
设数据库模式p = {R1,R2,...,Rk}是关系模式R当一个分解,F是R上的函数依赖集,p中每个模式Ri上的FD集是Fi。如果{F1,F2,...,Fk}与F是等价的(即相互逻辑蕴涵),那么称分解p保持FD。
例题:设关系模式R(U,F),其中U={A,B,C,D,E},F={A->BC, C->D, BC->E, E->A},则分解p1={R1(ABCE), R2(CD)}是否保持了函数依赖?而分解p2={R1(ABE), R2(CD)}是否保持了函数依赖?
函数依赖是指分解后的关系是否等价于F。
R1为ABCE,保存了A->BC、BC->E、E->A,R2为CD,保存了C->D。
R1和R2都保存了函数依赖,所以分解p1保持了函数依赖。
p2中R1为ABE,保存了E->A,R2为CD,保存了C->D,没有保存A->BC、BC->E,则p2未保留函数依赖。
无损分解
指将一个关系模式分解成若干个关系模式后,通过自然连接等运算依旧能还原到原来的关系模式,即称无损分解。
例题:有关系模式:成绩(学号,姓名,课程号,课程名,分数),依赖关系:学号->姓名,课程号->课程名,(学号,课程号)->分数。若将其分解为:成绩(学号,课程号,分数), 学生(学号,姓名),课程(课程号,课程名)。请思考其是否为无损分解?
- 学号->姓名,则成绩可还原为(学号,课程号,姓名,分数)
- 课程号->课程名,则成绩可还原为(学号,课程号,姓名,分数,课程名)
- 其还原后的结果和之前一直名,则属于无损分解

p1保留了函数依赖,且无损。p2保留了函数依赖,但是有损,无法还原
无损分解公式法判断:仅适用于分解为两个的情况下

SQL语言
sql语言分类:
- 数据查询:select
- 数据定义:create、drop、alter
- 数据操作:insert、update、delete
- 数据控制:grant(权限分配)、revoke(权限收回)
1. 普通查询

select * from users where age > 18 order by age desc; // 查找后降序排列

- 将关系R和S进行自然连接,同名属性排除,则可得出ABCDEFG,1~7列。
- 其查找2 4 5 7,则为R.B,D,F,G列。第一空为R.B,D,F,G。
- 由于sql中多表查询采用笛卡尔积计算,而题干中使用自然连接,需要进行转换,其特点是同名属性列取指相等,则需要满足R.B = S.B和R.C = S.C。
2. 分组查询


3. 权限控制

事务并发控制
数据库中都是以事务为基本单位进行执行的。
1. 事务的特性
ACID特性:
- A:原子性:事务是原子的,要么都做,要么都不做。
- C:一致性:事务执行的结果必须保证数据库从一个一致性状态变到另外一个一致性状态。
- I:隔离性:事务之间是相互隔离的,多个事务不能相互干扰。
- D:持久性:事务一旦成功提交,即使数据库崩溃了,其对数据库的更新操作也永久有效。
2. 并发问题
- 丢失更新
两个以上的事务,同时对同一个数据做了修改,前面一个的修改会被后面的修改覆盖掉。
- 不可重复读
一个事务正在读取数据,当其他事务修改了数据时,当前事务的读取结果可能不是最新的。
- 读脏数据
数据执行失败,被回滚了,其中间数据无效,即脏数据。
3. 封锁协议
对并发产生的问题进行封锁,S封锁(共享锁)、X封锁(排他锁)、两段锁协议。
共享锁/S锁/读锁:若事务T对数据对象A加了S锁,其他事务职能对A再加S锁,不能对A加X锁。
排他锁/独占锁/X锁/写锁:若事务T对数据对象A加了X锁,其他事务不能再对A添加任意锁。



