大二下数据管理基础总结

HangYF Lv2

数据管理基础

数据库绪论

  1. 有关基本概念和数据库发展
  2. 数据模型:概念模型(可通过E-R图表示,用于数据库设计) 逻辑模型 物理模型;数据模型组成要素;常用的数据(逻辑)模型
  3. 数据库系统的结构:型与值;三级模式:模式,外模式,内模式;二级映像:外模式/模式映像模式/内模式映像。(一个数据库管理系统管理多个数据库

关系模型

关系定义

首先明确一些定义

域:同一类数据称作在一个域

笛卡尔积:是对不同的域做的运算,对每个域中所有元素的排列组合,得到一系列元组,运算中域的数量即为某个元组中分量的数量 D1XD2XD3={(d11,d21,d31),(d12,d21,d31),…….},笛卡尔积可以表示为一个二元表。

关系:对应域上笛卡尔积的一个子集,元组的数量不同。每个元素是关系中的元素,元组中分量的数量(域的数量)即为关系的目或者度。当度为1时 是单元关系,2为二元关系。关系也可表示为一个二维表,属性对应列的名字,度的数量=属性的数量=列的数量;行数量=元组数量。

语义上:码=键

码:若一个属性集合的值可以唯一性的标识任意一个元组,则这个属性集合被称作码。

候选码:是唯一标识一个元组的最小属性集合。

主码:挑选候选码的其中一个作为主码。

主属性:候选码的各个属性被称为主属性。

非主属性/非码属性:不在任意候选码中的属性

全码:若所有属性共同构成一个候选码,则该候选码称为全码

外码:当表A中存在属性组不是候选码,且与表B中的主码相对应,则该属性组是A的外码。A为参照关系(参照B的主码来取值),B为被参照关系。

//后面关系和表基本同质化了

关系的类型:基本表,查询表,视图表。 基本表是实际存在的表,实际存储的数据的逻辑表示,查询表是查询结果对应的表,视图表是由基本表或者其他视图表导出的表,是表,不对应实际存储的数据。

规范化/范式:基本表所要满足的性质,其中最重要的一条:分量必须是原子的,不可再分的。如链表不可为表项。

  1. 关系模式:关系的“型”。R(U,D,DOM,F)规定关系的属性集合,域集合,属性和域的对应关系,属性间数据的依赖集合。
  2. 关系数据库:关系数据库模式是关系数据库的型,包含了若干域的定义,以及在这些域上的关系模式定义。

关系操作

基本的关系操作:查询和更新(插入,删除,修改)两大部分。查询又可分为选择,投影,连接,除,并,差,交,笛卡尔积等操作,其中标黑的都是基本操作。关系操作的特点是集合操作。

关系完整性

关系完整性是对关系模型的语义约束,是现实世界的语义要求

  1. 实体完整性:即要求表中每个元组都是唯一的,可区分的。主码中的属性值不可重复或者取空值(每个属性值均不可重复或者为空)。
  2. 参照完整性:关系之间存在相互参照和引用时,要求外码的取值必须为被参照关系中某个元组的主码值或者空值。即外码的取值有限制,必须是参照而来的,而不能凭空捏造。
  3. 用户定义的完整性:不同于上面两个必须在任何关系型数据库都要满足的性质,该性质是在具体环境下用户提出的语义要求。

关系代数

包含集合运算和额外的关系运算。两者符号不同

  1. 集合运算:均针对元组运算,是两个关系的二元运算,两个关系要满足属性相同

并,交,差,广义笛卡尔积(A中n个元组与B中m个元组排列组合形成新的一张表,属性列扩张,共n*m个元组)

  1. 关系运算:

选择(横向) :$\sigma$F(R) 其中F是条件,可以选择关系中特定的元组

投影(纵向):$\Pi$A(R) 其中A是列名,可以选择关系中特定的(多个)列,注意取消了某些列后可能出现重复元组,需要消除。

连接(自然连接):R$\bowtie$S 即通过R和S中同名的属性列将两者链接,取对应属性分量相同的元组集合。然后去掉重复的属性列。有一些元组连不上被抛弃 称作悬浮元组。将悬浮元组保存在结果关系中,其他属性中填上null,则成为外连接,保存左边的悬浮元组就叫左外连接,保存右边的就是右外连接。

除运算:从大的关系中剥离小的关系。R%S 1.先在R中找到不在S的属性U,这是结果集中包含的属性。2.分析关系R中的U属性下每个元组的具体值xi(i表示属性的数量,如果有两个属性就是x1,x2)的象集(即选出所有包含该分量xi的元组,同时剔除该分量xi),包含R与S共同属性的投影形成的所有元组即可保留xi。这里为的是小的关系和S的广义笛卡尔积(所有元组的组合)形成的关系是R的子集(范围小于R)。

SQL

SQL集数据查询语言DQL-如SELECT),数据定义语言DLL-如CREATE),数据操纵语言DML-如DELETE),数据控制语言DCL-如GRANT)于一身。一个数据库管理系统可以定义多个数据库,一个数据库可以定义多个模式,一个模式下有表和视图,可以为表建立索引(这是SQL的规定,实际DBMS可能没这么复杂)

