第三章 数据系统
3.1 基本概念
3.1.1 数据库体系结构
集中式数据库系统(可单机使用)
- 数据是集中的;
- 数据管理是集中的;
- 数据库系统的素有功能(从形式的用户接口到DBMS核心)都集中再DBMS所在的计算机;
C/S结构 B/S结构
- 客户端负责数据表示服务;
- 服务器猪瑶负责数据库服务;
- 数据库系统分为前端和后端;
- ODBC、JDBC;
分布式数据库
- 物理上分布、逻辑上集中;
- 物理上分布、逻辑上分布;
- 透明性;
特点
- 数据独立性。除了数据逻辑独立性与物理独立性外,还有数据分布独立性(分布透明性)。
- 集中与自治共享结合的控制结构。各局部的DBMS可以独立的管理局部数据库,具有自治的功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。
- 适当增加数据冗余度。在不同的场地存储同一数据的多个副本,可以提高系统的可靠性和可用性,同时也能提高系统性能;
- 提高系统的可用性,即当系统中某个节点发生故障时,因为数据有其他副本再非故障场地上,对其他所有场地来说,数据仍然时可用的,从而保证数据的完备性;
- 全局一致性、可串性和可恢复性;
透明性
- 分片透明;是指用户不必关心数据是如何分片/块的,它们对数据的操作在全局关系上进行,即如何分片对用户是透明的。
- 赋值透明;用户不用担心数据库在网络中各个节点的赋值情况,被复制的数据的更新都由系统自动完成。
- 位置透明;是指用户不必知道所操作的数据放在何处,即数据分配到哪个或哪些节点存储对用户是透明的。
- 局部映射透明性(逻辑透明);是最低层次的透明性,该透明性提供数据到局部数据库的映象,即用户不必关心局部DBMS支持哪种数据模型、使用哪种数据操纵语言,数据模型和操纵语言的转换是由系统完成的。因此,局部映像透明性对异构型和同构异质的分布式数据库系统是非常重要的。
并行数据库
- 共享内存式;
- 五共享式;
3.1.2 三级模式结构
三级模式,两级映像
概念模式也可称为模式
- 外模式-概念模式映射
- 逻辑独立性:数据的逻辑结构发生变化后,用户程序可以不修改,为了保证应用程序可以正常执行,需要修改外模式和概念模式之间的映射。
- 例如,我们和第三方对接,不会直接提供表结构,只提供对应的字段,当我们的表结构发生变化时,只需要修改对应的字段映射即可。
- 概念模式-内模式映射
- 物理独立性:当数据的物理结构发生变化后,应用程序不需要修改,为了保证应用程序可以正常执行,需要修改概念模式和内模式之间的映射。
- 例如,当我们的数据库存储位置发生变化时,数据库移动,只需要修改;数据库的地址即可。
三个模式和数据库的对应关系
外模式-视图
模式/概念模式-基本表
内模式-存储文件
3.1.3 仓库模式
特点
-
面向主题
- 数据按主题组织。
-
集成的
- 消除了源数据中的不一致性,提供整个企业的一致性全局信息。
-
相对稳定的(非易失的)
- 猪瑶进行查询操作,只有少量的修改和删除操作(或是不删除)。
-
反映历史变化(随着时间变化)
- 记录了企业从过去某一时刻到当前各个阶段的信息,可对发展历程和未来趋势做定量分析和预测。
- OLAP:联机分析
- OLTP:联机事务(数据库)
3.2 数据库设计过程
3.3 概念设计阶段
3.3.1 概念设计过程
- 集成的方法:
- 多个局部E-R图一次集成;
- 逐步集成,用累加的方式一次集成两个局部E-R;
- 集成产生的冲突及解决办法:(针对同一个对象)
- 属性冲突:包括属性域冲突和属性取值冲突。
- 命名冲突:包括同名异议和异名同义。
- 结构冲突:包括同一个对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同;
3.3.2 E-R图
- 实体:实体是现实世界中可以区别于其他对象的事件或事物;
(实体集-实体的集合)
- 属性:属性是实体某方面的特性;
- 简单属性和复合属性
- 简单属性是原子的,不可再分的;
- 复合属性可以细分为更小的部分(即划分为别的属性)
- 单值属性和多值属性
- 定义的属性对于一个特定的实体都只有一个值,称为单值属性;
- 在某些特定情况下,一个属性可能对应一组值,称为多值属性;
- NULL属性:表示无意义或不知道;
- 派生属性:可以从其他属性得来;
- 简单属性和复合属性
- 联系:实体的联系分为实体内部的联系和实体与实体之间的联系。
扩充的E-R模型
- 弱实体:不能单独存在,只能依赖另一些实体;
- 特殊化:在现实世界中,某些实体一方面具有一些共性,另一方面还具有各自的特性,例如,企业中,员工作为一个实体,经理也属于员工,但是经理就是特殊化
- 聚集:一个联系作为另一个联系的一段
3.4 逻辑结构设计阶段
3.4.1 关系模式相关概念
- 数据模型
- 层次模型
- 网状模型
- 关系模型
- 面向对象模型
- 数据模型三要素
- 数据结构
- 数据操作
- 数据的约束条件
3.4.2 关系模型
基本概念
- 目或度:关系模型中属性的个数;
- 候选码(候选键):唯一标识,且无冗余;
- 例如:学生实体
- 学号
- 姓名
- 身份证号
- 性别
- 学号和身份证号就是候选码;
- 例如:学生实体
- 主码(主键)
- 主属性与非主属性:组成候选码的属性就是主属性,其他的就是非主属性;
- 外码(外键):其他关系的主键;
- 全码(ALL_Key):关系模式的所有属性组是这个关系的候选码;
关系的3种类型
- 基本关系
- 查询表
- 视图表
完整性约束
- 实体完整性约束:主键:唯一、非空
- 参照完整性约束:外键:要么是其他主键、要么为空
- 用户自定义完整性约束
- 触发器
3.4.3 E-R图转关系模型
- 一个实体型必须转换为一个关系模式
- 联系转关系模式:
- 一对一联系的转换有两种方式
- 独立的关系模式:并入两端主键及联系自身属性。(主键:任一端主键)
- 归并(任意一端):并入另一端主键及联系自身属性。(主键:保持不变)
- 一对多联系的转换有两种方式
- 独立的关系模式:并入两端的主键及联系自身属性。(主键:多端主键)
- 归并(多端):并入另一端主键及联系自身属性。(主键:保持不变)
- 多对多联系的转换只有一种方式
- 独立的关系模式:并入两端主键及联系自身属性。(主键:两端主键的组合键)
3.5 关系代数
-
并集 S 1 ∪ S 2 = S 1 + S 2 − S S1∪S2 = S1 + S2 - S S1∪S2=S1+S2−S
-
交集 S 1 ∩ S 2 = S S1∩S2 = S S1∩S2=S
-
差集 S 1 − S 2 = S 1 + S 2 − S S1-S2 = S1 + S2 - S S1−S2=S1+S2−S
-
笛卡尔积 S 1 × S 2 S1×S2 S1×S2
-
投影 $ π_{学号, 姓名, 年龄}$ 相当于 select
-
选择 选 择 学号 = 001 选择_{学号=001} 选择学号=001 相当于筛选记录 where
-
自然连接 S 1 ∞ S 2 S1 ∞ S2 S1∞S2
3.6 规范化理论
3.6.1 基本概念
函数依赖
X
→
Y
X→Y
X→Y
解析
-
X决定Y,Y依赖X
-
X:决定因素
-
Y:被决定因素
关系模式: R ( A , B , C ) R(A,B,C) R(A,B,C)
- 依赖集1: { A B − > C , A − > C } \{AB->C, A->C\} {AB−>C,A−>C} 属性C部分函数依赖
- 依赖集2: { A − > B , B − > C } \{A->B, B->C\} {A−>B,B−>C} 由A->B, B->C, 可以得出A->C, 此为传递函数依赖、冗余依赖
Amstrong公理体系
关系模式R<U,F>来说有以下的推理规则:
-
设置 U = { A , B , C } U=\{A,B,C\} U={A,B,C}
-
A1.自反律(Reflexivity):若Y⊆X⊆U,则X→Y成立; X = { B , C } X=\{B,C\} X={B,C}, Y = { B } Y=\{B\} Y={B}
-
A2.增广律(Augmentation):若Z⊆U且X→Y,则XZ→YZ成立;
-
A3.传递律(Transitivity):若X→Y且Y→Z,则X→Z成立;
根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:
- 合并规则:由X→Y,X→Z,有X→ZY。(A2,A3)
- 伪传递规则:由X→Y,WY→Z,有XW→Z。(A2,A3)
- 分解规则:由X→Y及Z⊆Y,有X→Z。(A1,A3)
候选键
[!NOTE]
唯一标识,且没有冗余
图示法求候选键
- 将关系的函数依赖关系,用“有向图”的方式表示。
- 找出入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有节点,则该属性集即为关系模式的候选键。
- 若入度为0的属性集不能遍历图中所有节点,则需要尝试性的将一些中间节点(即有入度,也有出度的节点)并入入度为0的属性集中,直至该集合能遍历所有节点,集合为候选键。
-
例题:给定关系R(A1,A2,A3,A4)上的函数依赖集 F = { A 1 → A 2 , A 3 → A 2 , A 2 → A 3 , A 2 → A 4 } F=\{A1→A2, A3→A2, A2→A3, A2→A4\} F={A1→A2,A3→A2,A2→A3,A2→A4},R的候选关键字为();
-
有向图:
-
R的候选关键字为A1
-
-
例题:关系模式P(A,B,C,D,E,F,G,H,I,J),满足下列函数依赖: F D = { A B D → E , A B → G , B → F , C → J , C J → I , G → H } FD=\{ABD→E,AB→G,B→F,C→J,CJ→I,G→H\} FD={ABD→E,AB→G,B→F,C→J,CJ→I,G→H},求候选码?
- 候选码:(A,B,C,D)组合键
-
例题:关系R(A,B,C)满足下列函数依赖: F = { B → C , B → A , A → B C } F=\{B→C,B→A,A→BC\} F={B→C,B→A,A→BC},关系R的候选关键字为()。
- 候选关键字:(A和B)
主属性和非主属性
定义:组成候选码的属性就是主属性,其他的就是非组属性。
3.6.2 范式判断
不满足范式会产生的结果:
- 数据冗余
- 修改异常
- 插入异常
- 删除异常
第一范式(1NF)
在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式(1NF)。
-
例如:关系模式R(系名称,高级职称人数)是否满足第一范式(1NF),如果不满足,如何调整?
系名称 高级职称人数 教授 副教授 计算机系 6 10 电子系 3 5 - 不满足每个属性都是不可再分的特性
第二范式(2NF)
当且仅当关系模式R是第一范式(1NF),且每个非主属性完全依赖候选键(没有不完全依赖)时,则称关系模式R时第二范式(2NF)。
- 例题:关系模式SC(学号,课程号,成绩,学分),其中:(学号,课程号)→成绩,课程号→学分,会存在哪些问题,解决方案是什么?
学号 | 课程号 | 成绩 | 学分 |
---|---|---|---|
S001 | C01 | 75 | 4 |
S002 | C01 | 89 | 4 |
S003 | C01 | 69 | 4 |
S004 | C01 | 98 | 4 |
S001 | C02 | 85 | 2 |
S002 | C02 | 58 | 2 |
S001 | C03 | 88 | 5 |
… | … | … | … |
解题步骤
-
找候选键
-
找非主属性
-
判断是否存在非主属性部分依赖
解题:
- 找候选键
- (学号,课程号)
- 找非主属性
- (成绩,学分)
- 判断非主属性是否部分依赖
- 学分部分依赖候选码
结论:该关系模式只满足1NF,未满足2NF
解决方案:分解关系式,{学号,课程号,成绩}、{课程号,学分}
第三范式(3NF)
当且仅当关系模式R是第二范式(2NF),且R中没有非主属性传递依赖于候选键时,则称该关系模式是第三范式(3NF)。
BC范式(BCNF)
设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。
3.6.3 模式分解
-
保持函数依赖分解
- 冗余函数依赖不需要考虑保持函数依赖
-
无损分解
- 什么是无损,什么是有损,有损:不能还原,无损:可以还原
- 无损连接分解:只将一个关系模式分解成若干个关系模式后,通过自然连接等运算仍能还原到原来的关系模式,不能进行选择或投影;
-
表格法
- 将原分解表格画出来
- 寻找同名属性
- 根据同名属性寻找决定因素(左侧)
- 如果有一行全部还原,则为无损分解
-
无损分解(公式法)
3.7 SQL语言
3.7.1 普通查询
分类 | 动词 |
---|---|
数据查询 | SELECT |
数据定义 | CREATE、DROP、ALTER |
数据操纵 | INSERT、UPDATE、DELETE |
数据控制 | GRANT(赋予权限)、REVOKE(收回权限) |
SELECT (ALL|DISTINCT) <目标表达式> [,<目标表达式>]...
FROM <表名> [, <表名>]
[WHERE <条件表达式>]
[ORDER BY <列名2> [ASC|DESC]...]
3.7.2 分组查询
GROUP BY <列名1>[HAVING<条件表达式>]]
- 统计:COUNT
- 平均值:AVG
- 最大值:MAX
- 最小值:MIN
- 对分组结果进行筛选:HAVING
3.7.3 权限控制
授权语句
GRANT <权限>[,<...n>]
ON <对象类型><对象名>
TO <用户>[,...n]
WITH GRANT OPTION(获取权限的用户还可以将权限赋予其他用户)
收回权限语句
REVOKE <>[,...n]
ON <对象类型><对象名>
TO <用户>[,...n]
[RESTRICT|CASCADE](RESTRICT:不级联收回,CASCADE:级联收回)
3.8 并发控制
3.8.1 事务的特性
数据库执行的基本单位
四大特性(ACID)
- 原子性(Atomicity):事务时原子的,要么做,要么都不做。
- BEGIN:开始事务
- END:结束事务
- COMMIT:提交
- ROLLBACK:回滚
- 一致性(Consistency):事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。
- 隔离性(Lsolation):事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
- 持续性/持久性(Durability):一旦事务成功提交,即使数据库奔溃,其对数据库的更新操作也永久有效。
3.8.2 并发问题
并发产生的问题
- 丢失更新
- 多次写回,第一次会被覆盖
- 不可重复读问题
- 验算前,其他事务对数据其进行修改
- 读”脏“数据
- 无效中间数据(被回滚)
3.8.3 封锁协议
死锁可以预防或者手动解锁
3.9 数据库设计(下午题)
3.9.1 数据库设计过程
3.9.2 理论基础
3.9.3 答题技巧
- 结合题干
- 掌握基本知识
- E-R图
- 联系类型判断
- 1:1
- 1:*
- *:* 或 m:n
- E-R图转关系模式
- 主键、外键判断
- 规范化理论