数据库系统概论 ---知识点大全(期末复习版)
(一)绪论数据(Data):是数据库中存储的基本对象
数据的定义:形貌事物的符号记载
数据的种类:笔墨、图形、图象、声音等
数据的特点:数据与其语义是不可分的
数据库(Database,简称DB):是长期储存在计算机内、有构造的、可共享的大量数据集合
https://img-blog.csdnimg.cn/89779593a21942c2814e2b1a89ac21e7.png
数据库管理系统(Database Management System,简称DBMS):是位于用户与操纵系统之间的一层数据管理软件。
DBMS的用途:科学地构造和存储数据、高效地获取和维护数据。
DBMS的主要功能:
数据库的运行管理 保证数据的安全性、完整性 多用户对数据的并发使用
发生故障后的系统恢复 数据库的建立和维护功能(实用步伐) 数据库数据批量装载
数据库转储 介质故障恢 数据库的重构造 性能监视等
数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。
数据库系统的构成:由数据库、数据库管理系统(及其开辟工具)、应用系统、数据库管理员(和用户)构成。(三树一人)
数据管理:对数据举行分类、构造、编码、存储、检索和维护,是数据处理的中心题目
数据模子这个工具来抽象、表示和处理现实天下中的数据和信息。
https://img-blog.csdnimg.cn/d6c29e0986814559a9d4565a5db0478a.png
数据模子分成两个差别的层次
https://img-blog.csdnimg.cn/f8db9f9bd079453fbb060ec01ac14a38.png
(1) 概念模子 也称信息模子,它是按用户的观点来对数据和信息建模。
(2) 数据模子 主要包罗网状模子、层次模子、关系模子等,它是按计算机系统的观点对数据建模。
客观对象的抽象过程---两步抽象:① 现实天下中的客观对象抽象为概念模子;② 把概念模子转换为某一DBMS支持的数据模子。
数据结构:对象类型的集合 即数据结构是对系统静态特性的形貌
两类对象:①与数据类型、内容、性质有关的对象 ②与数据之间接洽有关的对象
数据操纵:对数据库中各种对象(型)的实例(值)允许实行的操纵及有关的操纵规则
数据操纵的类型:检索 更新(包罗插入、删除、修改)
数据模子对操纵的定义:
①操纵简直切寄义 ;②操纵符号;③操纵规则(如优先级);④ 实现操纵的语言数据模子对操纵的定义
数据操纵是对系统动态特性的形貌。
数据模子对约束条件的定义:反映和规定本数据模子必须遵守的基本的通用的完整性约束条件。提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。
信息天下中的基本概念
(1) 实体(Entity)
客观存在并可相互区别的事物称为实体。
(2) 属性(Attribute)
实体所具有的某一特性称为属性。
一个实体可以由若干个属性来描画。
(3) 码(Key)
唯一标识实体的属性集称为码。
(4) 域(Domain)
属性的取值范围称为该属性的域。
(5) 实体型(Entity Type)
用实体名及其属性名集合来抽象和描画
同类实体称为实体型
(6) 实体集(Entity Set)
同型实体的集合称为实体集
接洽(Relationship)
现实天下中事物内部以及事物之间的接洽在信息天下中反映为实体内部的接洽和实体之间的接洽。
实体内部的接洽通常是指构成实体的各属性之间的接洽 。
实体之间的接洽通常是指差别实体集之间的接洽。
两个实体型间的接洽
[*]一对一接洽
[*]假如对于实体集A中的每一个实体,实体集B中至多有一个实体与之接洽,反之亦然,则称实体集A与实体集B具有一对一接洽。记为1:1。
[*]一对多接洽
[*]假如对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之接洽,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之接洽,则称实体集A与实体集B有一对多接洽记为1:n
[*]多对多接洽(m:n)
[*]假如对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之接洽,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之接洽,则称实体集A与实体B具有多对多接洽。记为m:n
https://img-blog.csdnimg.cn/994cfbb16f4a45999abd398c7e1331c8.png
概念模子的表示方法
实体-接洽方法(E-R方法):
①用E-R图来形貌现实天下的概念模子;
②E-R方法也称为E-R模子;
常用数据模子
非关系模子:层次模子(Hierarchical Model);网状模子(Network Model )
2.数据结构:以基本层次接洽为基本单元
基本层次接洽:两个记载以及它们之间的一对多(包罗一对一)的接洽
[*]面向对象模子(Object Oriented Model)数据结构:对象
[*]关系模子(Relational Model) 数据结构:表
[*]层次模子满足下面两个条件的基本层次接洽的集合为层次模子。①有且只有一个结点没有双亲结点,这个结点称为根结点 ②根以外的其它结点有且只有一个双亲结点
表示方法
实体型:用记载类型形貌。每个结点表示一个记载类型。
属性:用字段形貌。每个记载类型可包含若干个字段。
接洽:用结点之间的连线表示记载(类)型之间的一对多的接洽。
https://img-blog.csdnimg.cn/60e34ff48f2d44568156ecdc3993b86e.png
层次模子的特点:
https://img-blog.csdnimg.cn/8f1538750b1a47ad96105d7d6bdc2ddc.png
层次模子的优缺点:
https://img-blog.csdnimg.cn/3d1dfcbd1dc04b7da68ff5eecad30d24.png
网状数据模子的数据结构
网状模子:满足下面两个条件的基本层次接洽的集合为网状模子。①允许一个以上的结点无双亲;②一个结点可以有多于一个的双亲。
表示方法(与层次数据模子相同)
实体型:用记载类型形貌。 每个结点表示一个记载类型。
属性:用字段形貌。 每个记载类型可包含若干个字段。
接洽:用结点之间的连线表示记载(类)型之间的一对多的父子接洽。
https://img-blog.csdnimg.cn/8b03913e828945b2bc060fd3902081b3.png
网状模子与层次模子的区别 : 网状模子允许多个结点没有双亲结点 ;网状模子允许结点有多个双亲结点; 网状模子允许两个结点之间有多种接洽(复合接洽) ;网状模子可以更直接地去形貌现实天下 ;层次模子现实上是网状模子的一个特例
网状模子的优缺点:
https://img-blog.csdnimg.cn/d006bc0f5a43490b9c8bcdc9839b829e.png
关系模子的基本概念
关系(Relation)一个关系对应通常说的一张表。
元组(Tuple)表中的一行即为一个元组。
属性(Attribute)表中的一列即为一个属性,给每一个属性起一个名称即属性名。关系必须是规范化的,满足肯定的规范条件
表示方法
实体型:用关系表表示
属性:用属性名表示
接洽: 一对一:隐含在实体对应关系中
一对多:隐含在实体对应关系中
多对多:用新的关系表表示
关系必须是规范化的,满足肯定的规范条件,如 不允许表中还有表。最基本的规范条件:关系的每一个分量必须是一个不可分的数据项。
关系数据模子的优缺点
https://img-blog.csdnimg.cn/b6356c750fb840188712904eb879ef62.png
关系数据模子的操纵与完整性约束
[*]查询、插入、删除、更新
[*]数据操纵是集合操纵,操纵对象和操纵结果都是关系,即若干元组的集合
[*]存取路径对用户隐蔽,用户只要指出“干什么”,不必具体说明“怎么干”
关系模子的完整性约束
[*]实体完整性
[*]参照完整性
[*]用户定义的完整性
关系数据模子的存储结构
① 表以文件形式存储
② 有的DBMS一个表对应一个操纵系统文件
③ 有的DBMS自己设计文件结构
关系模子的优缺点
[*]优点
[*]建立在严格的数学概念的底子上
[*]概念单一。数据结构简单、清晰,用户易懂易用
[*]实体和各类接洽都用关系来表示。
[*]对数据的检索结果也是关系。
[*]关系模子的存取路径对用户透明
[*]具有更高的数据独立性,更好的安全保密性
[*]简化了步伐员的工作和数据库开辟建立的工作
[*]缺点
① 存取路径对用户透明导致查询效率往往不如非关系数据模子
② 为进步性能,必须对用户的查询请求举行优化
③ 增加了开辟数据库管理系统的难度
数据库系统结构
https://img-blog.csdnimg.cn/0398f6d67edf45c1b25c40cc4005242e.png
数据库系统的三级模式结构
https://img-blog.csdnimg.cn/a0b4b04244d84e37a8ea83474c14cd1e.png
https://img-blog.csdnimg.cn/b874eb2767e64de5948c327bef07e1e1.png
数据库的二级映像功能与数据独立性
https://img-blog.csdnimg.cn/03765e1b000343d3bd4798bfad5976fb.png
https://img-blog.csdnimg.cn/df5c0d9042634990a1dbfc606c76d022.png
外模式/模式映像
https://img-blog.csdnimg.cn/41b95b5d02714f5cb7f00d87739b3373.png
映象定义通常包含在各自外模式的形貌中保证数据的逻辑独立性 ;当模式改变时,数据库管理员修改有关的外模式/模式映象,可以使外模式保持不变; 应用步伐是依据数据的外模式编写的,从而应用步伐不必修改,保证了数据与步伐的逻辑独立性,简称数据的逻辑独立性。 修改 外模式/模式 的映射(create view) 外模式/模式映象可以保证获得肯定程度的数据的逻辑独立性(非 完全独立)。
模式/内模式映象
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系 。比方,说明逻辑记载和字段在内部是如何表示的。
数据库中模式/内模式映象是唯一的。 该映象定义通常包含在模式形貌中。保证数据的物理独立性。
当数据库的存储结构改变了,数据库管理员修改模式/ 内模式映象,使模式保持不变。比方,存储结构:由堆存储—hash存储, 从而应用步伐不受影响。
保证了数据与步伐的物理独立性,简称数据的物理独立性 。
模式/内模式映象保证获得完全的数据物理独立性
总结:
https://img-blog.csdnimg.cn/dc5fcf3ab9a94da48e80ccf460262754.pnghttps://img-blog.csdnimg.cn/2a69f67272fb4589be07351e98a8917d.png
https://img-blog.csdnimg.cn/2b727e01f0af4e079f39efc6b1c13c71.png
https://img-blog.csdnimg.cn/78f30a5b3398428c8064a1adcba92523.png
分布式结构的数据库系统
[*]数据库中的数据在逻辑上是一个整体,但物理地分布在计算机网络的差别结点上。
[*]网络中的每个结点都可以独立处理本地数据库中的数据,实行局部应用
[*]同时也可以同时存取和处理多个异地数据库中的数据,实行全局应用
[*]优点
[*]适应了地理上分散的公司、团体和构造对于数据库应用的需求。
[*]缺点
[*]数据的分布存放给数据的处理、管理与维护带来困难。
[*]当用户需要经常访问远程数据时,系统效率会明显地受到网络传输的制约
数据库管理员(DBA)
[*]决定命据库中的信息内容和结构
[*]决定命据库的存储结构和存取策略
[*]定义数据的安全性要求和完整性约束条件
(二)关系数据库
[*]关系模子的构成
[*]关系数据结构
[*]关系操纵集合
[*]关系完整性约束
[*]1) 常用的关系操纵
[*]查询:选择、投影、毗连、除、并、交、差
[*]数据更新:插入、删除、修改
[*]查询的表达能力是此中最主要的部分
[*]2) 关系操纵的特点
[*]集合操纵方式,即操纵的对象和结果都是集合。
[*]非关系数据模子的数据操纵方式:一次一记载
[*]文件系统的数据操纵方式
[*]3) 关系数据语言的种类
[*]关系代数语言
[*]用对关系的运算来表达查询要求
[*]4) 关系数据语言的特点
[*]关系语言是一种高度非过程化的语言:
[*]存取路径的选择由DBMS的优化机制来完成
[*]用户不必用循环结构就可以完成数据操纵
[*]可以或许嵌入高级语言中使用
[*]关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价
关系
域(Domain)
域是一组具有相同数据类型的值的集合。例:
1. 整数
2.介于某个取值范围的日期
3.{‘男’,‘女’}
4.长度指定长度的字符串集合
5.介于某个取值范围的整数
6.实数
笛卡尔积(Cartesian Product)给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn={(d1,d2,…,dn)|diÎDi,i=1,2,…,n}
所有域的所有取值的一个组合 不能重复
元组(Tuple)笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。
[*]3) 分量(Component)
[*]笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量。
[*]4) 基数(Cardinal number)
[*]若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
[*]5)笛卡尔积的表示方法
[*]笛卡尔积可表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域。
关系(Relation)
1) 关系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为 R(D1,D2,…,Dn)
R:关系名
n:关系的目或度(Degree)
2) 元组
关系中的每个元素是关系中的元组,通常用t表示。
3) 单元关系与二元关系
当n=1时,称该关系为单元关系(Unary relation)。
当n=2时,称该关系为二元关系(Binary relation)
4) 关系的表示
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。
5) 属性
关系中差别列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。 n目关系必有n个属性。
6) 码
候选码(Candidate key)
①若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
②在最简单的情况下,候选码只包含一个属性。称为全码(All-key)
在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
主码
若一个关系有多个候选码,则选定此中一个为主码(Primary key)主码的诸属性称为主属性(Prime attribute)。不包含在任何侯选码中的属性称为非码属性(Non-key attribute)
7) 三类关系
基本关系(基本表或基表)现实存在的表,是现实存储数据的逻辑表示。
查询表 结果对应的表。
视图表 由基本表或其他视图表导出的表,是虚表,不对应现实存储的数据。
基本关系的性质
① 列是同质的(Homogeneous)
每一列中的分量是同一类型的数据,来自同一个域
② 差别的列可出自同一个域
此中的每一列称为一个属性 差别的属性要给予差别的属性名
③ 列的顺序无所谓
列的序次可以任意交换 ,遵循这一性质的数据库产品(如ORACLE),增加新属性时,永远是插至最后一列,但也有许多关系数据库产品没有遵循这一性质,比方FoxPro仍旧区分了属性顺序。
④ 任意两个元组不能完全相同
由笛卡尔积的性质决定但许多关系数据库产品没有遵循这一性质。比方:Oracle,FoxPro等都允许关系表中存在两个完全相同的元组,除非用户特别定义了相应的约束条件。
⑤ 行的顺序无所谓
行的序次可以任意交换,遵循这一性质的数据库产品(如ORACLE),插入一个元组时永远插至最后一行,但也有许多关系数据库产品没有遵循这一性质,比方FoxPro仍旧区分了元组的顺序。
⑥ 分量必须取原子值
每一个分量都必须是不可分的数据项。这是规范条件中最基本的一条
关系模式(Relation Schema)是型。关系是值关系模式是对关系的形貌,它包罗以下要素:
[*] 元组集合的结构:关系模式定义了元组的集合,每个元组代表关系中的一个实例。
[*] 属性构成:关系模式指定了关系中的属性,每个属性代表关系中的一个特性或字段。
[*] 属性来自的域:每个属性来自于一个特定的域,域定义了属性的取值范围。
[*] 属性与域之间的映象关系:关系模式指定了属性与域之间的映射关系,确保属性的取值符合域的要求。
[*] 元组语义以及完整性约束条件:关系模式可以包含有关元组语义和完整性约束条件的形貌,用于限制关系中的数据。
[*] 属性间的数据依靠关系集合:关系模式可以包含属性间的数据依靠关系集合,用于形貌属性之间的相互关系,比方主键、外键、函数依靠等。
定义关系模式
关系模式可以形式化地表示为:
R(U,D,dom,F)
R 关系名U 构成该关系的属性名集合D 属性组U中属性所来自的域dom 属性向域的映象集合F 属性间的数据依靠关系集合
关系模式通常可以简记为 R (U) 或 R (A1,A2,…,An )
R 关系名
A1,A2,…,An 属性名
注:A1,A2,…,An为属性名;域名及属性向域的映象常常直接说明为属性的类型、长度。
关系模式:对关系的形貌静态的、稳固的
关系:关系模式在某一时刻的状态或内容动态的、随时间不断厘革的,关系模式和关系往往统称为关系。两者通过上下文加以区别。
1. 关系数据库
在一个给定的应用范畴中,所有实体及实体之间接洽的关系的集合构成一个关系数据库。
2. 关系数据库的型与值
关系数据库也有型和值之分,关系数据库的型称为关系数据库模式,是对关系数据库的形貌
若干域的定义,在这些域上定义的若干关系模式,关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库
3 关系的完整性
关系模子的完整性规则是对关系的某种约束条件。
关系模子中三类完整性约束:
实体完整性
参照完整性
用户定义的完整性
实体完整性和参照完整性是关系模子必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
实体完整性
实体完整性规则(Entity Integrity)
若属性A是基本关系R的主属性,则属性A不能取空值。
关系模子必须遵守实体完整性规则的原因:
(1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实天下的一个实体集或多对多接洽。
(2) 现实天下中的实体和实体间的接洽都是可区分的,即它们具有某种唯一性标识。
(3) 相应地,关系模子中以主码作为唯一性标识。
(4) 主码中的属性即主属性不能取空值。 空值就是“不知道”或“无意义”的值。
主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。
留意 :实体完整性规则规定基本关系的所有,主属性都不能取空值。
参照完整性
1. 关系间的引用
2. 外码
3. 参照完整性规则
关系间的引用
在关系模子中实体及实体间的接洽都是用关系来形貌的,因此可能存在着关系与关系间的引用。
2.外码(Foreign Key)
设F是基本关系R的一个或一组属性,但不是关系R的码。假如F与基本关系S的主码Ks相对应,则称F是基本关系R的外码。基本关系R称为参照关系(Referencing Relation)基本关系S称为被参照关系(ReferencedRelation)或目标关系(Target Relation)。
说明
[*]关系R和S不肯定是差别的关系
[*]目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
[*]外码并不肯定要与相应的主码同名
当外码与相应的主码属于差别关系时,往往取相同的名字,以便于辨认。
3. 参照完整性规则
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不肯定是差别的关系),则对于R中每个元组在F上的值必须为:
· 或者取空值(F的每个属性值均为空值)
· 或者等于S中某个元组的主码值。
用户定义的完整性
[*]用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
[*]关系模子应提供定义和检验这类完整性的机制,以便用同一的系统的方法处理它们,而不要由应用步伐负担这一功能。
Operation 运算,操纵
Operator 算子
Operand 操纵数
1.关系代数
一种抽象的查询语言,用对关系的运算来表达查询
2.关系代数运算的三个要素
运算对象:关系
运算结果:关系
运算符:2类(集合运算和关系运行)
关系代数运算符
运算符寄义集合运算符∪并-差∩交×笛卡尔积专门的关系运算符σ选择∏投影https://img-blog.csdnimg.cn/8500f47c862345b9b24f5591fb6ecfb3.png毗连÷除
4.关系代数运算的分类
传统的集合运算
并、差、交、广义笛卡尔积
专门的关系运算
选择、投影、毗连、除
5.常用的表示记号
(1) R,t∈R,t
设关系模式为R(A1,A2,…,An),它的一个关系设为R。t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量 。
(2)
https://img-blog.csdnimg.cn/68c66a51d00442b2a5c1c80cb754a057.png
(3)
https://img-blog.csdnimg.cn/03f2772069b6411987f5d3c62fa91b80.png
(4) https://img-blog.csdnimg.cn/37a3c61e3da5475295c80f0eda094621.png
传统的集合运算(关系代数运算是以集合运算为底子的运算)
①并(Union)关系R与关系S的并记作 R∪S = { t|t∈R∨t ∈S } 仍为n目关系,由属于R或属于S的元组构成
② 差(execpt)关系R与关系S的差记作 R -S = { t|t∈R∧t∉S } 仍为n目关系,由属于R而不属于S的所有元组构成
③交 关系R与关系S的交记作 R∩S = { t|t∈ R∧t ∈S }或者 R∩S = R –(R-S)仍为n目关系,由既属于R又属于S的元组构成
④ 笛卡尔积 广义笛卡尔积(Extended Cartesian Product)
https://img-blog.csdnimg.cn/57eadbd6b23a4d6398b2921fd5c7405b.png
专门的关系运算
1. 选择(Selection)
https://img-blog.csdnimg.cn/25981f6b626e4bfaa9d4fb6aaf87668f.png
2. 投影(Projection)
https://img-blog.csdnimg.cn/52c965168f4142618f197d0e4dea1795.png
3. 毗连(Join)
https://img-blog.csdnimg.cn/1d0449b9242b4b25b889cfdb3effc543.png
关于毗连的一些概念:
悬浮元祖( dangling tuple ) :两个关系R和S在做自然毗连时,关系R中某些元 组有可能在S中不存在公共属性上值相称的元组 ,从而造成R中这些元组在操纵时被舍弃了,这 些被舍弃的元组称为悬浮元组。
外毗连 (OUTER JOIN)
假如把舍弃的元组也保存在结果关系中,而在其他 属性上填空值(Null),这种毗连就叫做外毗连。
左外毗连(LEFT OUTER JOIN或LEFT JOIN)(留哪边就叫 啥外毗连)
假如只把左边关系R中要舍弃的元组保留就叫做左外毗连
右外毗连
假如只把右边关系S中要舍弃的元组保留就叫做右外毗连(RIGHT OUTER JOIN或RIGHT JOIN)。
4. 除(Division)
https://img-blog.csdnimg.cn/d856f1dad8044039b1463a24fedf7b8b.png
(三)关系数据库尺度语言SQL
3.1 SQL概述
https://img-blog.csdnimg.cn/386b6fcc4c01400aad2031d1422b4775.png
https://img-blog.csdnimg.cn/c852bd9301b84ffbafeee4e4048e41de.png
https://img-blog.csdnimg.cn/dcda7421122542659b05c55679222afb.png
https://img-blog.csdnimg.cn/d95f528449a2453a9199f63cc721e095.png
https://img-blog.csdnimg.cn/d08690e8a1f24592a322c3e3ed9ee08f.png
https://img-blog.csdnimg.cn/944b812c82b04b7697ef778e62187270.png
https://img-blog.csdnimg.cn/d75bb151e4b24038a65f24dfbdc84e67.png
概念增补:
SQL可以分为数据定义、数据查询、数据更新、数据控制四大部分。
基本表 :
自己独立存在的表,关系表,是实表;
SQL中一个关系就对应一个基本表;
一个(或多个)基本表对应一个存储文件;
一个表可以带若干索引;
存储文件 :
逻辑结构构成了关系数据库的内模式;
物理结构是任意的,对用户透明;
视图:
从一个或几个基本表导出的表;
数据库中只存放视图的定义而不存放视图对应的数据;
视图是一个虚表;
用户可以在视图上再定义视图 (比方,查询语句实行之后的结果);
3.2 数 据 定 义
https://img-blog.csdnimg.cn/e6288e717f2244139d1b939ae343430d.png https://img-blog.csdnimg.cn/318ddc8a845540c0838444afd0645204.png
3.2.1模式的定义与删除
定义模式
https://img-blog.csdnimg.cn/43c3101c50ad4adebabc2ace2449ffc6.png
删除模式
https://img-blog.csdnimg.cn/38e95d2f46e84066826550eb15408a96.png
3.2.2基本表
定义基本表
https://img-blog.csdnimg.cn/2de05d2a430043198761fc0f2e0028c1.png
常用完整性约束
[*]主码约束: PRIMARY KEY
[*]唯一性约束:UNIQUE
[*]非空值约束:NOT NULL
[*]参照完整性约束
PRIMARY KEY与 UNIQUE的区别
PRIMARY KEY 可空,可以在一个表里的一个或多个字段定义;PRIMARY KEY 不可空不可重复,在一个表里可以定义联合主键;
简单的说,PRIMARY KEY =UNIQUE + NOT NULL
删除基本表
https://img-blog.csdnimg.cn/7cb9af4a548d4ab98873e5af1b9b5d91.png
⑵ 删除属性列
直接/间接删除
[*]把表中要保留的列及其内容复制到一个新表中
[*]删除原表
[*]再将新表重定名为原表名
直接删除属性列:(新)
例:ALTER TABLE Student Drop Scome;
ALTER TABLE Student MODIFY Sage SMALLINT;
注:修改原有的列定义有可能会破坏已有数据
修改基本表
https://img-blog.csdnimg.cn/2ff327ee101e4665b8a955e813d667cc.png
表与模式
https://img-blog.csdnimg.cn/31b868c859ce4375b80c1d2b2ee9edc6.png
3.3 建立与删除索引
[*]建立索引是加速查询速度的有效手段
[*]建立索引
[*]DBA或表的属主(即建立表的人)根据需要建立;
[*]有些DBMS自动建立以下列上的索引: ①PRIMARY KEY ②UNIQUE
[*]维护索引:DBMS自动完成
[*]使用索引: DBMS自动选择是否使用索引以及使用哪些索引
建立索引
https://img-blog.csdnimg.cn/efe761e67b024c789a3b229804caa14d.png
唯一值索引
https://img-blog.csdnimg.cn/dd1bfdca23ed4b72950e6eac44610980.png
聚簇索引&非聚簇索引
https://img-blog.csdnimg.cn/2801cf5830024f7ab57cab96d1408b70.png
更新索引
https://img-blog.csdnimg.cn/0f23b4308052490fac5b332cf1d658e5.png
删除索引
https://img-blog.csdnimg.cn/f48e08e0f8f3477a9c6dd4a97726f097.png
3.5 查 询
查询语句:
https://img-blog.csdnimg.cn/15f7ae381e334e4ab97d0f1df9392997.png
①SELECT子句:指定要显示的属性列
②FROM子句:指定查询对象(基本表或视图)
③ WHERE子句:指定查询条件
④ GROUP BY子句:对查询结果按指定列的值分组,该属性列值相称的元组为一个组。通常会在每组中作用集函数。
⑤HAVING短语:筛选出只有满足指定条件的组
⑥ORDER BY子句:对查询结果表按指定列值的升序或降序排序
单表查询
查询仅涉及一个表,是一种最简单的查询操纵
⑴ 选择表中的若干列
⑵ 选择表中的若干元组
⑶ 对查询结果排序
⑷ 使用集函数
⑸ 对查询结果分组
查询经过计算的值
SELECT子句的<目标列表达式>为表达式
①算术表达式 ②字符串常量 ③函数 ④列别名
二、选择表中的若干元组
[*]消除取值重复的行:在SELECT子句中使用DISTINCT短语
[*]查询满足条件的元组 :
WHERE子句常用的查询条件
https://img-blog.csdnimg.cn/a121dcefaa1441c980066b553e55af5c.png
(1) 比较大小
在WHERE子句的<比较条件>中使用比较运算符
[*]=,>,<,>=,<=,!= 或 <>,!>,!<,
[*]逻辑运算符NOT + 比较运算符
(2) 确定范围
使用谓词 BETWEEN … AND …
NOT BETWEEN … AND …
(3) 确定集合
使用谓词 IN <值表>, NOT IN <值表>
<值表>:用逗号分隔的一组取值
(4) 字符串匹配
[*] LIKE ‘<匹配串>’
<匹配串>:指定匹配模板
匹配模板:固定字符串或含通配符的字符串
当匹配模板为固定字符串时,
可以用 = 运算符取代 LIKE 谓词
用 != 或 < >运算符取代 NOT LIKE 谓词
通配符
[*] % (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b末端的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
[*] _ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b末端的长度为3的任意字符串。如acb,afb等都满足该匹配串
查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design'
ESCAPE '\'
(5) 涉及空值的查询
[*]使用谓词 IS NULL 或 IS NOT NULL
[*]“IS NULL” 不能用 “= NULL” 代替
(6) 多重条件查询
用逻辑运算符AND和 OR来联结多个查询条件
[*]AND的优先级高于OR
[*]可以用括号改变优先级
可用来实现多种其他谓词
[*] IN
[*] BETWEEN … AND …
三、对查询结果排序
使用ORDER BY子句
可以按一个或多个属性列排序: 升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
[*]ASC:排序列为空值的元组最后显示
[*]DESC:排序列为空值的元组最先显示
四、使用集函数
主要集函数
https://img-blog.csdnimg.cn/7e6c1ae240a642c2acd73beff1a3cabd.png
注:处COUNT(*) 外,都跳过空值只处理非空值。
五、对查询结果分组
使用GROUP BY子句 分组
细化集函数的作用对象
[*] 未对查询结果分组,集函数将作用于整个查询结果;对查询结果分组后,集函数将分别作用于每个组
[*]GROUP BY子句的作用对象是查询的中心结果表
[*]分组方法:按指定的一列或多列值分组,值相称的为一组
[*]使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数
使用HAVING短语筛选最终输出结果
[*]只有满足HAVING短语指定条件的组才输出
[*]HAVING短语与WHERE子句的区别:作用对象差别 WHERE子句作用于基表或视图,从中选择满足条件的元组 ②HAVING短语作用于组,从中选择满足条件的组。
毗连查询
同时涉及多个表的查询称为毗连查询
用来毗连两个表的条件称为毗连条件或毗连谓词
https://img-blog.csdnimg.cn/b0a2d5488b484fe7a0237ad83921abaf.png
毗连操纵的实行过程
[*]嵌套循环法(NESTED-LOOP)
[*]起首在表1中找到第一个元组,然后重新开始扫描表2,逐一查找满足毗连件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。
[*]表2全部查找完后,再找表1中第二个元组,然后再重新开始扫描表2,逐一查找满足毗连条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。
[*]重复上述操纵,直到表1中的全部元组都处理完毕
排序归并法(SORT-MERGE)
https://img-blog.csdnimg.cn/85c02938adeb4a6182a4bb8d8d5f6643.png
索引毗连(INDEX-JOIN)
对表2按毗连字段建立索引;
对表1中的每个元组,依次根据其毗连字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组
SQL中毗连查询的主要类型
广义笛卡尔积;等值毗连(含自然毗连); 非等值毗连查询;自身毗连查询;外毗连查询;复合条件毗连查询
一、广义笛卡尔积
[*]不带毗连谓词的毗连
[*] 很少使用
二、等值与非等值毗连查询
等值毗连
[*]毗连运算符为 = 的毗连操纵
[*] [<表名1>.]<列名1> = [<表名2>.]<列名2>
[*]任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀。
自然毗连
[*]等值毗连的一种特殊情况,把目标列中重复的属性列去掉。
非等值毗连查询
毗连运算符 不是 = 的毗连操纵
三、自身毗连
[*]一个表与其自己举行毗连,称为表的自身毗连。
2.需要给表起别名以示区别。
3.由于所有属性名都是同名属性,因此必须使用别名前缀。
四、外毗连(Outer Join)
外毗连与普通毗连的区别
① 普通毗连操纵只输出满足毗连条件的元组
② 外毗连操纵以指定表为毗连主体,将主体表中不满足毗连条件的元组一并输出
③在表名后面加外毗连操纵符(*)或(+)指定非主体表
④非主体表有一“万能”的虚行,该行全部由空值构成
⑤虚行可以和主体表中所有不满足毗连条件的元组举行毗连
⑥由于虚行各列全部是空值,因此与虚行毗连的结果中,来自非主体表的属性值全部是空值
留意:
左外毗连:外毗连符出现在毗连条件的左边 右外毗连:外毗连符出现在毗连条件的右边
五、复合条件毗连
WHERE子句中含多个毗连条件时,称为复合条件毗连
[*]嵌套查询概述
[*]一个SELECT-FROM-WHERE语句称为一个查询块
[*]将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
[*]子查询的限制:不能使用ORDER BY子句
[*]层层嵌套方式反映了 SQL语言的结构化
[*]有些嵌套查询可以用毗连运算替代
2. 不相关子查询
子查询的查询条件不依靠于父查询,是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。
3.相关子查询
子查询的查询条件依靠于父查询
①起首取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;②然后再取外层表的下一个元组;③重复这一过程,直至外层表全部检查完为止。
引出子查询的谓词
[*]带有IN谓词的子查询
[*]带有比较运算符的子查询
[*]带有ANY或ALL谓词的子查询
[*]带有EXISTS谓词的子查询
⒈带有IN谓词的子查询
⒉带有比较运算符的子查询
[*]当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。
[*]与ANY或ALL谓词共同使用
⒊带有ANY或ALL谓词的子查询
谓词语义
ANY:任意一个值 ALL:所有值
需要共同使用比较运算符
> ANY大于子查询结果中的某个值 > ALL大于子查询结果中的所有值< ANY小于子查询结果中的某个值 < ALL小于子查询结果中的所有值>= ANY大于等于子查询结果中的某个值>= ALL大于等于子查询结果中的所有值<= ANY小于等于子查询结果中的某个值 <= ALL小于等于子查询结果中的所有值= ANY等于子查询结果中的某个值=ALL等于子查询结果中的所有值(通常没有现实意义)!=(或<>)ANY不等于子查询结果中的某个值!=(或<>)ALL不等于子查询结果中的任何一个值
⒋带有EXISTS谓词的子查询
[*]1. EXISTS谓词
[*]存在量词
[*]带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
[*]若内层查询结果非空,则外层的WHERE子句返回真值
[*]若内层查询结果为空,则外层的WHERE子句返回假值
[*]由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无现实意义
[*]2. NOT EXISTS谓词
[*]若内层查询结果非空,则外层的WHERE子句返回假值
[*]若内层查询结果为空,则外层的WHERE子句返回真值
3. 差别形式的查询间的更换
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价更换
所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价更换。
https://img-blog.csdnimg.cn/c8d8f198ed8c43cf9791cfdfc760db08.png
https://img-blog.csdnimg.cn/006184f3c463401ea7c212b6a008417a.png
5.用EXISTS/NOT EXISTS实现全称量词(难点)
[*]
[*]SQL语言中没有全称量词" (For all)
[*]可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:
("x)P ≡ Ø ($ x(Ø P))
6. 用EXISTS/NOT EXISTS实现逻辑蕴函(难点)
[*]SQL语言中没有蕴函(Implication)逻辑运算
[*]可以利用谓词演算将逻辑蕴函谓词等价转换为:
p ® q ≡ Ø p∨q
3.3.5 集合查询
尺度SQL直接支持的集合操纵种类:并操纵(UNION)
一般商用数据库支持的集合操纵种类
并操纵(UNION)
交操纵(INTERSECT)
差操纵(MINUS)
1. 并操纵
[*]形式 <查询块> UNION <查询块>
https://img-blog.csdnimg.cn/47ee3d253f0d4f729f2cc3e07c8cd61a.png
留意:到场UNION操纵的各结果表的列数必须相同;对应项的数据类型也必须相同
2. 交操纵
尺度SQL中没有提供集合交操纵,但可用其他方法间接实现。
3. 差操纵
4. 对集合操纵结果的排序
[*]ORDER BY子句只能用于对最终查询结果排序,不能对中心结果排序
[*]任何情况下,ORDER BY子句只能出现在最后
[*]对集合操纵结果排序时,ORDER BY子句中用数字指定排序属性
3.4 数据更新
3.4.1 插入数据
https://img-blog.csdnimg.cn/1862d7f52c244993855d50592f25890e.png
2. 插入子查询结果
https://img-blog.csdnimg.cn/e22afb9a256d4cfcab22a00c0cdf0e25.png
3.4.2 修改数据
https://img-blog.csdnimg.cn/57fbe3a30b2d48208bed3e37da978e71.png
三种修改方式
[*]修改某一个元组的值
[*]修改多个元组的值
[*]带子查询的修改语句
UPDATE SC
SET Grade=0
WHERE 'CS'=
(SELETE Sdept
FROM Student
WHERE Student.Sno = SC.Sno);
https://img-blog.csdnimg.cn/12538da413b04c84818b9384b0fe02e4.png
SET子句 指定修改方式
要修改的列
修改后取值
WHERE子句 指定要修改的元组
缺省表示要修改表中的所有元组
DBMS在实行修改语句时会检查修改操纵
是否破坏表上已定义的完整性规则
[*]
[*]实体完整性
[*]主码不允许修改
[*]用户定义的完整性
[*] NOT NULL约束
[*] UNIQUE约束
[*] 值域约束
DELETE
FROM <表名>
条件>];
[*]功能
[*]删除指定表中满足WHERE子句条件的元组
[*]WHERE子句
[*]指定要删除的元组
[*]缺省表示要修改表中的所有元组
[*]三种删除方式
[*]删除某一个元组的值
[*]删除多个元组的值
[*]带子查询的删除语句
DBMS在实行插入语句时会检查所插元组
是否破坏表上已定义的完整性规则
[*]参照完整性
[*]不允许删除
[*]级联删除
更新数据与数据一致性
DBMS在实行插入、删除、更新语句时必须保证数据库一致性
[*]必须有事务的概念和原子性
[*]完整性检查和保证
3.5 视 图
视图的特点
[*]虚表,是从一个或几个基本表(或视图)导出的表
[*]只存放视图的定义,不会出现数据冗余
[*]基表中的数据发生厘革,从视图中查询出的数据也随之改变
基于视图的操纵
[*] 查询
[*] 删除
[*] 受限更新
[*]定义基于该视图的新视图
1. 建立视图
https://img-blog.csdnimg.cn/bb6b71dfec8a48309331ef00fc296330.png
DBMS实行CREATE VIEW语句时只是把视图的定义存入数据字典,并不实行此中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。构成视图的属性列名全部省略或全部指定。
省略:
由子查询中SELECT目标列中的诸字段构成明确指定视图的所有列名:
(1) 某个目标列是集函数或列表达式
(2) 目标列为 *
(3) 多表毗连时选出了几个同名列作为视图的字段
(4) 需要在视图中为某个列启用新的更符合的名字
WITH CHECK OPTION
透过视图举行增编削操纵时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)带表达式的视图。
定义一个反映门生出生年份的视图。
CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS
SELECT Sno,Sname,2000-Sage
FROM Student
设置一些派生属性列, 也称为假造列--Sbirth
带表达式的视图必须明确定义构成视图的各个属性列名
一类不易扩充的视图:以 SELECT * 方式创建的视图可扩充性差,应尽可能避免
2. 删除视图
https://img-blog.csdnimg.cn/1bf02f0f94204717a478242c57aa7a75.png
3.5.2 查询视图
[*]从用户角度:查询视图与查询基本表相同
[*]DBMS实现视图查询的方法
[*]实体化视图(View Materialization)
[*]有效性检查:检查所查询的视图是否存在
[*]实行视图定义,将视图临时实体化,天生临时表
[*]查询视图转换为查询临时表
[*]查询完毕删除被实体化的视图(临时表)
[*]视图消解法(View Resolution)
[*]举行有效性检查,检查查询的表、视图等是否存在。假如存在,则从数据字典中取出视图的定义
[*]把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询
[*]实行修正后的查询
3.5.3 更新视图
[*]用户角度:更新视图与更新基本表相同
[*]DBMS实现视图更新的方法
[*]视图实体化法(View Materialization)
[*]视图消解法(View Resolution)
[*]指定WITH CHECK OPTION子句后
DBMS在更新视图时会举行检查,防止用户通过视图对不属于视图范围内的基本表数据举行更新
更新视图的限制
[*]一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此)
[*]允许对行列子集视图举行更新
[*]对其他类型视图的更新差别系统有差别限制
https://img-blog.csdnimg.cn/6991577b50184c9b9820eb1f34a42f69.png
3.5.4 视图的作用
https://img-blog.csdnimg.cn/8b2bbe4b4c0946cab3a66e6ee0477ba4.png
(四)数据库安全性
4.1授权
4.2 收回权限
数据控制亦称为数据掩护,包罗数据的:
[*]安全性控制
[*]完整性控制
[*]并发控制
[*]恢复
SQL语言的数据控制功能
SQL语言提供了数据控制功能,可以或许在肯定程度上保证数据库中数据的完全性、完整性,并提供了肯定的并发控制及恢复能力。
1. 完整性
[*]数据库的完整性是指数据库中数据的正确性与相容性。
[*]SQL语言定义完整性约束条件
CREATE TABLE语句
ALTER TABLE语句
[*]码
[*]其他约束条件
[*]参照完整性
[*]取值唯一的列
2. 并发控制
[*]并发控制: 当多个用户并发地对数据库举行操纵时,对他们加以控制、和谐,以保证并发操纵正确实行,保持数据库的一致性。
[*]SQL语言并发控制能力: 提供事务、事务开始、事务结束、提交等概念
3. 恢复
[*]恢复: 当发生各种类型的故障导致数据库处于不一致状态时,将数据库恢复到一致状态的功能。
[*]SQL语言恢复功能:提供事务回滚、重做等概念 (UNDO、REDO)
4. 安全性
[*]安全性:掩护数据库,防止不正当的使用所造成的数据泄漏和破坏。
[*]保证数据安全性的主要步伐
存取控制:控制用户只能存取他有权存取的数据
规定差别用户对于差别数据对象所允许实行的操纵
DBMS实现数据安全性掩护的过程
[*]用户或DBA把授权决定告知系统
[*]SQL的GRANT和REVOKE
[*]DBMS把授权的结果存入数据字典
[*]当用户提出操纵请求时,DBMS根据授权定义举行检查,以决定是否实行操纵请求
41 授 权
[*]GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
TO <用户>[,<用户>]...
;
[*]谁定义?DBA和表的建立者(即表的属主)
[*]REVOKE功能:将对指定操纵对象的指定操纵权限授予指定的用户。
(1) 操纵权限
对象TABLE操纵权限属性列TABLE SELECT ,INSERT,UPDATE
DELECT,ALL PIVIEGES
视图TABLE SELECT ,INSERT,UPDATE
DELECT,ALL PIVIEGES
基本表TABLE SELECT ,INSERT,UPDATE
DELECT ,ALTER ,INDEX,ALL PIVIEGES
数据库DATABASECREATETAB
(2) 用户的权限
[*]建表(CREATETAB)的权限:属于DBA
[*]DBA授予-->普通用户
[*]基本表或视图的属主拥有对该表或视图的统统操纵权限
[*]接受权限的用户:
一个或多个具体用户
PUBLIC(全体用户)
(3) WITH GRANT OPTION子句
[*]指定了WITH GRANT OPTION子句:
获得某种权限的用户还可以把这种权限再授予别的用户。
2.没有指定WITH GRANT OPTION子句:
获得某种权限的用户只能使用该权限,不能流传该权限
查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student, Course
TO U2, U3;
4.2 收回权限
[*]REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
FROM <用户>[,<用户>]...;
功能:从指定用户那里收回对指定对象的指定权限
第4章 数据库安全性
数据库系统的安全掩护步伐是否有效是数据库系统主要的性能指标之一
4.1 计算机安全性概论
什么是计算机系统安全性
为计算机系统建立和接纳的各种安全掩护步伐,以掩护计算机系统中的硬件、软件及数据,防止其因偶尔或恶意的原因使系统遭到破坏,数据遭到更改或泄漏等。
技能安全
指计算机系统中采用具有肯定安全性的硬件、软件来实现对计算机系统及其所存数据的安全掩护,当计算机系统受到无意或恶意的攻击时仍能保证系统正常运行,保证系统内的数据不增加、不丢失、不泄漏。
管理安全
软硬件不测故障、园地的不测变乱、管理不善导致的计算机设备和数据介质的物理破坏、丢失等安全题目
政策法律类
政府部分建立的有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令。
安全尺度简介
发展历史:
https://img-blog.csdnimg.cn/c0dd1d6ff9d84da5b5c1a7e2fe8d3c61.png
安全尺度简介
https://img-blog.csdnimg.cn/9a8ae881674448c0a7774e9842e74ace.png
TCSEC/TDI安全级别划分
https://img-blog.csdnimg.cn/d4247cecbd7047c8975e246ebdfa677e.png
[*]R1 安全策略(Security Policy)
R1.1 自主存取控制 (Discretionary Access Control,简记为DAC)
R1.2 客体重用(Object Reuse)
R1.3 标记(Labels)
R1.4 逼迫存取控制(Mandatory Access Control,简记为MAC)
2.R2 责任(Accountability)
R2.1 标识与鉴别(Identification & Authentication)
R2.2 审计(Audit)
3.R3 保证(Assurance)
R3.1 操纵保证(Operational Assurance)
R3.2 生命周期保证(Life Cycle Assurance)
R4 文档(Documentation)
R4.1 安全特性用户指南(Security Features User's Guide)
R4.2 可信设施手册(Trusted Facility Manual)
R4.3 测试文档(Test Documentation)
R4.4 设计文档(Design Documentation)
CC评估保证级划分
https://img-blog.csdnimg.cn/63a804ff104b48c18d7d15aa1597f55d.png
数据库安全性控制
[*]数据库安全性控制的常用方法
[*]用户标识和判断
[*]存取控制
[*]视图
[*]审计
[*]暗码存储
用户标识与鉴别
[*]用户标识与鉴别(Identification & Authentication)
系统提供的最外层安全掩护步伐
基本方法
[*]系统提供肯定的方式让用户标识自己的名字或身份;
[*]系统内部记载着所有正当用户的标识;
[*]每次用户要求进入系统时,由系统核对用户提供的身份标识;
[*]通过判断后才提供呆板使用权。
[*]用户标识和判断可以重复多次
存取控制
[*]存取控制机制的功能
[*]存取控制机制的构成
[*] 定义存取权限
[*] 检查存取权限
用户权限定义和正当权检查机制一起构成了DBMS的安全子系统
常用存取控制方法
https://img-blog.csdnimg.cn/4a4201bd7d2741c993de58ee37ebe9c2.png
自主存取控制的特点
[*]同一用户对于差别的数据对象有差别的存取权限
[*]差别的用户对同一对象也有差别的权限
[*]用户还可将其拥有的存取权限转授给其他用户
逼迫存取控制的特点
[*]每一个数据对象被标以肯定的密级
[*]每一个用户也被授予某一个级别的许可证
[*]对于任意一个对象,只有具有正当许可证的用户才可以存取
https://img-blog.csdnimg.cn/34a9f1aab2d9496b85d088d80e4b1308.png
自主存取控制方法
https://img-blog.csdnimg.cn/f35492ea90f948008b56125ef792b0f7.png
授权与接纳https://img-blog.csdnimg.cn/39fa8982faab4a4ea5d4ce3b43c78e84.png
接纳:
https://img-blog.csdnimg.cn/60da54a0f2934da987b1b8a320fc2252.png
SQL灵活的授权机制
https://img-blog.csdnimg.cn/aed6f748783740a9a6f3b17d4169ed8c.png
关系数据库中授权的数据对象粒度
[*] 行
[*] 属性列
[*] 表
[*] 数据库
逼迫存取控制方法
什么是逼迫存取控制
https://img-blog.csdnimg.cn/50c5f7e541dd4dbe921a6673086c5cfa.png
[*]
[*]逼迫存取控制(MAC)是指系统为保证更高程度的安全性,按照TDI/TCSEC尺度中安全策略的要求,所接纳的逼迫存取检查手段。
[*]MAC不是用户能直接感知或举行控制的。
[*]主体与客体
[*]在MAC中,DBMS所管理的全部实体被分为主体和客体两大类
[*]主体是系统中的活动实体
[*] DBMS所管理的现实用户
[*] 代表用户的各进程
[*]客体是系统中的被动实体,是受主体操纵的
[*] 文件
[*] 基表
[*] 索引
[*] 视图
视图机制
[*]视图机制与授权机制共同使用:
[*]起首用视图机制屏蔽掉一部分保密数据
[*]视图上面再进一步定义存取权限
[*]间接实现了支持存取谓词的用户权限定义
审计
审计的定义
https://img-blog.csdnimg.cn/2432074a54c64828b6c61389043283c4.png
https://img-blog.csdnimg.cn/4451efa1b2f142cdb32b3be450b0d50b.png
审计功能的可选性:①审计很费时间和空间 ②DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能。
4.2.8 数据加密
https://img-blog.csdnimg.cn/6e90ba5c14264fd69cabfb692df8d0cf.png
[*]加密方法
[*] 更换方法
[*]使用密钥(Encryption Key)将明文中的每一个字符转换为密文中的一个字符
[*]置换方法
[*]将明文的字符按差别的顺序重新分列
[*]混合方法
美国1977年订定的官方加密尺度:数据加密尺度(Data Encryption Standard,简称DES)
4.3 统计数据库安全性
[*]统计数据库的特点
[*]允许用户查询聚集类型的信息(比方合计、均匀值等)
[*]不允许查询单个记载信息
规则1:任何查询至少要涉及N(N富足大)个以上的记载
规则2:任意两个查询的相交数据项不能凌驾M个
规则3:任一用户的查询次数不能凌驾1+(N-2)/M
https://img-blog.csdnimg.cn/6da47ef5173e4b6485e58da3e5448e70.png
第五章 数据库完整性
什么是数据库的完整性
[*]
[*]数据的正确性和相容性
[*]防止不合语义的数据进入数据库。
完整性约束条件定义
[*]完整性约束条件:数据模子的构成部分约束数据库中数据的语义
[*]DBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中
完整性约束条件作用的对象
[*]列:对属性的取值类型、范围、精度等的约束条件
[*]元组:对元组中各个属性列间的接洽的约束
[*]关系:对若干元组间、关系集合上以及关系之间的接洽的约束
[*]静态
[*]对静态对象的约束是反映数据库状态合理性的约束
[*]动态
[*]对动态对象的约束是反映数据库状态变迁的约束
1. 静态列级约束
[*]静态列级约束:对的取值域的说明
[*]最常见、最简单、最容易实现的一类完整性约束
五类静态列级约束
1) 数据类型约束:数据的类型、长度、单元、精度等
2) 对数据格式的约束
3) 取值范围或取值集合的约束
4) 对空值的约束
5) 其他约束
2. 静态元组约束
规定元组的各个列之间的约束关系
静态元组约束只局限在元组上
3. 静态关系约束
关系的各个元组之间或若干关系之间存在的各种接洽或约束
常见静态关系约束:
1) 实体完整性约束
2) 参照完整性约束
3) 函数依靠约束
4) 统计约束
4. 动态列级约束
动态列级约束是修改列定义或列值时应满足的约束条件
1) 修改列定义时的约束
2) 修改列值时的约束
5. 动态元组约束
修改元组值: 各个字段之间要满足的约束条件
6. 动态关系约束
关系厘革前后状态:限制条件
粒 度 状态
列 级
元 组 级
关 系 级
静 态
列定义
·类型
·格式
·值域
·空值
元组值应满足的条件
实体完整性约束
参照完整性约束
函数依靠约束
统计约束
动 态
改变列定义或列值
元组新旧值之间应满足的约束条件
关系新旧状态间应满足的约束条件
10.2 完整性控制
一、DBMS的完整性控制机制
1. 定义功能
一个完满的完整性控制机制应该允许用户定义各类完整性约束条件。
2. 检查功能
[*]立即实行的约束(Immediate constraints)
语句实行完后立即检查是否违反完整性约束
[*] 延伸实行的约束(Deferred constrainsts)
完整性检查延伸到整个事务实行结束后举行
3. 违约反应
拒绝该操纵; 其他处理方法
完整性规则五元组表示:
(D,O,A,C,P)
[*]D(Data) 约束作用的数据对象;
[*]O(Operation) 触发完整性检查的数据库操纵
当用户发出什么操纵请求时需要检查该完整性规则
是立即检查照旧延伸检查;
3.A(Assertion) 数据对象必须满足的断言或语义约束这是规则的主体;
4. C(Condition) 选择A作用的数据对象值的谓词;
5. P(Procedure) 违反完整性规则时触发的过程。
1. 外码是否可以接受空值的题目
[*]外码是否可以或许取空值:依靠于应用环境的语义
2.在被参照关系中删除元组时的题目
出现违约操纵的情况:
删除被参照关系的某个元组(student)
而参照关系有若干元组(SC)的外码值与被删除的被参照关系的主码值相同
[*]违约反应:可有三种策略
[*]级联删除(CASCADES)
[*]受限删除(RESTRICTED)
[*]置空值删除(NULLIFIES)
3.在参照关系中插入元组时的题目
[*]受限插入
[*]仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才实行插入操纵,否则拒绝此操纵。
[*] 递归插入
[*]起首向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。
4. 修改被参照关系中主码的题目
[*]两种策略
(1)不允许修改主码
(2)允许修改主码
第六章 关系数据理论
二、关系模式的形式化定义
关系模式由五部分构成,即它是一个五元组:
R(U, D, DOM, F)
R: 关系名
U: 构成该关系的属性名集合
D: 属性组U中属性所来自的域
DOM:属性向域的映象集合
F: 属性间数据的依靠关系集合
https://img-blog.csdnimg.cn/4f37424eae5546a6bb65b961209bce40.png
三、什么是数据依靠
1. 完整性约束的表现形式
[*]限定属性取值范围:
[*]定义属性值间的相互关连(主要体现于值的相称与否),这就是数据依靠,它是数据库模式设计的关键
2. 数据依靠
[*]是通过一个关系中属性间值的相称与否体现出来的数据间的相互关系
[*]是现实天下属性间相互接洽的抽象
[*]是数据内在的性质
[*]是语义的体现
3. 数据依靠的类型
[*]函数依靠(Functional Dependency,简记为FD)
[*]多值依靠(Multivalued Dependency,简记为MVD)
[*]其他
四、关系模式的简化表示
[*]关系模式R(U, D, DOM, F)
简化为一个三元组:
R(U, F)
[*]当且仅当U上的一个关系r 满足F时,r称为关系模式 R(U, F)的一个关系
五、数据依靠对关系模式的影响
⒈ 数据冗余太大
浪费大量的存储空间
例:每一个系主任的姓名重复出现
⒉ 更新异常(Update Anomalies)
数据冗余 ,更新数据时,维护数据完整性代价大。
例:某系更换系主任后,系统必须修改与该系门生有关的每一个元组
⒊ 插入异常(Insertion Anomalies)
该插的数据插不进去
例,假如一个系刚建立,尚无门生,我们就无法把这个系及其系主任的信息存入数据库。
⒋ 删除异常(Deletion Anomalies)
不应删除的数据不得不删
原因:由存在于模式中的某些数据依靠引起的
解决方法:通太过解关系模式来消除此中不符合的数据依靠。
6.2 规范化
6.2.1 函数依靠
一、函数依靠
https://img-blog.csdnimg.cn/1edcd94bf729401eacdecc9a735243e4.png
R的所有关系实例均要满足:
1. 函数依靠不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
2. 函数依靠是语义范畴的概念。只能根据数据的语义来确定函数依靠。
比方“姓名→年龄”这个函数依靠只有在不允许有同名人的条件下建立,若有同名,则年龄不依靠于姓名。
3. 数据库设计者可以对现实天下作逼迫的规定。
二、平凡函数依靠与非平凡函数依靠
https://img-blog.csdnimg.cn/9921f1070b404050adaa56c374754c31.png
在关系SC(Sno, Cno, Grade)中,
非平凡函数依靠: (Sno, Cno) → Grade
平凡函数依靠: (Sno, Cno) → Sno
(Sno, Cno) → Cno
三、完全函数依靠与部分函数依靠
https://img-blog.csdnimg.cn/ccd7b144988547828d795c28341e3466.png
四、转达函数依靠
https://img-blog.csdnimg.cn/1b5727badbfc482a8c60772990b12880.png
码
https://img-blog.csdnimg.cn/7988ff59852a457a84d6cad9b3a4d873.png
https://img-blog.csdnimg.cn/4210082c742f4b3094844de67fc4ecf9.png
外码:https://img-blog.csdnimg.cn/e0503b0c01734d75adcfa3fdc5d5d5f0.png
6.2.3 范式
范式是符合某一种级别的关系模式的集合 ;关系数据库中的关系必须满足肯定的要求。满足差别程度要求的为差别范式;某一关系模式R为第n范式,可简记为R∈nNF。
https://img-blog.csdnimg.cn/6184b814a72447d597bdb852039f7e26.png
1NF的定义
假如一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
留意:第一范式是对关系模式的最最少的要求。不满足第一范式的数据库模式不能称为关系数据库。
(1) 插入异常
(2) 删除异常
(3) 数据冗余度大
(4) 修改复杂
2NF的定义
定义5.6 若关系模式R∈1NF,而且每一个非主属性都完全函数依靠于R的码,则R∈2NF。
3NF的定义
https://img-blog.csdnimg.cn/00a1c2f72e8c4a0c828bc9c121323a85.png
https://img-blog.csdnimg.cn/70d4d11f90154e989d754da106627c58.png
5.2.6 BC范式(BCNF)
[*]定义5.9 设关系模式R<U,F>∈1NF,假如对于R的每个函数依靠X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。
若R∈BCNF
[*]每一个决定属性集(因素)都包含(候选)码
[*]R中的所有属性(主,非主属性)都完全函数依靠于码
[*]R∈3NF(证明)
[*]若R∈3NF 则 R不肯定∈BCNF
https://img-blog.csdnimg.cn/532d050f58304a4288e4626c07c50735.png
5.2.5 多值依靠与第四范式(4NF)
定义6.10 第四范式
https://img-blog.csdnimg.cn/aae783011f9a402fb2e7b49b41c3b9bd.png
https://img-blog.csdnimg.cn/9db622b773364c84a1c9ef3b542b2c34.png
https://img-blog.csdnimg.cn/e663cedaa1c04bea82fa5d2b6c597205.png多值依靠
https://img-blog.csdnimg.cn/e264ffa56b8a459ea329dc1778ca619f.png
多值依靠的性质
https://img-blog.csdnimg.cn/a37d8bdcbaef4fa3ad56451b8a0ae2aa.png
多值依靠与函数依靠区别
https://img-blog.csdnimg.cn/95bf9fcc06c24321b6abbb2cbd0f57b0.png
规范化小结
https://img-blog.csdnimg.cn/d6ed3723829042059498a4368492d027.png
第七章 数据库设计
[*]数据库设计
[*]数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之可以或许有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)
[*]在数据库范畴内,常常把使用数据库的各类系齐备称为数据库应用系统。
7.1.1 数据库和信息系统
[*]数据库是信息系统的焦点和底子
[*]把信息系统中大量的数据按肯定的模子构造起来
[*]提供存储、维护、检索数据的功能
[*]使信息系统可以方便、及时、准确地从数据库中获得所需的信息
[*]数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在
[*]数据库设计是信息系统开辟和建立的重要构成部分
7.1.2 数据库设计的特点
[*]数据库建立是硬件、软件和干件的结合
[*]三分技能,七分管理,十二分底子数据
[*]技能与管理的界面称之为“干件”
2.数据库设计应该与应用系统设计相结合
[*]结构(数据)设计:设计数据库框架或数据库结构
[*]行为(处理)设计:设计应用步伐、事务处理等.
3. 结构和行为分离的设计
[*]传统的软件工程忽视对应用中数据语义的分析和抽象,只要有可能就只管推迟数据结构设计的决策
[*]早期的数据库设计致力于数据模子和建模方法研究,忽视了对行为的设计
数据库设计的基本步骤
⒈需求分析阶段
[*]准确相识与分析用户需求(包罗数据与处理)
[*]是整个设计过程的底子,是最困难、最耗费时间的一步
⒉概念结构设计阶段
[*]是整个数据库设计的关键
[*]通过对用户需求举行综合、归纳与抽象,形成一个独立于具体DBMS的概念模子
⒊逻辑结构设计阶段
[*]将概念结构转换为某个DBMS所支持的数据模子
[*]对其举行优化
⒋数据库物理设计阶段
为逻辑数据模子选取一个最适合应用环境的物理结构(包罗存储结构和存取方法)
⒌数据库实施阶段
[*]运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果
[*]并举行试运行
[*]构造数据入库
[*]编制与调试应用步伐
[*]建立数据库
⒍数据库运行和维护阶段
[*]数据库应用系统经过试运行后即可投入正式运行。
[*]在数据库系统运行过程中必须不断地对其举行评价、调解与修改。
数据库各级模式的形成过程
1. 需求分析阶段
https://img-blog.csdnimg.cn/25f919a938f5484ab2312c70dfcc5585.png
2.概念设计阶段
3.逻辑设计阶段
4.物理设计阶段
5.数据库实施阶段
6.运行和维护阶段
https://img-blog.csdnimg.cn/263d8149915b4201a8956a72fb324eff.png
https://img-blog.csdnimg.cn/d865e2da4b714d75ab4698d9509dda2a.png
数据库设计差别阶段形成的数据库各级模式https://img-blog.csdnimg.cn/766fa0ba57054ce6b37ea9c19df5c51b.png
特点:
然后根据用户处理的要求、安全性的思量,在基本表的底子上再建立须要的视图(View),形成数据的外模式。起首将E-R图转换成具体的数据库产品支持的数据模子,如关系模子,形成数据库逻辑模式。根据DBMS特点和处理的需要,举行物理存储安排,建立索引,形成数据库内模式需。求分析的重点是调查、网络与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。
一、数据字典的用途
数据字典是关于数据库中数据的形貌,即元数据, 不是数据自己,是数据的数据 ; 数据字典在需求分析阶段建立,在数据库设计过程 中不断修改、充实、完满;数据字典是举行具体的数据网络和数据分析所获得 的主要结果。
[*]数据字典是各类数据形貌的集合
[*]数据字典是举行具体的数据网络和数据分析所获得的主要结果
二、数据字典的内容
[*]数据字典的内容
[*]数据项
[*]数据结构
[*]数据流
[*]数据存储
[*]处理过程
[*] 数据项是数据的最小构成单元
[*] 若干个数据项可以构成一个数据结构
[*] 数据字典通过对数据项和数据结构的定义来形貌数据流、数据存储的逻辑内容。
⒈ 数据项
数据项是不可再分的数据单元
对数据项的形貌 数据项形貌={ 数据项名,数据项寄义说明,别名,数据类型,长度, 取值范围,取值寄义,与其他数据项的逻辑关系,数据项之间的接洽 }
用关系规范化理论为引导,用数据依靠的概念分析和表示 数据项之间的接洽 —函数依靠
“取值范围” 、 “与其他数据项的逻辑关系”。
定义了数据的完整性约束条件,是设计数据检验功能的依据,包罗模式设计、完整性检查条件、触发器,存储过程。
⒉ 数据结构
[*]数据结构反映了数据之间的组合关系。
[*] 一个数据结构可以由若干个数据项构成,也可以由若干个数据结构构成,或由若干个数据项和数据结构混合构成。
[*] 对数据结构的形貌
数据结构形貌={数据结构名,寄义说明,构成:{数据项或数据结构}}
⒊ 数据流
https://img-blog.csdnimg.cn/4c33d2acf32a47a1befdb0f4ba6980f2.png
⒋ 数据存储
https://img-blog.csdnimg.cn/df8954bdf12c49caab47349542dccff7.png
⒌ 处理过程
https://img-blog.csdnimg.cn/109400eb2af34a4ebecf10ec783b26a5.png
6.3 概念结构设计
[*]概念结构设计
[*]需求分析阶段形貌的用户应用需求是现实天下的具体需求
[*]将需求分析得到的用户需求抽象为信息结构即概念模子的过程就是概念结构设计
[*]概念结构是各种数据模子的共同底子,它比数据模子更独立于呆板、更抽象,从而更加稳固。
[*]概念结构设计是整个数据库设计的关键
7.3.2 概念结构设计的方法与步骤
[*]设计概念结构的四类方法
[*]自顶向下
[*]自底向上
[*]渐渐扩张
[*]混合策略
7.3.3 数据抽象与局部视图设计
一、数据抽象
[*]概念结构是对现实天下的一种抽象
[*]从现实的人、物、事和概念中抽取所关心的共同特性,忽略非本质的细节
[*]把这些特性用各种概念精确地加以形貌
[*]这些概念构成了某种模子
2. 三种常用抽象
1. 分类(Classification)
定义某一类概念作为现实天下中一组对象的类型;
这些对象具有某些共同的特性和行为;
它抽象了对象值和型之间的“is member of”的语义;
在E-R模子中,实体型就是这种抽象;
2. 聚集(Aggregation)
定义某一类型的构成成分;
它抽象了对象内部类型和成分之间“is part of”的语义;
在E-R模子中若干属性的聚集构成了实体型,就是这种抽象
3. 概括(Generalization)
定义类型之间的一种子集接洽;
它抽象了类型之间的“is subset of”的语义;
概括有一个很重要的性质:继承性。子类继承超类上定义的所有抽象。
设计分E-R图的步骤:
⒈选择局部应用
⒉逐一设计分E-R图
[*]一般原则
[*]属性不能与其他实体具有接洽。接洽只发生在实体之间。
[*]属性不能再具有需要形貌的性质。即属性必须是不可分的数据项,不能再由另一些属性构成。
[*]符合上述两条特性的事物一般作为属性对待。
[*]为了简化E-R图的处理,现实天下中的事物凡可以或许作为属性对待的,应只管作为属性。
[*]集成局部E-R图的步骤
(1)归并
① 属性辩论
[*]两类属性辩论
[*]属性域辩论:属性值的类型、取值范围或取值集合差别。
[*]属性取值单元辩论。
② 定名辩论
同名异义:差别意义的对象在差别的局部应用中具有相同的名字
异名同义(一义多名):同一意义的对象在差别的局部应用中具有差别的名字
③ 结构辩论
同一对象在差别应用中具有差别的抽象
同一实体在差别局部视图中所包含的属性不完全相同,或者属性的分列序次不完全相同。
实体之间的接洽在差别局部视图中呈现差别的类型
(2)修改与重构
①概念结构设计的步骤:
抽象数据并设计局部视图;集成局部视图,得到全局概念结构;验证整体概念结构
②设计局部视图:
选择局部应用;
逐一设计分E-R图:标定局部应用中的实体、属性、码,实体间的接洽;用E-R图形貌出来
③集成局部视图:归并分E-R图,天生开端E-R图(消除辩论):属性辩论、定名辩论、结构辩论;
修改与重构(消除不须要的冗余,设计天生基本E-R图):分析方法、规范化理论
6.4 逻辑结构设计
[*]逻辑结构设计的任务
[*]概念结构是各种数据模子的共同底子
[*]为了可以或许用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模子,这正是数据库逻辑结构设计所要完成的任务。
[*]逻辑结构设计的步骤
[*]将概念结构转化为一般的关系、网状、层次模子
[*]将转化来的关系、网状、层次模子向特定DBMS支持下的数据模子转换
[*]对数据模子举行优化
[*]转换原则
① 一个实体型转换为一个关系模式。
[*]关系的属性:实体型的属性
[*]关系的码:实体型的码
② 一个m:n接洽转换为一个关系模式。
[*]关系的属性:与该接洽相连的各实体的码以及接洽自己的属性
[*]关系的码:各实体码的组合
③ 一个1:n接洽可以转换为一个独立的关系模式,也可以与n端对应的关系模式归并。
转换为一个独立的关系模式:
[*]关系的码:n端实体的码
[*]关系的属性:与该接洽相连的各实体的码以及接洽自己的属性
与n端对应的关系模式归并
[*]归并后关系的码:不变
[*]归并后关系的属性:在n端关系中加入1端关系的码和接洽自己的属性
[*]可以减少系统中的关系个数,一般情况下更倾向于采用这种方法
④ 一个1:1接洽可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式归并。
转换为一个独立的关系模式
[*]关系的候选码:每个实体的码均是该关系的候选码
[*]关系的属性:与该接洽相连的各实体的码以及接洽自己的属性
与某一端对应的关系模式归并
[*]归并后关系的属性:加入对应关系的码和接洽自己的属性
[*]归并后关系的码:不变
⑤ 三个或三个以上实体间的一个多元接洽转换为一个关系模式。
[*]关系的属性:与该多元接洽相连的各实体的码以及接洽自己的属性
[*]关系的码:各实体码的组合
⑥ 同一实体集的实体间的接洽,即自接洽,也可按上述1:1、1:n和m:n三种情况分别处理。
⑦ 具有相同码的关系模式可归并。
[*]目的:减少系统中的关系个数。
[*]归并方法:将此中一个关系模式的全部属性加入到另一个关系模式中,然后去掉此中的同义属性(可能同名也可能差别名),并适当调解属性的序次。
7.4.2 向特定DBMS规定的模子举行转换
[*]一般的数据模子还需要向特定DBMS规定的模子举行转换。
[*]转换的主要依据是所选用的DBMS的功能及限制。没有通用规则。
[*]对于关系模子来说,这种转换通常都比较简单。
7.4.3 数据模子的优化
[*]数据库逻辑设计的结果不是唯一的。
[*]得到开端数据模子后,还应该适本地修改、调解数据模子的结构,以进一步进步数据库应用系统的性能,这就是数据模子的优化。
[*]关系数据模子的优化通常以规范化理论为引导。
数据模子的优化
⒈ 确定命据依靠
⒉ 对于各个关系模式之间的数据依靠举行极小化处理,消除冗余的接洽。
⒊ 按照数据依靠的理论对关系模式逐一举行分析,观察是否存在部分函数依靠、转达函数依靠、多值依靠等,确定各关系模式分别属于第几范式。
⒋ 按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否符合,确定是否要对它们举行归并或分解。
⒌ 按照需求分析阶段得到的各种应用对数据处理的要求,对关系模式举行须要的分解或归并,以进步数据操纵的效率和存储空间的利用率
水中分解
https://img-blog.csdnimg.cn/6f88497336724032884e65697fb98419.png
垂直分解
https://img-blog.csdnimg.cn/810997a58b0f4a83ae25282fc5447d0c.png
逻辑结构设计小结
E-R图向关系模子的转换原则
⒈ 一个实体型转换为一个关系模式。
⒉ 一个m:n接洽转换为一个关系模式。
⒊ 一个1:n接洽可以转换为一个独立的关系模式,也可以与n端对应的关系模式归并。
⒋ 一个1:1接洽可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式归并。
⒌ 三个或三个以上实体间的一个多元接洽转换为一个关系模式。
⒍ 同一实体集的实体间的接洽,即自接洽,也可按上述1:1、1:n和m:n三种情况分别处理。
⒎ 具有相同码的关系模式可归并。
优化数据模子的方法
⒈ 确定命据依靠
⒉ 对于各个关系模式之间的数据依靠举行极小化处理,消除冗余的接洽。
⒊ 确定各关系模式分别属于第几范式。
⒋ 分析对于应用环境这些模式是否符合,确定是否要对它们举行归并或分解。
⒌ 对关系模式举行须要的分解或归并
7.5 数据库的物理设计
定义: 数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依靠于选定的数据库管理系统,为一个给定的逻辑数据模子选取一个最适合应用环境的物理结构的过程,就是数据库的物理设计。
https://img-blog.csdnimg.cn/d28e0984b4b847399c46c861da82037e.png
关系模式存取方法选择
[*]DBMS常用存取方法
[*]索引方法,目前主要是B+树索引方法
[*]聚簇(Cluster)方法
[*]HASH方法
一、索引存取方法的选择
[*]选择索引存取方法的主要内容
根据应用要求确定
[*]
[*] 对哪些属性列建立索引
[*] 对哪些属性列建立组合索引
[*] 对哪些索引要设计为唯一索引
[*]聚簇索引
[*]建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中元组的物理顺序一致。
7.6 数据库的实施
一、定义数据库结构
[*]确定了数据库的逻辑结构与物理结构后,就可以用所选用的DBMS提供的数据定义语言(DDL)来严格形貌数据库结构。
二、数据装载
[*]数据库结构建立好后,就可以向数据库中装载数据了。构造数据入库是数据库实施阶段最主要的工作。
[*]数据装载方法
[*]人工方法
[*]计算机辅助数据入库
https://img-blog.csdnimg.cn/3e20b1677749407bac5ff394d3e13f47.png
https://img-blog.csdnimg.cn/eba9eae56b114a6eb8ec3494bbec405e.png 数据库各级模式的形成
https://img-blog.csdnimg.cn/920e3e05b8444214842e94976089bef4.png
第八章 数据库编程
嵌 入 式 SQL:高级步伐语言中嵌入SQL
https://img-blog.csdnimg.cn/3f267f1bcac54d2396f8fdab619248b9.png
https://img-blog.csdnimg.cn/1ec9b2bf114d43b3ac7a693e1c5bc6ba.png
3.7.1嵌入式SQL的一般形式
[*]为了区分SQL语句与主语言语句,需要:
[*]前缀:EXEC SQL
[*] 结束标志:随主语言的差别而差别
[*]以C为主语言的嵌入式SQL语句的一般形式
EXEC SQL <SQL语句>;
https://img-blog.csdnimg.cn/02571ae1714a494299d418636c27826c.png
DBMS处理宿主型数据库语言SQL 的方法
[*]预编译
[*]修改和扩充主语言使之能处理SQL语句
预编译
1.由DBMS的预处理步伐对源步伐举行扫描,辨认出SQL语句
2.把它们转换成主语言调用语句,以使主语言编译步伐能辨认它
3.最后由主语言的编译步伐将整个源步伐编译成目标码。
嵌入SQL语句
说明性语句
嵌入SQL语句 数据定义
可实行语句 数据控制
数据操纵
[*]允许出现可实行的高级语言语句的地方,都可以写可实行SQL语句
[*]允许出现说明语句的地方,都可以写说明性SQL语句
3.7.2 嵌入式SQL语句与主语言之间的通讯
将SQL嵌入到高级语言中混合编程,步伐中会含有两种差别计算模子的语句
[*]SQL语句
[*] 负责操纵数据库
[*] 形貌性的面向集合的语句
[*]高级语言语句: 过程性的面向记载的语句 负责控制步伐流程
工作单元之间的通讯方式
1. SQL通讯区
向主语言转达SQL语句的实行状态信息
主语言可以或许据此控制步伐流程
2. 主变量
1)主语言向SQL语句提供参数
2)将SQL语句查询数据库的结果交主语言进一步处理
3. 游标
解决集合性操纵语言与过程性操纵语言的不匹配
[*]为什么要使用游标
[*] SQL语言与主语言具有差别数据处理方式
[*]SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记载
[*]主语言是面向记载的,一组主变量一次只能存放一条记载
[*]仅使用主变量并不能完全满足SQL语句向应用步伐输出数据的要求
[*]嵌入式SQL引入了游标的概念,用来和谐这两种差别的处理方式
[*]什么是游标
[*]游标是系统为用户开设的一个数据缓冲区,存放SQL语句的实行结果
[*]每个游标区都有一个名字
[*]用户可以用SQL语句逐一从游标中获取记载,并赋给主变量,交由主语言进一步处理
[*]使用游标的步骤
[*]1. 说明游标
[*]2. 打开游标
[*]3. 移动游标指针,然后取当前记载
[*]4. 关闭游标
1. 说明游标
[*]使用DECLARE语句
[*]语句格式
EXEC SQL DECLARE <游标名> CURSOR
FOR <SELECT语句>;
功能:是一条说明性语句,这时DBMS并不实行SELECT指定的查询操纵。
2. 打开游标
[*]使用OPEN语句
[*]语句格式
EXEC SQL OPEN <游标名>;
[*]功能
[*]打开游标现实上是实行相应的SELECT语句,把所有满足查询条件的记载从指定表取到缓冲区中
[*]这时游标处于活动状态,指针指向查询结果会合第一条记载之前
3. 移动游标指针,然后取当前记载
[*]使用FETCH语句
[*]语句格式
EXEC SQL FETCH [
FIRST|LAST] FROM] <游标名>
INTO <主变量>[<指示变量>]
[,<主变量>[<指示变量>]]...;
[*]功能
[*]指定方向推动游标指针,然后将缓冲区中的当前记载取出来送至主变量供主语言进一步处理。
[*]NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。
[*] NEXT:向前推进一条记载
[*] PRIOR:向回退一条记载
[*] FIRST:推向第一条记载
[*] LAST:推向最后一条记载
[*] 缺省值为NEXT
[*]说明
[*](1) 主变量必须与SELECT语句中的目标列表达式具有逐一对应关系
[*](2) FETCH语句通常用在一个循环结构中,通过循环实行FETCH语句逐条取出结果会合的行举行处理
[*](3) 为进一步方便用户处理数据,现在一些关系数据库管理系统对FETCH语句做了扩充,允许用户向任意方向以任意步长移动游标指针
4. 关闭游标
[*]使用CLOSE语句
[*]语句格式
EXEC SQL CLOSE <游标名>;
[*]功能
[*]关闭游标,释放结果集占用的缓冲区及其他资源
[*]说明
[*]游标被关闭后,就不再和原来的查询结果集相接洽
[*]被关闭的游标可以再次被打开,与新的查询结果相接洽
第八章 数据库恢复技能
[*]数据库系统中的数据是由DBMS同一管理和控制的,为了适应数据共享的环境,DBMS必须提供数据掩护能力,以保证数据库中数据的安全可靠和正确有效。
7.1 事务的基本概念
[*]事务(Transaction)是用户定义的一个数据库操纵序列,这些操纵要么全做,要么全不做,是一个不可分割的工作单元
[*]事务和步伐是两个概念
[*]在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个步伐
[*]一个应用步伐通常包含多个事务
[*]事务是恢复和并发控制的基本单元
一、什么是事务
[*]事务(Transaction)是用户定义的一个数据库操纵序列,这些操纵要么全做,要么全不做,是一个不可分割的工作单元
[*]事务和步伐是两个概念
[*]在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个步伐
[*]一个应用步伐通常包含多个事务
[*]事务是恢复和并发控制的基本单元
二、如何定义事务
[*]显式定义方式
BEGIN TRANSACTION BEGIN TRANSACTION
SQL 语句1 SQL 语句1
SQL 语句2 SQL 语句2
。。。。。 。。。。。
COMMIT ROLLBACK
[*]隐式方式
当用户没有显式地定义事务时,
DBMS按缺省规定自动划分事务
事务结束
COMMIT
事务正常结束
提交事务的所有操纵(读+更新)
事务中所有对数据库的更新永世生效
ROLLBACK
事务异常终止
[*]
[*]事务运行的过程中发生了故障,不能继承实行
回滚事务的所有更新操纵
[*]
[*]事务滚回到开始时的状态
三、事务的特性(ACID特性)
事务的ACID特性:
[*]原子性(Atomicity)
[*]一致性(Consistency)
[*]隔离性(Isolation)
[*]持续性(Durability )
1. 原子性
[*]事务是数据库的逻辑工作单元
[*]事务中包罗的诸操纵要么都做,要么都不做
2. 一致性
事务实行的结果必须是使数据库从一个
一致性状态变到另一个一致性状态
一致性状态:
数据库中只包含乐成事务提交的结果
不一致状态:
数据库中包含失败事务的结果
3. 隔离性
对并发实行而言
一个事务的实行不能被其他事务干扰
[*]一个事务内部的操纵及使用的数据对其他并发事务是隔离的
[*]并发实行的各个事务之间不能互干系扰
4. 持续性
[*]持续性也称永世性(Permanence)
[*]一个事务一旦提交,它对数据库中数据的改变就应该是永世性的。
[*]接下来的其他操纵或故障不应该对实在行结果有任何影响。
事务的特性
[*]保证事务ACID特性是事务处理的任务
[*]破坏事务ACID特性的因素
[*]多个事务并行运行时,差别事务的操纵交叉实行
[*]事务在运行过程中被强行停止
系统故障的恢复
[*]清除尚未完成的事务对数据库的所有修改
[*]系统重新启动时,恢复步伐要强行撤消(UNDO)所有未完成事务
[*]将缓冲区中已完成事务提交的结果写入数据库
[*]系统重新启动时,恢复步伐需要重做(REDO)所有已提交的事务
恢复机制涉及的关键题目
1. 如何建立冗余数据
[*]
[*]
[*]数据转储(backup)
[*]登录日志文件(logging)
2. 如何利用这些冗余数据实施数据库恢复
1.静态转储
[*]在系统中无运行事务时举行转储
[*]转储开始时数据库处于一致性状态
[*]转储期间不允许对数据库的任何存取、修改活动
[*]优点:实现简单
[*]缺点:降低了数据库的可用性
[*]转储必须等用户事务结束
[*]新的事务必须等转储结束
动态转储
[*]转储操纵与用户事务并发举行
[*]转储期间允许对数据库举行存取或修改
[*]优点
[*]不消等待正在运行的用户事务结束
[*]不会影响新事务的运行
[*]动态转储的缺点
[*]不能保证副本中的数据正确有效
7.4.2 登记日志文件
一、日志文件的内容
1. 什么是日志文件
日志文件(log)是用来记载事务对数据库的
更新操纵的文件
2. 日志文件的格式
以记载为单元的日志文件
以数据块为单元的日志文件
3. 日志文件内容
[*]
[*]各个事务的开始标记(BEGIN TRANSACTION)
[*]各个事务的结束标记(COMMIT或ROLLBACK)
[*]各个事务的所有更新操纵
[*]与事务有关的内部更新操纵
日志文件中的一个日志记载 (log record)
4. 基于记载的日志文件
每条日志记载的内容
[*]
[*]事务标识
[*]操纵类型(插入、删除或修改)
[*]操纵对象(记载ID、Block NO.)
[*]更新前数据的旧值(对插入操纵而言,此项为空值)
[*]更新后数据的新值(对删除操纵而言, 此项为空值)
5. 基于数据块的日志文件
每条日志记载的内容
[*]
[*]事务标识(标明是谁人事务)
[*]操纵对象(记载ID、Block NO.)
[*]更新前数据所在的整个数据块的值(对插入操纵而言,此项为空值)
[*]更新后整个数据块的值(对删除操纵而言, 此项为空值)
[*]常用恢复技能
[*]事务故障的恢复
[*]UNDO
[*]系统故障的恢复
[*]UNDO + REDO
[*]介质故障的恢复
[*]重装备份并恢复到一致性状态 + REDO
(九)关系数据理论
6.1 关系系统
[*]可以或许在肯定程度上支持关系模子的数据库管理系统是关系系统。
[*]由于关系模子中并非每一部分都是同等重要的
[*]并不苛求一个现实的关系系统必须完全支持关系模子。
[*]关系数据结构
[*]域及域上定义的关系
[*]关系操纵
[*]并、交、差、广义笛卡尔积、选择、投影、毗连、除等
[*]关系完整性
[*]实体完整性、参照完整性、用户自己定义的完整性
一个数据库管理系统可定义为关系系统,当且仅当它至少支持:
1. 关系数据库(即关系数据结构)
系统中只有表这种结构
2. 支持选择、投影和(自然)毗连运算
对这些运算不要求用户定义任何物理存取路径
对关系系统的最低要求
6.2 关系系统的查询优化
6.2.1 查询优化概述
[*]查询优化的须要性
[*]查询优化极大地影响RDBMS的性能。
[*]查询优化的可能性
[*]关系数据语言的级别很高,使DBMS可以从关系表达式中分析查询语义。
[*]用户不必思量如何最好地表达查询以获得较好的效率
[*]系统可以比用户步伐的优化做得更好
(1) 优化器可以从数据字典中获取许多统计信息,而用户步伐则难以获得这些信息
(2)假如数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的实行筹划。
在非关系系统中必须重写步伐,而重写步伐在现实应用中往往是不太可能的。
(3)优化器可以思量数百种差别的实行筹划,而步伐员一般只能思量有限的几种可能性。
(4)优化器中包罗了许多复杂的优化技能
[*]查询优化的总目标
选择有效策略,求得给定关系表达式的值
[*]现实系统的查询优化步骤
1. 将查询转换成某种内部表示,通常是语法树
2. 根据肯定的等价变更规则把语法树转换成尺度
(优化)形式
3. 选择低层的操纵算法
对于语法树中的每一个操纵
[*]计算各种实行算法的实行代价
[*]选择代价小的实行算法
4. 天生查询筹划(查询实行方案)
查询筹划是由一系列内部操纵构成的。
6.2.4 关系代数等价变更规则
[*]关系代数表达式等价
[*]指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的
[*]上面的优化策略大部分都涉及到代数表达式的变更
6.2.6 优化的一般步骤
1.把查询转换成某种内部表示
2.代数优化:把语法树转换成尺度(优化)形式
3.物理优化:选择低层的存取路径
4.天生查询筹划,选择代价最小的
第十章 并发控制
[*]DBMS必须提供并发控制机制
[*]并发控制机制是衡量一个DBMS性能的重要标志之一
https://img-blog.csdnimg.cn/456d2d194f7e473299eef949b5d26aed.png
并发操纵带来的数据不一致性
[*]丢失修改(lost update)
[*]不可重复读(non-repeatable read)
[*]读“脏”数据(dirty read)
1. 丢失修改
丢失修改是指事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。
2. 不可重复读
不可重复读是指事务1读取数据后,事务2
实行更新操纵,使事务1无法再现前一次读
取结果。
事务1读取某一数据后:
1.事务2对其做了修改,当事务1再次读该数据时,得到与前一次差别的值。
2. 事务2删除了此中部分记载,当事务1再次读取数据时,发现某些记载神密地消失了。
3. 事务2插入了一些记载,当事务1再次按相同条件读取数据时,发现多了一些记载。
后两种不可重复读偶然也称为幻影现象(phantom row)
3. 读“脏”数据
事务1修改某一数据,并将其写回磁盘,事务2读取同一数据后,事务1由于某种原因被撤消,这时势务1已修改过的数据恢复原值,事务2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。
8.2 封锁
一、什么是封锁
[*]封锁就是事务T在对某个数据对象(比方表、记载等)操纵之前,先向系统发出请求,对其加锁
[*]加锁后事务T就对该数据对象有了肯定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
[*]封锁是实现并发控制的一个非常重要的技能
二、基本封锁类型
[*]基本封锁类型 排它锁(eXclusive lock,简记为X锁)
https://img-blog.csdnimg.cn/56294c88baab44198bce9b42815aa6ed.png
共享锁(Share lock,简记为S锁)
https://img-blog.csdnimg.cn/3a55bab86dfc4d25a9d67f3e42aa9b15.png
8.3 封锁协议
[*]在运用X锁和S锁对数据对象加锁时,需要约定一些规则:封锁协议(Locking Protocol)
[*]何时申请X锁或S锁
[*]持锁时间
[*]何时释放
[*] 差别的封锁协议,在差别的程度上为并发操纵的正确调度提供肯定的保证
[*]常用的封锁协议:三级封锁协议
1级封锁协议
https://img-blog.csdnimg.cn/b694cc12164046ab86655d6575efadb7.png
一级封锁协议 vs 不可重读https://img-blog.csdnimg.cn/81c871c639814de5988291318f9ed17f.png
2级封锁协议
https://img-blog.csdnimg.cn/741a496afdbe473abcb6c86f894b95ad.png
二级封锁协议 vs 不可重读
https://img-blog.csdnimg.cn/f43ca41e0e3843c4800b861ec6cf40f5.png
3级封锁协议
https://img-blog.csdnimg.cn/b7efe6359843474592be0a6dd4df5b15.png
总结
https://img-blog.csdnimg.cn/24589648255d44e7b5c9db2b3ed941ce.png
8.4 活锁和死锁
活锁
定义:事务
页:
[1]