软件设计师中级 第9章 数据库技术基础
9.1 基本概念
9.1.1 数据库的三级模式结构
数据库系统有三级模式结构,一个数据库可以由多个外模式,只能有一个内模式。
视图对应外模式、基本表对应模式(概念模式)、存储文件对应内模式。
外模式
也称子模式(Subschema)或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
概念模式
模式又称概念模式或逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
内模式
它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式(例如,记录的存储方式是顺序存储、按照B树结构存储还是按hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定)。
外模式:视图,也称用户模式或子模式
外模式也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述。它由若干个外部记录类型组成。用户使用数据操纵语言对数据库进行操作,实际上是对外模式的外部记录进行操作。
描述外模式的数据定义语言称为“外模式DDL”。有了外模式后,程序员不必关心概念模式,只与外模式发生联系,按外模式的结构存储和操纵数据。
概念模式:基本表,也称模式
概念模式也称模式,它是数据库中全部数据的逻辑结构和特征的描述,由若干个概念记录类型组成,只涉及型的描述,不涉及具体的值。概念模式的一个具体值称为模式的一个实例,同一个模式可以有很多实例。
需要说明的是,概念模式不仅要描述概念记录类型,还要描述记录间的联系、操作以及数据的完整性和安全性等要求。但是,概念模式不涉及存储结构、访问技术等细节。只有这样,概念模式才算做到了“物理数据独立性”。描述概念模式的数据定义语言称为“模式DDL(Schema Data Definition Language)”。
内模式:存储文件,也称存储模式
内模式也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。例如,记录的存储方式是顺序存储,按照B树结构存储,还是Hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定。描述内模式的数据定义语言称为“内模式DDL”。
注意,内部记录并不涉及物理记录,也不涉及设备的约束。它比内模式更接近于物理存储和访问的那些软件机制,是操作系统的一部分(即文件系统)。例如,从磁盘上读、写数据。
总之,数据按外模式的描述提供给用户,按内模式的描述存储在磁盘上,而概念模式提供了连接这两级模式的相对稳定的中间层,并使得两级中任意一级的改变都不受另一级影响。
两级映像
数据库系统在三级模式之间提供了两级映像:模式/内模式映像、外模式/模式映像。
模式/内模式映像:该映像存在于概念级和内部级之间,实现了概念模式到内模式之间的相互转换。
外模式/模式映像:该映像存在于外部级和概念级之间,实现了外模式到概念模式之间的相互转换。
DBMS 的两级映像功能保证了数据的独立性。(逻辑独立性和物理独立性)
数据的物理独立性。为了保证应用程序能够正确执行,需要修改概念模式和内模式之间的映像。
数据的逻辑独立性。为了保证应用程序能够正确执行,需要修改外模式和概念模式之间的映像。
9.2 数据模型
9.2.1 数据模型的基本概念
模型就是对现实世界特征的模拟和抽象,数据模型是对现实世界数据特征的抽象。最常用的数据模型分为概念数据模型和基本数据模型。
- 概念数据模型。概念数据模型也称信息模型,是按用户的观点对数据和信息建模;是现实世界到信息世界的第一层抽象,强调其语义表达功能,易于用户理解:是用户和数据库设计人员交流的语言,主要用于数据库设计。这类模型中最著名的是实体-联系模型,简称E-R模型。
- 基本数据模型(结构数据模型)。它是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于 DBMS 的实现。基本的数据模型有层次模型、网状模型、关系模型和面向对象模型(ObjeetOriented Model)。
9.2.2 数据模型的三要素
数据库结构的基础是数据模型,是用来描述数据的一组概念和定义。数据模型的三要素是
数据结构、数据操作和数据的约束条件。
(1) 数据结构。数据结构是所研究的对象类型的集合,是对系统静态特性的描述。
(2) 数据操作。数据操作是对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及操作规则。例如操作有检索、插入、删除和修改,操作规则有优先级别等。数据操作是对系统动态特性的描述。
(3) 数据的约束条件。数据的约束条件是一组完整性规则的集合。也就是说,对于具体的应用数据必须遵循特定的语义约束条件,以保证数据的正确、有效和相容。
9.2.3 E-R模型
1、 实体:在E-R模型中,实体用矩形表示,通常矩形框内写明实体名。实体是现实世界中可以区别于其他对象的“事件”或“物体”。
2、联系
在E-R 模型中,联系用菱形表示,通常菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标注上联系的类型(1:1、1:n或m:m)。实体的联系分为实体内部的联系和实体与实体之间的联系。实体内部的联系反映数据在同一记录内部各字段间的联系。
1)两个不同实体之间的联系
一对一(1:1)。指实体集E1中的一个实体最多只与实体集E2中的一个实体相联系。
一对多(1:n)。表示实体集E1中的一个实体可与实体集E2中的多个实体相联系。
多对多(m:n)。表示实体集E1中的多个实体可与实体集E2中的多个实体相联系。
2)两个以上不同实体集之间的联系
两个以上不同实体集之间存在1:1:1、1:1:n、1:m:n和r:m:n的联系。
3)同一实体集内的二元联系
同一实体内的各实体也存在1:1、1:n和m:n的联系。
3、属性
1)简单属性和复合属性。简单属性是原子的、不可再分的,复合属性可以细分为更小的部分(即划分为别的属性)。有时用户希望访问整个属性,有时希望访问属性的某个成分,那么在模式设计时可采用复合属性。例如,职工实体集的通信地址可以进一步分为邮编、省、市、街道。若不特别声明,通常指的是简单属性。
2)单值属性和多值属性。在前面所举的例子中,定义的属性对于一个特定的实体都只有单独的一个值。例如,对于一个特定的职工,只对应一个职工号、职工姓名,这样的属性称为单值属性。但是,在某些特定情况下,一个属性可能对应一组值。例如,职工可能有0个、1个或多个亲属,那么职工的亲属的姓名可能有多个数目,这样的属性称为多值属性。
3)NULL属性。当实体在某个属性上没有值或属性值末知时,使用 NULL 值,表示无意义或不知道。
4)派生属性。派生属性可以从其他属性得来。例如,职工实体集中有“参加工作时间’和“工作年限”属性,那么“工作年限”的值可以由当前时间和参加工作时间得到。这里,“工作年限”就是一个派生属性。
4、实体-联系方法
概念模型中最常用的方法为实体-联系方法,简称 E-R 方法。该方法直接从现实世界中抽象出实体和实体间的联系,然后用非常直观的 E-R 图来表示数据模型。在E-R图中有如表 9-1所示的几个主要构件。
5、扩充的E-R模型
弱实体:在现实世界中有一种特殊的联系,这种联系代表实体间的所有(Ownership)关系,例如职工与家属的联系,家属总是属于某职工的。这种实体对于另一些实体具有很强的依赖关系,即一个实体的存在必须以另一个实体为前提,将这类实体称为弱实体。在扩展的 E-R图中,弱实体用双线矩形框表示。
9.2.4 数据模型
层次模型,采用树型结构表示数据与数据间的联系。在层次模型中,每一个结点表示一个记录类型(实体),记录之间的联系用结点之间的连线表示,并且根结点以外的其他结点有且仅有一个双亲结点。
网状模型,也成DBTG模型,常用存储结构是链接法,该是一个比层次模型更具有普遍性的数据结构,是层次模型的一个特例。
关系模型,是一种用二维表格结构来表示实体以及实体之间联系的数据模型。是目前最常用的数据模型之一。关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的关系,其最大特色是描述的一致性。
面向对象模型,采用面向对象的方法来设计数据库。
9.3 关系代数
9.3.1 关系数据库的基本概念
完整性约束
实体完整性。规定基本关系R的主属性A不能取空值。关系中主码的值不能为空或部分为空,也就是说,主码中属性即主属性不能取空值,规定基本关系R的主属性A 不能取空值。
参照完整性。如果关系R2的外码X与关系R1的主码相对应(基本关系R2和R1不一定是不同的关系,即它们可以是同一个关系),则外码X的每个值必须在关系R1中主码的值中找到,或者为空值。现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系是用关系来描述的,这样自然就存在着关系与关系间的引用。
用户定义完整性。就是针对某一具体的关系数据库的约束条件,反应某一具体应用所设计的数据必须满足的语义要求。指用户对某一具体数据指定的约束条件进行检验。
9.3.2 关系模型
基本术语
关系:一个关系就是一张二维表,每个关系有一个关系名。
元组:表中的一行即为一个元组,对应存储文件中的一个记录值。
属性:表中的列称为属性,每一列有一个属性名。属性值相当于记录中的数据项或者字段值。
域:属性的取值范围,即不同元组对同一个属性的值所限定的范围。例如,逻辑型属性只能从逻辑真(如下)或逻辑假(如F)两个值中取值。
关系模式:对关系的描述称为关系模式,由关系名和其属性集合构成,关系模式的格式为:
关系名(属性名1,属性名2,……)
候选码(或候选键):属性或属性组合,其值能够唯一地标识一个元组。
主码(或主键):在一个关系中可能有多个候选码,从中选择一个作为主码。
主属性:包含在任何候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性。
外码(或外键):如果一个关系中的属性或属性组并非该关系的码,但它们是另外一个关系的码,则称其为该关系的外码。
全码:关系模式的所有属性组是这个关系模式的候选码,称为全码。
超码(超键):一个包含码的属性集称为超码,例如学号是码,则(学号,姓名)就是一个超码。
可以将关系定义为元组的集合,关系模式则是指定的属性集合,元组是属性值的集合。一个具体的关系模型是若干个关系模式的集合。
9.3.2 五种基本的关系代数运算
1)并(Union)
关系R与S具有相同的关系模式,即R与S的元数相同(结构相同)。关系R与S的并是由属于R或属于S的元组构成的集合,记作RUS
2)差(Difference)
关系R与S具有相同的关系模式,关系R与S的差是由属于R但不属于S的元组构成的集合,记作R-S
3)广义笛卡尔积(Extended Cartesian Product)
两个元数分别为n目和m目的关系R和S的广义笛卡儿积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组,记作R×S
4)投影(Projection)
从关系的垂直方向进行运算,在关系R中选出若干属性列A组成新的关系,记作
π_A®={t[A]|∈ R}
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。
5)选择(Selection)
从关系的水平方向进行运算,是从关系R中选择满足给定条件的元组,记作σF®,其形式定义如下:σF®={t|t∈R∧F(t)=True}
其中,F中的运算对象是属性名(或列的序号)或常熟,运算符、算术比较符(<、>、≤、≥、≠)和逻辑运算符(∧与∨或¬非)。例如σ1≥6®表示选取R关系中第1个属性值大于等于第6个属性值的元组;σ1>’6’®表示选取R关系中第一个属性值大于等于6的元组。
9.3.3 扩展的关系代数运算
1)交∩
关系R与S具有相同的关系模式,关系R与S的交是由属于R同时又属于S的元组构成的集合,记作R ∩ S;R ∩ S=R-(R-S)
2)连接
连接分为θ连接、等价连接和自然连接。
θ连接。从R与S的笛卡尔积中选取属性间满足一定给条件的元组
等值连接。当θ为“=”时,称之为等值连接。
自然连接。自然连接时一种特殊的等值连接,它要求两个关系中进行比较的分量必须时相同的属性组,并且在结果集中将重复属性列去掉。
3)除
给定关系R(X,Y)和S(Y,Z),X、Y、Z为属性组。R ÷ S应当满足元组在X上的分量值x的像集
包含关系S在属性组Y上投影的集合。
4)广义投影
广义投影运算润许在投影列表中使用算数运算,实现了对投影运算的扩充
SQL访问控制
通过GRANT和REVOKE将授权通知系统,并存入字典
当用户提出请求时,根据授权情况检查是否执行操作请求
9.5 关系数据库的规范化
9.5.1 函数依赖
函数依赖的公理系统(Armstrong公理系统)。设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有以下推理规则。
● A1自反律:若Y包含于X包含于U,则X→Y为F所蕴涵。
● A2增广律:若X→Y为F所蕴涵,且ZcU,则XZ→YZ为F所蕴涵。
● A3传递律:若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵。
根据上述3条推理规则又可推出下述3条推理规则。
● 合并规则:若X→Y,X→Z,则X→YZ为F所蕴涵。
● 伪传递率:若X→Y,WY→Z,则XW→Z为F所蕴涵。
● 分解规则:若X→Y,Z包含于Y,则X→Z为F所蕴涵。
9.5.2 规范化
1NF(第一范式)列不可分(消除可分数据项)
定义:若关系模式尺的每一个分量是不可再分的数据项,则关系模式R属于第一范式。
2NF(第二范式)主键依赖(消除部分依赖)
定义:若关系模式R∈1NF,且每一个非属性完全依赖于候选码,则关系模式R∈2NF。
换句话说,当1NF消除了非主属性对码的部分函数依赖,则称为2NF。
3NF(第三范式)表不可分(消除传递依赖)
若关系模式R(U,F)中若不存在这样的码X,属性组Y及非主属性Z(Z⊈Y)使得X→Y(Y-/>X),Y→Z成立(可以推出X→Z),则关系模式R∈3NF。
即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。
BC范式(BCNF)
设R是一个关系模式,F是它的依赖集,R属于BCNF,当且仅当其F中每个依赖决定因素必定包含R的某个候选码。
由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:
所有非主属性对每一个码都是完全函数依赖。
所有的主属性对每一个不包含它的码,也是完全函数依赖。
没有任何属性完全函数依赖于非码的任何一组属性。
一个满足BCNF的关系模式R已消除了插入和删除异常。
多值依赖和第四范式(4NF)
设有一关系模式R<U,F>是 INF,如果对于R的每个非平凡多值依赖X→→Y(Y⊈X),X都包含了R的一个候选码,则称R是第四范式,记为 4NF。
9.5.2.1 判断部分函数依赖技巧
非主属性完全依赖候选码,当1NF消除了非主属性对码的部分函数依赖
只需要判断满足第一范式的情况下,是否存在部分依赖
某销售公司数据库的零件关系P(零件号,零件名称,供应商,供应商所在地,库存量),函数依赖集
F={ 零件号 → 零件名称,(零件号,供应商) → 库存量, 供应商 → 供应商所在地}
①主属性 非主属性 ②主属性 非主属性 ③主属性 非主属性
①中的主属性是②主属性的一部分,所以①是部分依赖
②的非主属性完全依赖于主属性组,所以②是完全依赖
③的主属性是②主属性组的一部分,所以③是部分依赖
存在部分依赖,不存在完全依赖候选码,因此不满足第二范式
9.5.2.2 判断传递函数依赖技巧
第三范式是指:非主键列必须直接依赖于主键,不能存在传递依赖
在满足第二范式的情况下,判断非主属性是否有传递依赖,可利用伪传递率
伪传递率:若X→Y,WY→Z,则XW→Z为F所蕴含
设有关系模式R(课程,教师,学生,成绩,时间,教室),其中函数依赖集F 如下:
F={课程 → 教师,(学生,课程)→ 成绩,(时间,教室)→ 课程,(时间,教师)→ 教室,
(时间,学生)→ 教室}=
(时间,学生)→教室,(时间,教室)→ 课程,(时间)(时间,学生)→课程,课程→教师
(时间,学生)→课程→教师 ,存在传递依赖,因此不满足第三范式
9.5.3 模式分解及分解应具有的特性
1、分解
对一个给定的模式进行分解,使得分解后的模式是否与原来的模式等价有3种情况。
(1)分解具有无损连接性。
(2)分解要保持函数依赖。
(3)分解既要无损连接性,又要保持函数依赖。
2、无损连接
3、保持函数依赖
9.6 数据库的控制功能
9.6.1 事务管理
事务具有原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这4个特性也称事务的 ACID 性质。
(1)原子性。事务是原子的,要么都做,要么都不做。
(2)一致性。事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。因此,当数据库只包含成功事务提交的结果时,称数据库处于一致性状态。
(3)隔离性。事务相互隔离,当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
(4)持久性。一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将永久有效。
事务定义的语句
begin transaction:事务开始
commit:事务提交
rollback:事务回滚
9.6.2 数据库的备份与恢复
1、故障类型
数据库中的4类故障是事务内部故障、系统故障、介质故障及计算机病毒。
(1)事务内部故障。事务内部的故障有的可以通过事务程序本身发现。例如,银行转账事务,将账户 A 的金额转X到账户 B,此时应该将账户A的余额-,将账户B的余额+X。如果账户 A的余额不足,那么,两个事务都不做,否则都做。但有些是非预期的,不能由事务程序处理,例如运算溢出、并发事务发生死锁等。
(2)系统故障。通常称为软故障,是指造成系统停止运行的任何事件,使得系统要重新启动,例如 CPU 故障、操作系统故障和突然停电等。
(3)介质故障。通常称为硬故障,如磁盘损坏、磁头碰撞和瞬时强磁干扰。此类故障发生的几率小,但破坏性最大。
(4)计算机病毒。计算机病毒是一种人为的故障和破坏,是在计算机程序中插入的破坏,计算机功能或者数据可以繁殖和传播的一组计算机指令或程序代码。
2、备份方法
恢复的基本原理是“建立数据冗余”(重复存储)。建立冗余数据的方法是进行数据转储和登记日志文件。数据的转储分为静态转储和动态转储、海量转储和增量转储、日志文件。
(1)静态转储和动态转储。静态转储是指在转储期间不允许对数据库进行任何存取、修改操作:动态转储是在转储期间允许对数据库进行存取、修改操作。因此,转储和用户事务可并发执行。
(2)海量转储和增量转储。海量转储是指每次转储全部数据;增量转储是指每次只转储上次转储后更新过的数据。
(3)日志文件。在事务处理的过程中,DBMS 把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS 的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。因此,DBMS 利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后备副本进行介质故障恢复。
3、恢复
事务恢复有以下3个步骤。
(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
(2)对事务的更新操作执行逆操作。
(3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志。
9.6.3 并发控制
1、并发操作带来的问题
并发操作带来的数据不一致性有三类:丢失修改、不可重复读和读脏数据。
2、并发控制技术
并发控制的主要技术是封锁。基本封锁的类型有排它锁(简称锁或写锁)和共享锁(简称S锁或读锁)。
(1)排它锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
(2)共享锁。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A进行任何修改。
3、分布式数据库(熟记)
分片透明:指用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的
复制透明:指采用复制技术的分布方法,用户不需要知道数据是复制到哪些节点,如何复制的
位置透明:指用户无须知道数据存放的物理位置
逻辑透明:指用户或应用程序无需知道局部场地使用的是哪种数据模型
共享性:指数据存储在不同的结点数据共享
自治性:指每结点对本地数据都能独立管理
可用性:指当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪
分布性:指数据在不同场地上的存储
12.2.1 数据库设计的策略与步骤
1、数据库设计的步骤
1)用户需求分析。数据库设计人员采用一定的辅助工具对应用对象的功能、性能和限制等要求所进行的科学分析。
2)概念设计。概念结构设计是对信息分析和定义,如视图模型化、视图分析和汇总。该阶段对应用对象精确地进行抽象和概括,以形成独立于计算机系统的企业信息模型。描述概念模型较理想的是采用 E-R方法。
3)逻辑设计。关系规范化在数据库设计的逻辑设计阶段进行。将抽象的概念模型转化为与选用的 DBMS 产品所支持的数据模型相符合的逻辑模型,它是物理设计的基础,包括模式初始设计、子模式设计、应用程序设计、模式评价以及模式求精。
4)物理设计。逻辑模型在计算机中的具体实现方案。当各阶段发现不能满足用户需求时,均需返回到前面适当的阶段,进行必要的修正。如此经过不断地迭代和求精,直到各种性能均能满足用户的需求为止。
站在巨人的肩膀上,阅得一个更开阔的天地
————————————————
【参考文献】
1、https://blog.csdn.net/XFanny/article/details/143136585
2、https://zhuanlan.zhihu.com/p/695326721