补充:4.19 数据库的安全机制
4.01 数据库系统前言
数据库模式
4.02 数据库模式 ——数据库三级模式&两级映射
考察:选择题
三级模式:
内模式 (Internal Schema)【物理级数据库】 :和内部存储形式直接关联
管的是如何去存储这一系列的数据 定义 :也称存储模式 (Storage Schema) ,它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式(例如,记录的存储方式是顺序存储、按照B树结构存储还是按hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定)。理解 :
一个数据库只有一个内模式; 一个表可能由多个文件组成,如: 数据文件、索引文件。它是数据库管理系统(DBMS)对数据库中数据进行有效组织和管理的方法 其目的有:
为了减少数据几余,实现数据共享; 为了提高存取效率,改善性能。 模式(Schema)【概念级数据库】 :用数据库时候,表呢个级别
将数据分成若干张表 定义 :也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。理解 :
一个数据库只有一个模式; 是数据库数据在逻辑级上的视图; 数据库模式以某一种数据模型为基础; 定义模式时不仅要定义数据的逻辑结构(如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等),且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系 外模式(External Schema)【用户级数据库】 :对应数据库里面的视图
提供了一些更灵活更安全的处理方式 比如用户登录的时候,只需要调用数据库中的用户名和密码 定义 :也称子模式(Subschema) 或用户模式是数据库用户(包括应用程序员和最终用户) 能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。理解 :
一个数据库可以有多个外模式; 外模式就是用户视图; 外模式是保证数据安全性的一个有力措施。
总结:
两级映射:
外模式-概念模式映射 :
表通过一定操作得到视图,表和视图直接存在映射,表发生变化的时候,我们只需要改动映射,不需要改应用程序了 概念模式-内模式映射 :
内部存储形式和表的情况一种映射关系,存储的结构发生改变,只用调整该映射关系,不用修改用户的应用程序
例题讲解【2021下】
考察:
聚簇索引 :是对磁盘上实际数据重新组织以按指定的值排序。由于是对磁盘的操作,所以属于内模式
例题讲解【2017下】
4.03 数据库模式 ——数据库设计过程
考察:了解流程和中间产出物
ER模型:看实体有哪些属性,看实体之间会有什么联系,这时候和DBMS还没有什么关系
数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS。 数据库管理系统产品主要是Oracle、IBM、Microsoft和Sybase、Mysql等公司的产品
E-R模型
4.04 E-R模型【考点】
1对1的联系:最少转成两个关系模式 1对多的联系:最少转成两个关系模式,且联系记录在N(多)的一端。
如果部门和员工的关系模式中,将部门号记录在员工的关系模式中 多对多的联系:最少转成三个关系模式,多对多的联系也必须转成一个关系模式
例题解释:
每个实体转一个关系模式 ,多对多的关系中联系也要转成一个关系模式,所以最少转为4个关系模式
例题讲解【2021上】
例题讲解【2017年上】
关系代数 与关系演算(元组演算,域演算)
数据库中存储了大量的关系(表)之后,要对其进行增删查改等操作,其一般通过SQL类语言来实现,而语言实现的基础就是对关系进行一定的集合(关系代数)或逻辑处理(关系演算、域演算),然后返回处理结果。
关系代数运算和关系演算运算有什么区别
关系代数运算是以元组为运算对象,有并、差、笛卡儿积、投影、选择 行有限次的复合运算。 关系演算运算是以元组或域为运算对象,由数理逻辑的谓词进行有限次的复合演算。
元组演算【关系演算其中一种】
元组演算是埃德加·科德导入的演算,是关系模型 的一部分,发展目的是提供宣告式的数据库查询语言。
关系代数
关系代数:以并、差、笛卡尔积、选择、投影、更名为基本操作,以交、连接、关系除为扩展操作。 原文
4.05 关系代数与元组演算
考察:综合知识里的选择题
笛卡尔积【符号X】:
将两个参与笛卡尔积的集合的属性一一列出来 将S1的第一条记录和S2的所有记录组合形成新的
投影:
是选列的一种操作 图中对Sno和Sname做了投影,则只有这两列的数据
选择:
选择的记录,也就是选择行的一种操作 图中Sno=No003,就会选出No003的行
联接:
联接操作一般符号下面会有条件
不写条件的称为:自然联接
这时候的联接条件就是两个关系当中相同的字段(比如这里的Sno) 联接操作之后,同字段只留一个
考题注意:需要使用投影留下Sno,Sname,Age三列
【先做联接操作在做投影】在自然联接情况下做投影操作是1,2,4
【先做笛卡尔积操作在做投影】如果换成笛卡尔积,则做投影操作时1,2,5
例题讲解【2021 下】
规范化理论
4.06 规范化理论——函数依赖
函数依赖:
如:y=x2 , 给定一个x能求出唯一的y,但是y不能求出x 在数据库中表示为:学号能求出唯一的姓名,但是同名的姓名不能求出唯一学号
两种特殊形式
部分函数依赖:
主键是两个部分的组合件时,主键当中的一部分可以确定某一个属性
传递函数依赖:(传递律)
A可以确定B,B可以确定C,则A可以确定C 前提是B不能确定A【不然就平级了】
补充知识:AmStrong公理 :
从已知的一些函数依赖,可以推导出另外一些函数依赖,这就需要一系列推理规则,这些规则常被称作“Armstrong 公理”。 合并规则:a1—>a2,a1—>a3,得出:a1—>a2a3 传递律:a1—>a2,a2—>a3,得出:a1—>a3
4.07 规范化理论——价值与用途
规范化理论就是为了来解决非规范化存在的问题:如上图 但是过去追求规范化也不可取,设计时候要始终甚至逆规范化来增加数据冗余
4.08 规范化理论——求候选关键字【考点】
掌握:(超键,候选键,主键),外键的概念和求候选关键字
超键,候选键,主键
超键:
超键和候选键区别:
候选键:
超键和候选键举例:
学号,姓名,性别 其中(学号+姓名),就可以称为超键,但是不能称为候选键
因为一个学号就可以确定性别,这样姓名就算是冗余属性
候选键和主键的区别:
候选键可以有多个 主键只能有一个 比如学号和身份证只能选一个为主键
外键
概念:
提出原因:
举例:
求解候选键【考点】
图示法步骤:
将一个关系模式画成图形的形式
画图时遇到(A,B,C—>D),就将三者连线之后再指向D,而不是分别画3条线 找出入度为0的属性
没有指入的结点,称为入度为0的属性 若没有入度为0的属性,就去找中间结点【既有入度,又有出度】 尝试用该结点遍历整个图,如果能遍历,则说明该结点就是**候选键**
例题演示:
第一题:简单题 第二题:需要ABCD组合才能遍历所有属性 第三题:没有入度为0的结点时候,去找中间结点(既有入度,又有出度),且不能写成AB,不然表示的是AB组合才能推出C
例题讲解【2021下】
考察:
求候选码 从已知的一些函数依赖,可以推导出另外一些函数依赖,这就需要一系列推理规则,这些规则常被称作“Armstrong 公理”。——函数传递特殊形式
例题讲解【2017上】
4.09 规范化理论——范式【重点考点】
主属性与非主属性区别:
主属性:指属于候选键的一部分 非主属性:不出现在候选键的属性就为非主属性
范式:
规范化程度越高,往往数据的密度越小 提高范式的级别,一般都是进行数据表的拆分 表拆的太细的时候,就会带来性能低的问题 所以实际开发一般用到3NF
1NF:第一范式
概念:
答:不满足,因为高级职称人数低下又分为教授和副教授 解决:直接把高级职称人数删除掉即可
2NF:第二范式
从1NF到2NF:消除非主属性对候选码的部分依赖 总结就是一个主键
发生部分依赖的例子:
此时这里就有部分依赖:课程号和学号组成的候选码,才能对应找出成绩,但是一个课程号就能对应学分(这里就发生了部分依赖)
部分依赖会存在的问题:
数据冗余:课程和学分其实只用存在一次 更新异常:只更新了前两个,就会发生更新异常 插入异常:新开了一个课程和学分,但是没有人考试时就无法插入 删除异常:当删除成绩的时候,连带学分一并删除了
解决方案:分表
将课程号和学分列提取出来形成一个新的关系模式 将原来的关系模式中的学分列删除掉,留下课程号做外键 总结就是一个主键
例题讲解【2017下】
3NF:第三范式
其实就是在第二范式的基础上,做到消除非主属性对候选键的传递依赖
发生传递依赖的例子: 传递依赖会存在的问题:
数据冗余:课程和学分其实只用存在一次 更新异常:只更新了前两个,就会发生更新异常 插入异常:新开了一个课程和学分,但是没有人考试时就无法插入 删除异常:当删除成绩的时候,连带学分一并删除了
解决方案:分表
将DNO,DNAME,LOCATION三列独立出来一个关系模式 原来的关系模式只留下SNO,SName,DNO
BC范式
通俗点讲:把所有函数依赖写出来,函数依赖的左边部分,必须是候选键。
消除主属性对候选键的传递依赖
不是BC范式的例子:
候选键为:SJ和ST(因为T可以确定J)【两个候选键都可以遍历完所有的结点】 此时SJ函数关系当中可以推出T T函数关系可以推出J 但是T不属于候选键,所以该关系模式不属于BC范式
4.10 规范化理论——范式练习题
第一问:
不属于3NF的情况有两种
达到了2NF,没有达到3NF 连2NF都没有达到 选D
第二问:
1对多的联系时候:最少转成两个关系模式,且联系记录在N(多)的一端。 本地职工和部门是多对一的关系,则将部门号记录在职工一端 选D
第三问:
第二问已经建立了部门号和职工号的关系,所以C,D排除 B选项中的商品名称不需要(冗余了),因为通过商品号就可以得到 选A
4.11 规范化理论——模式分解
前言:当范式级别不够的时候,主要进行模式的拆分,这样级别就上去了,拆分的时候有不同的拆分机制,原则需要注意,下面就主要将两个分解的要求
保持函数依赖的分解
分解之前有那些函数依赖,分解之后这些函数依赖仍然存在
将原关系模式当中的所有函数依赖关系,都能写到新拆分出来的关系模式当中,有缺失则不行
举例:
这里R1和R2就保持了函数依赖的分解 这里R1和R3就没有
若有冗余性质的函数依赖,不要求保留:
无损分解
有损和无损区别:
有损和无损对应到规范化理论中:
有损分解:把一个R的关系模式拆成3个之后,没办法在还原成R 无损分解:把一个R的关系模式拆成3个之后,通过自然联接和投影等运算仍能还原到原来的关系模式
例题讲解:
例题讲解:(书上判断无损分解的第一方式:表格法)——了解
先画出初始表:
a:表示当前关系模式真正拥有的属性【只有列的数字】
b:表示当前关系模式不拥有的属性【有行和列的数字】
根据每一个函数依赖,对表进行更新:
例题讲解【2021上】
例题讲解【2017下】
例题讲解:(书上判断无损分解的第二方式:公式法)——了解、
局限性很强:
步骤:
先做交集求出一个属性 然后分别做减操作,求出来的属性与前面交集属性做函数依赖 若题中有其中一个相同的函数依赖则表示无损
并发控制
4.12 并发控制——数据库并发控制
考察:事务基本情况,并发的了解
事务
概念:
把多个操作封装起来,看成一个整体来操作 要么全做,要么全不做
举例:
比如银行转账,如果不把多个操作封装,就会出现,我这里转出了,但是你呢没有转入
事务四大特性:
原子性:将多个操作看成一个原子值 一致性:事务执行之前,数据保持一致的状态,执行之后也是一致的状态
隔离性:事务之间是独立进行的 持续性:事务执行之后的结果,其影响是持续的
事务是并发,并行的前提条件
数据库并发控制
并发操作存在的问题: 在多用户共享的系统中,许多用户可能同时对同一数据进行操作,可能带来数据不一致的问题。为了解决这类问题,数据库系统必须控制事务的并发执行,保证数据库处于一致的状态,在并发控制中引入两种锁:排他锁(写锁)X锁和共享锁(读锁)S锁。
丢失更新
不可重复读
读“脏”数据
“脏”数据:指不是真正的数据,不是执行过程中真正产生的数据,而只是一个临时值(无作用)
读锁(共享锁Share Locks)与写锁(排他锁Exclusive Locks)的区别:
S锁:共享锁(读锁),X锁:排他锁(写锁) S锁 :加上之后,别人还可以再加S锁,但是不能加X锁
用于对数据进行读操作时进行锁定。 如果事务T对数据A加上了S锁后,事务T就只能读数据A但不可以修改,其他事务可以再对数据A加S锁来读取,只要数据A上有S锁,任何事务只能在对其加S锁(读取)而不能加X锁(修改) X锁 :加上之后,不能加任何锁
用于对数据进行写操作时进行锁定。 如果事务T对数据A加上X锁后,就只允许事务T读取和修改数据A,其他事务对数据A不能再有任何锁,其他事务也不能读取和修改数据A,直到事务T释放A上的锁
为了解决问题—提出几级封锁协议:
一级封锁协议——解决丢失更新:在T1读之前加X锁,加锁之后T2不能对A进行操作,只有等到T1完成之后T2才能进行 二级封锁协议——解决丢失更新和读“脏”数据:在一级封锁协议之前先加S锁,读完后即可释放S锁 三级封锁协议——解决丢失更新和读“脏”数据和数据重复读:在一级封锁协议之前先加S锁,直到事务结束才释放【释放时间和二级封锁不同】 两段锁协议:可串行化的【引入后可能发生死锁】
死锁问题:【加封锁协议就可能发生死锁】
例题讲解2017上
数据库完整性约束
4.13 数据库完整性约束
实体完整性约束
使用数据库的时候,会给数据表定义主键 实体完整性约束:就是约束主键不能为空和重复
参照完整性约束
之前将理论体系的时候,外键这一部分的完整性约束 参照完整性约束:填入的数据必须是对应表里面主键的内容【允许为空和正确的数据】
比如:员工表中的部门号,就要参照部门表中的数据进行填写,不能乱填
用户自定义完整性约束
用户可以设置一个属性,它的值得情况。
比如:用户表中的年龄,用户就可以自定义该属性不能为负数和超过200
总结:上面三个约束主要为了提高数据的可靠性的机制,但是只能处理简单问题,如果遇到困难问题还需要引入触发器问题
分布式数据库
4.14 分布式数据库——数据库安全
考察:了解数据库安全有那些措施
用户标识和鉴定问题:
存取控制【也就是访问控制】:
密码的存储和传输:
视图的保护:
审计:
事后的一种机制,把用户对数据库的操作记录下来【用日志的方式】,做后期分析
4.15 分布式数据库——数据库备份与恢复【考点】
考察:备份的形式和优缺点
数据备份部分
数据备份的第一种分类方式
冷备份
也称静态备份
优点:
缺点:
数据库备份的这段时间里,是不能正常走业务的 不能按表或按用户来恢复(只能直接全部备份,不能细致化)
热备份
也称动态备份
优点:
灵活度高 可以精确的备份或恢复某一个表 恢复起来速度快
缺点:
数据备份的第二种分类方式
依据备份数据的量来区分的
完全备份
差量备份
增量备份
增量备份的缺点:若周六出故障了要从周一重新来一遍
若周一出故障,则先恢复周日的完全备份,再恢复周一增量部分 若周三出故障,则先恢复周日的完全备份,再分别恢复周一,周二,周三增量部分 这时候差量备份就会好点:先恢复周日的,后直接恢复周四的差量部分 所以这三者有机的结合才能更好的做恢复工作
数据备份的第三种分类方式
转储:就是做备份 海量:指所有数据 增量:指上一次转储之后的 静态:不运行状态 动态:运行状态
日志文件
由来:在第二天数据备份前,如果发生故障,则在这段空白期没有备份的数据将丢失,就会导致数据恢复不完整 这种问题的解决方式:日志体系
在做任何数据库操作(增,删,改)之前,先去写日志(记录sql语句),再去做数据文件
数据库故障与恢复部分
数据仓库与数据挖掘
4.16 数据仓库与数据挖掘
考察:了解相关概念,区分数据仓库和数据库
这项技术的应用场景:商业智能(Business Intelligence,简称:BI)
数据库与数据仓库的区别: 数据库:
根据业务的需求,需要处理那些业务就将那些数据记录下来 随着使用时间增加,数据量增加之后,性能开始下降
优化:删除历史数据 但是删除的数据对于后期决策有用,所以就单独拿出来一个地方存储这个地方就叫:数据仓库
数据仓库:
存储的都是需要删除的留存数据,所以在这里对查询的要求很高,但对增,删,改要求不大 这时候对数据库的优化和原本数据库就不一样了【特殊的一种数据库】 特点:
面向主题 :比如从商品系统提取商品,从仓库系统提前商品号,然后再将各个系统提取出来的数据组成一个主题来进行后期决策
集成的 :比如将商品系统的日报,月报都存到一起
相对稳定的(非易失的) :存进去的数据不做增,删,改操作了反应历史变化(随着时间变化) :定时间段来存储新的数据
数据仓库的建立过程:
数据源层次 :做抽取,清理(格式的统一),装载,刷新操作数据仓库层次 :含有数据集市(部门级别的数据仓库,分期来建立数据仓库,从而降低风险),多个数据集市整合成企业级的数据仓库OLAP服务器层次 :联机分析处理服务器(专门做分析,处理)表层前端工具层次 :查询,报表,分析,数据挖掘工具
查询,报表,分析工具的目标性很强 数据挖掘工具 目标性不明确,可能挖掘到人类不知道的事务或特性,挖到之后可以运用到商业领域。
比如:老用户偏好什么样子的产品对应那些营销手段可以提高购买率 经过多年的发展,现在有很多种算法能实现
数据挖掘方法分类:
4.17 反规范化技术
也叫逆规范化技术——核心在于提高查询效率,以牺牲空间换时间 由来:数据表规范化程度不高,会有过多的冗余,但是规范化越高分表越多,就会出现新的问题【增加了查询的工作量,要关联多表查询】
技术手段:
4.18 大数据基本概念
概念:
这些数据的特点:
**常见大数据场景:**对多种类别的数据进行联合分析,得出结论
现在与云计算等新兴技术配合使用
大数据与传统数据的区别
4.19 SQL注入攻击问题
考点:SQL注入攻击的首要目标是:获得数据库的权限
例题讲解【2021上】
4.19 数据库的安全机制
存储过程 (Stored Procedure) :是在大型数据库系统中,一组为了完成特定功能的SOL 语句集,它存储在数据库中,一次编译后永久有效用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升,而通过提供存储过程供第三方开发人员调用进行数据更新,从而保证数据库的关系模式不被第三方所获取。触发器 :是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、Insert、Delete 这些操作时,SOL Server 就会自动执行触发器所定义的SOL语句,从而确保对数据的处理必须符合由这些SQI语句所定义的规则。视图 :通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。索引 :是对数据库表中一列或多列的值进行排序的种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
例题讲解【2021下】