数据库 期末复习
前言
数据库期末重点:
SQL编程–难度类似实验测评
关系模型—概念、关系运算
CDM设计—根据题目给出的需求,画出PD格式的CDM图
PDM设计—课件4-4数据库规范化设计
ODBC—概念、分级、方法
JDBC—-概念、分级、编程
存储过程、触发器—-难度类似实验
第七章考核点:5v,cap,base,四种nosql数据库类型和分类比较
2023年,学院对各课程考核题型形式提出了统一要求,取消单选题、判断题的测试形式,更多采用综合考核能力的题型形式
此文档作为数据库系统的最新复习资料,部分截图来自授课PPT,严格按照教科书目录结构编写,方便结合教材查缺补漏,精华浓缩阐述清楚,看完的话应该有85分,部分概念(规范化、并发..)比较抽象需要看书可能才能理解清楚。
建议复习步骤:此文档–>教科书–>此文档。
数据库及其系统概念
- 了解数据库、数据库管理系统、数据库系统等基本概念
- 理解数据模型与数据库类型关系
- 熟悉数据库系统组成及其各部分作用
数据库:按特定数据模型组织存储管理数据的文件集合
特点
- 数据不重复
- 支持并发
- 数据结构独立于应用程序
- 数据的增删改查由数据库系统管理软件管理
数据模型:事物对象数据特征结构的形式化表示,包括数据结构、数据操作、数据约束
数据结构:对象静态特征
数据操作:对象动态特征
数据约束:数据结构中数据之间的联系制约关系,数据动态变化的规则
数据模型-关系数据模型:采用“二维表”结构组织、存储和管理数据,并以关联列实现表之间的联系。
数据库系统(DS)
数据库应用程序:在DBMS支持下对数据库中数据进行访问处理
关系数据库数据内容:用户表(用户数据),系统表(元数据、索引数据、运行数据)
关系数据库对象组织:
- 用户表:存储用户的应用数据
- 系统表:存储数据库系统自身数据
- 视图:通过虚拟表实现数据查询处理
- 索引:通过目录数据结构支持快速的数据查询
- 约束:对关系表及其数据施加规则
- 存储过程:在数据库内部实现特定功能程序的数据处理
- 触发器:在数据库内部实现数据操作事件触发自动执行的过程程序
关系模型
关系相关概念
键:关系中可以唯一标识元组的属性列,其他的为非键列
候选键:多个列都可以作为键时,它们每一个均为候选键
主键:候选键中最具代表性的,唯一
复合键:关系中必须用多列才能唯一标识元组时,为复合主键
代理键:DBMS自动生成的数字序列主键,可替代复合主键
外键:关系中的关键字为另一个关系的主键,此时称该关系为另一个关系的从表
关系模式:关系名(主键属性,属性2,…,属性x)
关系模型原理
数据模型-关系模型:基于二维表结构存储数据实体及实体间联系
关系模型数据操作
集合:选择(select)、投影(project)、连接(join)、交(intersection)、并(union)、差(difference)
元组:行插入(Insert)、 修改(Update)、删除(Delete)
交并差:关系R与关系S需有相同属性组成(简单不赘述)
笛卡尔积×:R的属性列+S的属性列=新表属性列,元组进行排列组合
选择:σF(R):在关系R中选出满足条件F的元组形成新的关系。(F:条件表达式);对应where子句
投影:πA(R):在R中选出若干属性列组成一个新关系。(A:属性组);对应select子句
连接:从两个关系的笛卡尔积中选取属性间满足条件AθB的元组组成新的关系
条件连接
等值连接-条件连接的特例:选取指定属性列的值相等的行,可以选择多个条件
1 | SELECT 列表 |
自然连接-等值连接的特例:根据两个表中的所有相同属性列进行连接,连接后多个的相同属性列只保留一个
1 | SELECT 列表 |
外连接-自然连接的特例:自然连接只有相同属性列的值相同才返回,外连接中若有一方的行的共同属性列没有找到与之匹配的行,则也保留该行,以NULL填充。左外连接、右外连接、全外连接
除(了解;t代表元组、XY代表属性)
关系模型完整性约束:实体完整性约束(主键非空且不唯一)、参照完整性约束(主从表的外键主键一致)、用户自定义完整性约束
SQL语句
sql概述
数据定义语言(DDL):创建修改删除数据库对象;create/drop/alter database/table/index
数据操纵语言(DML):增删改数据;insert/update/delete
数据查询语言(DQL):数据查询;
数据控制语言(DCL):数据库对象访问控制;grant/deny/revoke
事物处理语言(TPL):事物处理;begin transaction/commit/rollback
游标控制语言(CCL):游标操作;declare cursor/fetch into/close cursor
数据定义语句
数据库
1 | CREATE DATABASE CourseDB; |
数据库表
格式:列名+数据类型+列完整性约束
列完整行约束
PRIMARY KEY——单列主键
NOT NULL——非空值
NULL——空值
UNIQUE——值唯一
CHECK——有效性检查
DEFAULT——缺省值
表约束:可定义复合主键、代理键、外键,可以命名约束
1 | CREATE TABLE Student |
表约束定义代理键:有时为了方便数据处理,可以使用代理键去替代复合主键
1 | CREATE TABLE Plan |
表约束定义外键
1 | CREATE TABLE Register |
数据库索引
索引(index):将关系表按照指定列的取值顺序组织元组数据的数据结构,加快查询,占用额外存储空间、开销较大
1 | CREATE INDEX Birthday_Idx ON STUDENT(Birthday); |
数据操纵语句
数据插入
1 | INSERT INTO Student VALUES('2017220101105','柳因','女','1999-04-23','软件工程', 'liuyin@163.com'); |
数据修改
1 | UPDATE Student |
数据删除
1 | DELETE |
数据查询语句
单表查询
1 | -- 通用结构 |
多表关联查询
子查询
1 | SELECT TeacherID, TeacherName, TeacherTitle |
连接查询
1 | SELECT B.CollegeName AS 学院名称, A.TeacherID AS 编号, A.TeacherName AS 姓名, A.TeacherGender AS 性别, A. TeacherTitle AS 职称 |
数据库设计
概述
数据库开发过程
数据库结构模型设计-数据库结构模型
概念数据模型 Conceptual Data Model (CDM) | 从用户角度所建模的系统数据对象及其关系,它帮助用户分析信息系统的数据结构关系。 |
---|---|
逻辑数据模型 Logic Data Mode(LDM) | 从系统分析员角度所建模的系统数据对象逻辑结构关系,它帮助开发人员分析信息系统的逻辑数据结构。 |
物理数据模型 Physical Data Model (PDM) | 从系统设计人员角度所建模的系统数据物理存储及结构关系,它针对设计者具体定义信息系统的数据库表结构。 |
E-R模型方法
“实体-联系模型”(Entity-Relationship Model)的简称。它是一种描述现实世界概念数据模型、逻辑数据模型的有效方法,基本元素有实体、属性、标识符和联系
联系度数:联系中关联的实体数目
二元联系-基数:实体的实例与另一实体实例存在的数量对应关系,1/n,表示最大基数
实体参与关系:可选/强制,表示最小基数 p;
实体继承联系:表示实体的相似性,有公共属性的是父实体,有特殊性的是子实体
强弱实体联系:弱实体的存在必须以强实体的存在为前提,这是一个相对的概念
扩展建模实例o
概念数据模型
概念数据模型设计一般是采用E-R模型方法进行建模设计
CDM/LDM/PDM模型转换设计
当使用关系数据库时,物理数据模型(PDM)即为关系模型。CDM/LDM到PDM的转换其实就是E-R模型到关系模型的转换。
CDM/LDM转换
- LDM将CDM的多对多实体联系转化为易于关系数据库实现的一对多实体联系
- LDm将CDM中的标识符依赖实体进一步细化,并区分主键标识符< pi >和外键标识符< fi >,以便数据模型规范化处理
E-R模型到关系模型转换原理:
- 将每一个实体转换成一个关系表,实体属性转换为关系表的列,实体标识符转换为关系表的主键或外键。
- 将实体之间的联系转化为关系表之间的参照完整性约束。
弱实体转换为关系表
实体联系转换
实体继承联系转换
将父表中的主键放置到子表中,既做主键又做外键。
实体递归联系转换
数据库规范化设计
通常在LDM时期进行规范化设计完善,减少冗余数据,设计合理依赖约束关系,降低维护数据完整性一致性的工作量,访问更高效
问题:一个表中存在多个主题的数据,且大量重复出现
函数依赖理论
在关系模式R(U)中, U 为关系R的属性集合,X和Y为属性U的子集。设t,s是关系R中的任意两个元组,如果t[X] = s[X],则t[Y] = s[Y]。那么称Y函数依赖于X,表示为X→Y。此时函数依赖的左部称为决定因子,右部称为依赖函数。决定因子和依赖函数都是属性的集合。函数依赖反映属性或属性组之间相互依存、互相制约的关系,即关系表中属性之间的依赖关系。
完全函数依赖
设X、Y是某关系的不同属性集,如X→Y,且不存在X中的子集 X’使X’→Y,则Y称完全函数依赖,否则称Y部分函数依赖。
对于关系R(X, Y, N, O, P),其中(X,Y)为复合主键,若其它属性N,O,P都完整依赖于该复合主键,则称关系R为完全函数依赖。反之,其它属性N,O,P仅依赖于X,或仅依赖于Y,则称R为部分函数依赖。
函数传递依赖
对于关系R(X, N, O, P),其中X为主键,若属性N依赖于X,而X不依赖于N,属性O依赖于N。则属性O函数传递依赖于X。
多值函数依赖
对于教学关系R(课程, 教师, 课程参考书),一门课程可以有多个任课教师,也可以有多本参考书;每个任课教师可以任意选择他的参考书。该关系存在多值函数依赖。
关系规范化范式
1NF:关系表中的属性不可再细分,否则该表不是关系表
2NF:1NF基础上,消除关系中的属性部分函数依赖(多在复合主键里面)
有一个关系(A,B,N,O,P),其复合主键为(A,B),那么N,O,P这三个非键属性都不存在只依赖A或只依赖B情况,则该关系满足第2范式,反之,不满足第2范式。
3NF:2NF基础上,切断属性传递函数依赖
若有一个关系(A,N,O,P),主键为(A),那么非键属性N,O或P都不能由单个的N,O或P或它们的组合所确定。该关系满足第3范式。
BCNF:所有函数依赖的决定因子都是候选键
4NF:BCNF基础上,消除了多值函数依赖
逆规范化处理
规范化过高也会导致数据库性能降低,因此要适当降低规范化范式约束,允许适当的数据冗余性,以获取数据访问性能。可以通过增加冗余列或派生列,多个表合并为一个表进行处理。
数据库管理
概述
包括性能索引查询并发管理、角色用户对象权限管理、安全备份恢复等。
pgadmin4-Postgresql的数据库管理工具
事务管理
防止业务处理单元的一组操作中某一步出现错误导致混乱,事务是DBMS执行的最小任务单元、故障恢复单元、并发控制任务单元
生命周期状态变迁图
事务ACID特性
- 原子性(Atomicity):事务所有操作在数据库中要么全部执行,要么全部不执行。
- 一致性(Consistency):事务多次执行,其结果应一致。
- 隔离性(Isolation):事务与事务之间隔离,并发执行透明。
- 持续性(Durability ):事务完成后,数据改变必须是永久的。
1 | START TRANSACTION; |
并发控制
事务调度
多个事务在DBMS同时运行可能对共享数据同时访问,需要加以约束控制按照恰当顺序访问,否则导致数据不一致和死锁。在DBMS中,为使并发事务调度实现的处理结果与串行化调度处理结果一致,事务管理器将并发执行事务的SQL数据操作请求提交给并发控制调度器。由并发控制调度器将各个事务的SQL数据操作请求按照一定顺序进行调度执行,并完成对数据库缓冲区的读写操作。
数据不一致问题
丢失更新
T1、T2两个事务并发执行,它们均对数据库共享数据A进行了非锁定资源的读写操作。当事务T1和T2均读入该共享数据A并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
不可重复读
幻象读
事务T1按一定条件从数据库中读取某些数据记录后,事务T2在其中插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。称为幻象读取。与不可重复读类似。
脏数据读取
锁机制
事务对共享数据加锁访问,锁的粒度由数据库到表页面行
- 排它锁定(Lock-X)——锁定后,不允许其它事务对共享数据再加锁
- 共享锁定(Lock-S)——锁定后,只允许其它事务对共享数据添加读取锁
锁的相容性:排他锁与其他锁均不相容,共享锁之间相容
加锁协议
一级加锁协议:对共享数据修改时执行排它锁定指令,直到该事务处理完成才解锁。只能避免丢失更新问题。
二级加锁协议:一级协议基础上,对共享数据读操作进行共享锁定指令,读完数据立刻释放共享锁。避免丢失更新问题,脏读。
三级加锁协议:一级协议基础之上,对共享数据读操作进行共享锁定指令,直到事务处理结束才释放。避免丢失更新、脏读、不可重复读问题。
两阶段锁定协议
二阶段锁定协议可以保证可串行化调度
每个事务必须分两个阶段提出加锁和解锁申请:
- 增长阶段,事务只能获得锁,但不能释放锁。
- 缩减阶段,事务只能释放锁,但不能获得新锁。
死锁
事务同时锁定两个及以上资源可能出现彼此不能继续执行的状态
事务隔离
安全管理
存取安全模型
系统安全模型
用户管理
在DBMS中对每个用户进行管理
1 | --创建用户 |
权限管理
DBA对用户进行数据库系统/数据库对象访问操作/数据库对象定义操作的授予/收回/拒绝权限
1 | GRANT SELECT ON Department TO userA; |
角色管理
将一组相同权限的用户定义为角色
1 | CREATE ROLE <角色名> [ [ WITH ] option [ ... ] ]; --创建角色 |
为用户赋予角色
1 | CREATE USER "StudentUser" WITH |
数据库备份与恢复
数据库备份:对数据和状态(日志)进行副本复制
数据库恢复:从备份副本将数据库从错误状态恢复到某一正确状态
备份SAMPLE数据库到一个G磁盘的根目录文件Sample.bak中。
1 | BACKUP DATABASE SAMPLE |
从存储备份文件中恢复SAMPLE数据库。
1 | RESTORE DATABASE SAMPLE |
也可利用事务日志前滚或回滚方式进行数据库恢复
数据库应用编程
数据库连接技术ODBC
概念
传统应用开发通常选用特定DBMS管理系统,Microsoft推出开放式数据库互连(Open DataBase Connectivity,简写为ODBC)技术。ODBC定义了一套基于SQL的、公共的、与数据库无关的API,实现了应用程序对多种不同DBMS的数据库的访问,实现了数据库连接方式的变革。 ODBC使应用程序利用相同源码就可以访问不同数据库系统。
ODBC层次结构
ODBC使用步骤
- 使用ODBC管理器注册一个数据源
- 管理器根据数据源提供的信息(数据库位置类型及ODBC驱动程序)建立ODBC与具体数据库的联系
- 应用程序将数据源名提供给ODBC,让ODBC建立起连接
- 应用程序通过驱动程序管理器与数据库交换信息
- 驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序
- 驱动程序执行玩相应的sql操作后,通过驱动程序管理器将结果返回给应用程序
数据库连接技术(JDBC)
概念
JDBC(Java DataBase Connectivity,Java数据库连接)技术的简称 ,是一种用于执行SQL语句的Java API。它由一组用Java编程语言编写的类和接口组成。这个API由**java.sql.*包中**的一些类和接口组成,它为数据库开发人员提供了一个标准的API,使他们能够用纯Java API 来编写数据库应用程序。使用JDBC访问数据库需要相应数据库的JDBC驱动程序
1 | // 加载驱动 |
创建了Statement对象 ,就可以向Statement对象发送SQL语句。主要掌握两种执行SQL语句的方法:executeQuery()、executeUpdate()
- executeQuery():返回语句执行后的单个结果集的,所以通常用于select语句
- executeUpdate()返回值是一个整数,指示受影响的行数(可以用于update、insert、delete语句)
1 | // 保存结果集 |
数据库存储过程
存储过程,一种数据库对象,由一组能完成特定功能的SQL语句集构成,编译后存储在数据库服务端接受调用。能够减少网络通信量加快执行速度,不过开发调试复杂可移植性差。
1 | CREATE [ OR REPLACE ] FUNCTION/PROCEDURE name |
数据库触发器
触发器是一个定义在表或视图上的特殊类型的存储过程(不传递接受参数)、一个特殊的事务单位,由操作事件触发自动执行,可以实现比约束更复杂的数据完整性,用于加强数据完整性约束和业务规则
语句级触发器只执行一次(默认触发器);行级触发器每有数据变化一行就执行一次
INSTEAD OF触发器:事件发生时只执行触发器不执行原本的sql语句,一个表或视图只能有一个INSTEAD OF触发器
触发器相关特殊变量
NEW:RECORD类型,对于行级触发器其存有INSERT或UPDATE操作产生的新数据行。对于语句级触发器其值为NULL
OLD:RECORD类型,对于行级触发器其存有DELETE或UPDATE操作修改或删除的旧数据行。对于语句级触发器其值为NULL
TG_OP:text类型,值为INSERT/UPDATE/DELETE,说明引发触发器的操作
创建触发器步骤:
- 检查所依附的表或视图是否存在
- 创建触发器执行的触发器函数,返回类型为TRIGGER
- 创建触发器
1 | CREATE TRIGGER 触发器名 |
实例 为了防止非法修改stu_score表的课程成绩,创建audit_score表记录stu_score表的成绩变化
1 | -- 创建表 |
数据库游标
游标是一种存放了查询数据库表返回的数据记录的临时的数据库对象,包含查询结果和指针,提供了处理结果集中每一条记录的机制,它总是与一条查询SQL语句相关联
声明游标
1 | -- 声明游标 |
打开游标
使用游标
关闭游标
嵌入式sql编程
sql与宿主语言,混合编程
NoSQL数据库技术
大数据5V特征:大量,高速性,多样性,真实性,价值性
- 超量Volume
- 高速Velocity
- 异构Variety
- 真实Veracity
- 价值Value
CAP理论
在分布式的环境下设计和部署系统时,有3个核心的需求:CAP对应一致性(Consistency),可用性(Availability)和分区容忍性(Partition Tolerance)
CAP理论的核心:
一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
- CA - 单点集群,满足一致性,可用性的系统,
- CP - 满足一致性,分区容忍性的系统,
- AP - 满足可用性,分区容忍性的系统,
CAP目的:
- CAP是为了探索不同应用的一致性C与可用性A之间的平衡,
- 在网络或其他原因,通过牺牲一定的一致性C来获得更好的性能与扩展性
- 在有分隔发生,选择可用性A,集中关注分隔的恢复,需要分隔前、中、后期的处理策略, 及合适的补偿处理机制。
- 选择什么样的方式: 放弃P?放弃A?放弃C?BASE
BASE
- Basically Available –基本可用;系统能够基本运行,一直提供服务。
- Soft-state –软状态/柔性事务。”Soft state” 可以理解为”无连接”的, 而 “Hard state” 是”面向连接”的;系统不要求一直保持强一致状态。
- Eventual Consistency –最终一致性 系统在某个时刻达到最终一致性。
- BASE定义为CAP中AP的衍生,在分布式环境下, BASE是数据的属性,BASE强调基本的可用性,按照功能划分数据库
base特点
- ACID是事物的特征, A(原子性)C(一致性)I(隔离性)D(持久性),ACID的特点是强一致性、隔离性、采用悲观保守方法、难以变化;
- BASE的特点是弱一致性、可用性优先、采用乐观方法、适应变化并且简单快捷。
- 对数据不断增长的系统, 大数据环境下系统的可用性及分隔容忍性的要求要高于强一致性,很难满足事务要求的ACID特性。
最终一致性
- 强一致性:要求无论更新操作实在哪一个副本执行,之后所有的读操作都要能获得最新的数据。
- 弱一致性:用户读到某一操作对系统特定数据的更新需要一段时间,称这段时间为“不一致性窗口”。
- 最终一致性: 弱一致性的一种特例,保证用户最终能够读取到某操作对系统特定数据的更新。
存储模型
- 列存储数据库,将同一列的数据存储在一起,可以存储结构化和半结构化数据
- 键值存储数据库,存储的数据是有键(key)和值(value)两部分组成,通过key快速查询到其value,value的格式可以根据具体应用来确定
- 文档存储数据库,存储的内容是文档型的,可以用格式化文件(类似json、XML等)的格式存储
- 图存储数据库,数据以有向加权图方式进行存储
分类 | Examples举例 | 典型应用场景 | 数据模型 | 优点 | 缺点 |
---|---|---|---|---|---|
键值 (key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle DB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
列存储数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | CouchDB, MongoDb | 与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容 | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 |
图形(Graph)数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案 |