数据定义

模式,视图只能修改和删除。表和索引还可以修改。

模式

创建

1
CREATE SCHEMA 模式名 AUTHORIZATION 用户名

删除:

1
DROP SCHEMA 模式名 [CASCADE|RESTRICT] 

注意:DROP删除都有CASCADE和RESTRICT两种选项,分别表示将模式下所有内容都级联删除,和如果模式下有内容则不删除并报错,即限制性删除

基本表

1
2
3
4
5
6
CREATE TABLE 表名(
属性名1 类型 [列级完整性约束],
属性名2 类型 [列级完整性约束],

[表级完整性描述]
);

列级完整性描述如 PRIMARY KEY; UNIQUE;NOT NULL

表级完整性可以定义外键和主键(当属性多于两个)如:

FOREIGN KEY(Sno) REFERENCES Student(Sno); 定义某个属性参考其他表或本表的主键。

PRIMARY KRY(Sno,Cno)当主键属性个数多于1时

修改:

1
ALTER

删除:

1
DROP

索引

1
CREATE [UNIQUE|CLUSTER] INDEX 索引名 ON 表名(属性名1,属性名2...)
1
ALTER INDEX 旧索引名 RENAME TO 新索引名
1
DROP INDEX	索引名

数据查询

语句的使用:格式如下。其中WHERE GROUP ORDER都是选择性添加

1
2
3
4
5
SELECT [DISTINCT|ALL] 列表达式
FROM
[WHERE 条件表达式]
[GROUP BY 列名 [HAVING 条件表达式]]
[ORDER BY 列名 [ASC|DESC]] ascend/descend

单表查询

  1. 列表达式可以是各个列名,也可以是包含列名的运算式,也可以是包含列名的聚集函数,查询后会将对应列的元素进行运算后再显示。同时可以将字符串常量作为列表达式,结果表中会多出一列,值全被设置为该字符串常量。
  2. 可以通过DISTINCT选项将查询结果中重复的元组消除。(默认为ALL)
  3. 可通过WHERE子句搭配列的条件表达式来进行特定元组的选择。常用查询条件有:比较,范围限制(BETWEEN AND),确定集合(IN),字符匹配(LIKE),空值(IS NULL)。可以多重条件搭配。(%匹配任意长度对应字符;_匹配一个对应字符可作为通配符)
  4. ORDER BY 若有多个列名,每个列名都要设置升序或降序。如先按照第一个列的升序排序,相同值再按照第二个列的升序排列。
  5. 聚集函数查询实际上是将某列查询结果做了运算后再显示。显示结果往往很少。(聚集:将多个的元组进行特定运算,结果存入新的元组,实现聚集效果
  6. GROUP BY 将查询结果通过按照一列或者多个列的值进行分组,值相等的分为一组。分组的目的是细化聚集函数的作用对象,聚集函数可以作用于组,对于每个组的各个元组进行计算给出结果,而不是对整个表的各个元组进行作用,作用粒度更细。如果对每个组进行条件筛选,只显示特定的组,可以在HAVING子句进行聚集函数+条件判断筛选,这里同样是对每个组中的元组进行作用。

连接查询/多表查询

  1. 将连接谓词置于WHERE子句,说明是哪两个属性的连接(如Student.Sno=Course.Sno)中进行表的连接。同时这两个表的名称要出现在FROM子句中
  2. 不同表的属性名相同,要在属性前添加表名进行识别,如上面的例子。
  3. 可以实现外连接(FROM student LEFT OUTER JOIN SC ON(属性连语句词),添加student的悬浮元组,多出的属性设置为NULL)
  4. 多表连接通过两个或多个连接谓词实现。

嵌套查询

将一个查询块(SELECT-FROM-WHERE)放到另一个查询块的WHERE子句中。通常的方式有4种:

  1. 使用in谓词:子查询块返回多个元组(含多个属性),或者说是返回一张多属性表。
  2. 使用比较运算符:子查询块返回单个值
  3. 使用比较运算符+ANY/ALL谓词:子查询块返回多个值
  4. 使用EXIST谓词:子查询只返回逻辑值真假。

嵌套查询分为两种:相关嵌套查询(依赖父查询结果进行子查询)和不相关嵌套查询。

不相关嵌套查询可以一次将子查询结果得到,然后执行父查询结果。

相关嵌套查询需要先执行父查询得到一个元组,传入子查询进行查询。重复以上过程直到结束,子查询要多次进行。如下图。

1
2
3
4
5
6
7
SELECT Sno,Cno
FROM SC x
WHERE GRADE>=(
SELECT AVG(GRADE)
FROM SC y
WHERE x.Sno=y.Sno
)

其中x,y是表SC的别名,也叫元组变量,可以用来表示SC的一个/多个元组。如x表示了SC的一个元组,y表示了SC的多个/一个元组。

数据更新

插入:

1
2
3
INSERT 
INTO 表名 [ (属性1,属性2) ]
values (值1,值2)

属性是可选的,便于将值的创建与属性名称对应起来。对于空值要显式的输入NULL,没有值的属性由数据库自动补充一个值。可以插入子查询结果,实现多个元组的同时插入

修改:

1
2
3
UPDATE
SET 列名=表达式
[WHERE 条件]

修改特定列的值,没有WHERE则修改全部元组的对应属性。可以使用子查询

删除

1
2
3
DELETE
FROM 表名
[WHERE 条件]

删除特定元组,没有条件则删除所有元组。可以使用子查询

空值处理

UNIQUE ,NOT NULL,码(主码)属性不能是NULL

视图

数据库中只存放视图的定义,是个虚表,对应的数据仍在数据库基本表中,当数据变化,查询对应使视图的结果也会变。视图相当于一个窗口,用来查看信息。(一般不用于更新数据,即使更新也有限制)

  1. 建立视图
  2. 查询视图
  3. 更新视图
  4. 视图的作用

关系数据理论(规范化)

数据依赖:一个关系内部属性与属性之间的约束关系,是通过属性间值的相等于否体现出来的数据间相关联系,是现实世界属性之间相互联系的抽象,是语义的体现。

主要有多值依赖和函数依赖 X->Y ( f(x)=y,y函数依赖于x,y由x确定)(例如学号确定后,学生名字也就确定了,这就是一种函数依赖;U完全函数依赖于属性集K说明,U不函数依赖于K的任何真子集)。不从语义上分析,可以单从属性之间值的相等得到函数依赖关系。即任意两个相等的x属性值必然对应同一个y属性值,则y函数依赖于x。

表可能存在的问题:数据冗余:相同数据在表中多次出现;更新异常(繁琐):因为冗余,需要更新大量的表项;插入异常(无法插入):只有一部分属性信息时,无法在表中插入元组;删除异常(信息丢失)无法删除一个元组中的部分分量保留其他信息,只能全部删除。

从函数依赖看码的定义—–候选码、超码:若R的所有属性完全函数依赖于属性集K,则K为R的候选码;若是部分函数依赖K,则K为R的超码。候选码是最小的超码。

第一范式:二维表的元组分量均不可再分割。

第二范式:非主属性完全函数依赖于任何一个候选码。让候选码成为标识任意属性的最小单位。若某个候选码的子集能标识某个非主属性的值,则说明表还能分解。

第三范式:每个非主属性既不传递依赖于候选码,也不部分依赖于候选码。只留一层依赖关系,多层依赖关系可分解为多个表。

BCNF:在第三范式基础上,任何主属性对于不包含他的候选码也是完全函数依赖,且没有传递依赖。这在有多个候选码时有用。

数据库设计

步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计。

视图建立在数据库的外模式中,索引建立,物理存储安排在数据库的内模式中,基本表设计则是逻辑模式,E-R图则是概念模式。

概念结构设计

E-R图绘画:实体型方格,属性圆形,联系菱形(以及联系类型,靠近谁就是描述谁的数量,描述方法是:在任意其他实体型只有一个的情况下,该实体型对应的数量)联系的度就是参与联系的实体型数目。注意,联系也有属性。

逻辑结构设计

即将概念结构下的E-R图变为关系模式。

  1. 一个实体型转化为一个关系模式,关系属性就是实体的属性,关系的码就是实体的码。
  2. 实体型的联系: 若为1:1联系,则可变为独立的表(或者和左右实体型的表合并),需要左右实体型的码(作为候选码)和本身联系的属性作为该表的属性; 若为1:n,和上述操作方法类似,但只能和n端的表合并,若变为独立的表,候选码只能是n端的码。若为n:m,建议独立一个表描述联系;三个及以上的实体联系类似于n:m的处理,独立一个表描述联系,需要有所有相连实体的码及连接自身的属性;相同码的表直接合并

物理结构设计

数据库恢复技术

事务

事务操作是用户定义(语义性强)的一系列数据库操作,这些工作要么不做,要么全做,是原子性的工作单位。

事务是数据库恢复和并发的基本单位。

BEGIN TRANSACTION

COMMIT 提交

ROLLBACK 回滚

ACID特性:原子性,一致性(描述数据库状态,若事务做了一般不做了,数据库就会进入不一致的状态),隔离性(并发事务互不干扰),持续性(事务提交后的数据改变是永久的,不会被改变)。

事务撤销:当事务发生事务故障,即没有到达预期的终点(commit或者rollback)。此时要强行回滚。

事务重做:当事务提交但并未写入磁盘中,需要重新完成并提交。

数据库恢复技术:核心是建立冗余:数据转储和登记日志文件。

日志文件是用来记录事务对数据库更新操作的文件。事务故障,系统故障,动态转储,静态转储(非必须)都要使用日志文件。

恢复策略

具有检查点的恢复

向日志中添加检查点,省的对日志全部扫描

数据库并发控制

通过轮流交叉执行多个事务实现事务的并发执行。

封锁技术控制并发

事务在操作某个数据对象时 对数据对象加锁

主要有:排他锁X(写锁);共享锁S(读锁)。上了排他锁,则不能上任何其他锁;上了共享锁则只能再上共享锁。

封锁协议(这里直接使用1+3级封锁协议):事务前上写锁,事务完成释放;读前上读锁,事务完成(注意不是读完释放)释放。

活锁 死锁

活锁是某个事务总是被其他事务抢占,永远等待别人的锁释放。(先来先服务即可)

死锁彼此持有资源永久等待。

  1. 预防

一次封锁法:事务一次将所有使用的资源全部加锁。

顺序封锁法

​ 2. 诊断和解除

等待图法,超时法;解除只需选择代价最小的事务撤销并解除锁即可。

判断可串行化调动

可串行化调度:并发调度结果等于为一个串行化调度(显然正确),这说明该并行调度是可串行化的 也就是正确的。

冲突操作:不同的事务对同一个数据的读写或者写写操作不同事务的冲突操作同一事务的不同操作不能交换(冲突操作次序不可变)。通过交换两事务不冲突操作使得一个调度变为串行调度,说明是冲突可串行化调度,也是可串行化调度。(是后者充分条件)

两段锁协议

所有事务必须分为两个阶段对数据加锁 解锁。

第一个阶段可以不断请求封锁,但不能放锁;第二个阶段反之。

事务遵行两段锁协议是可串行化的充分条件。同时两段锁协议不保证不会有死锁,但是一次封锁法是满足两段锁协议的。

多粒度封锁

封锁的粒度越大,系统开销越少,并发程度越低。粒度小则反之。 数据库–关系–元组

对于粒度大的数据项加锁,则视为同时为其自粒度加锁。所以对某粒度数据加锁时,不仅要看所有父粒度是否有了锁(隐式锁),还要看所有子粒度是否有了锁。为了避免看所有子粒度的锁,加快效率,可以通过在加锁时为所有父粒度加意向锁,来表示该粒度下,有子粒度已经上锁。避免了进一步搜查子粒度。

IS锁 一个数据对象加上了IS锁说明其子孙节点中想要加S锁

IX锁 一个数据对象加上了IS锁说明其子孙节点中想要加X锁

SIX锁=S+IX 某事务想读整个R表,同时又想更新R表的个别元组,则为R表加SIX锁。

锁强度:X>SIX>S=IX>IS

对于意向锁:申请封锁自上而下,解锁自下而上。

1
分数
  • Title: 大二下数据管理基础总结
  • Author: HangYF
  • Created at : 2025-01-26 11:16:12
  • Updated at : 2025-02-17 22:14:24
  • Link: https://redefine.ohevan.com/2025/01/26/大二下数据管理基础总结/
  • License: This work is licensed under CC BY-NC-SA 4.0.