第一章、数据库系统概论
-----数据库的四个基本概念
1.数据(Data),描述事务的符号记录称为数据。 数据的含义称为语义,数据与其语义是不可分的。
2.数据库(DataBase,DB)
长期存储在计算机内,有组织的,可共享的大量数据的集合。
数据库数据特点:1.永久存储 2.有组织 3.可共享
3.数据库管理系统(DataBase Management System,DBMS)
位于用户与操作系统之间的一层数据管理软件。数据库管理系统和操作系统一样是计算机的基础软件。
4.数据库系统(DataBase System,DBS)
数据库系统由数据库(DB),数据库管理系统(DBMS),应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。
------数据管理技术的三个阶段:
1.人工管理阶段
特点:数据不保存,应用程序管理数据,数据不共享,不具有独立性,应用程序管理数据。
2.文件系统阶段
特点:数据可以长期保存,由文件系统管理数据,但是数据共享性差,冗余度大,独立性差。
3.数据库系统阶段
特点:数据结构化,数据的共享性高,冗余度低且易扩充,数据独立性高(包括物理独立性和逻辑独立性),数据由数据库管理系统统一管理和控制。
-----数据模型是对现实世界数据特征的抽象,数据模型是数据库系统的核心和基础。
数据模型通常由数据结构,数据操作,数据的完整性约束三部分组成。
一个数据模型通常由这三个方面进行完整描述。
1.数据结构描述数据库的组成对象(实体)以及对象之间的联系。
2.数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作集合,包括操作和有关的操作规则。数据库主要有插删改查四大操作,数据模型必须确切定义这些操作的确切含义、操作符号、操作规则以及操作的实现语言。
根据模型应用的不同目的,数据模型可以分为三大类,分别属于三个不同层次。
3.数据的完整性约束:是一组数据的完整性规则。数据的完整性规则是数据、数据语义和数据联系所具有的制约和依存规则。包括数据结构的完整性规则和数据操作的完整性规则,用以限定符合数据模型的数据库状态以及状态的变化。
-----概念模型(信息模型),强调语义表达功能。
也称信息模型,主要用于数据库设计。
概念模型实际上是现实世界到机器世界的一个中间层次。
概念模型用于信息世界的建模。
现实世界是由一组称作实体的基本对象以及这些对象间的联系构成。
-----信息世界的基本概念
1.实体:现实世界中客观存在并可相互区别的事物。
2.属性:实体所具有的某一特征。
3.码:唯一标识实体的属性集。
4实体型:用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
5.实体集:同一类型实体的集合。
6.联系:实体内部联系指组成实体的各属性间的联系,实体间的联系可分为一对一,一对多,多对多三种。
概念模型的表示方法,**E-R模型(联系-实体模型)最常用的为实体-联系方法(Entity-Relationship approach),该方法用E-R图来描述概念模型。**E-R方法也成为E-R模型。
-----逻辑模型(逻辑数据模型)
逻辑层用于描述数据库数据的整体逻辑结构。该层的数据抽象称为逻辑数据模型(简称为逻辑模型)。 主要用于数据库管理系统的实现。
层次模型、网状模型、关系模型等。
-----物理模型(物理数据模型)
**物理模型是对数据最底层的抽象,用来描述数据的物理存储结构和存取方法。例如,数据的物理记录格式是定长的还是变长的;数据压缩还是非压缩的;索引结构是B+树还是hash结构等。
1.层次模型
概念:有且只有一个结点没有双亲结点,称为根节点。根结点以外的其他结点有且只有一个双亲结点。
2.网状模型
概念:允许一个以上的结点无双亲,一个结点可以有多于一个双亲。
2.网状数据库的数据定义语言(DDL)和数据操作语言(DML)比较复杂,要求用户掌握数据库结构和存取路径,不容易使用。
3.关系模型
关系模型是最重要的一种数据模型.
概念:关系模型由关系数据结构,关系操作集合,关系完整性约束三部分组成。
-----关系模型中数据的逻辑结构是一张二维表,它由行和列组成。**关系模型就是由一组关系组成。
关系模型中的一些术语:
1.关系:一个关系对应通常说的一张表。
2.属性:表中的一列即为一个属性。
3.域:属性的取值范围。
4.元组:表中的一行即为一个元组。
5.码:也称码键。表中的某个属性组,它可以唯一标识一个元组。
6.分量:元组中的一个属性值。
7.关系模式:对关系的描述,一般表示为 关系名(属性1,属性2,…,属性n),相当于二维表的表头部分(表格描述部分)。
关系模型要求关系必须是规范化的,关系的每一个分量必须是一个不可分的 数据项。
关系模型的数据操纵主要包括查询、插入、删除和更新数据。
-----从现实世界到概念模型的转换(建模)是由数据库设计人员来完成的;从概念模型到逻辑模型的转换由数据库设计人员完成;逻辑模型到物理模型的转换由DBMS实现。
-----模式:数据库中全体数据的逻辑结构和特征的描述。
实例:模式的一个具体值。
模式是相对稳定的,实例是相对变动的。
-----数据库的三级模式结构是指数据库是由外模式,模式,内模式三级构成。
外模式:也称子模式或者用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。外模式是模式的子集,一个数据库可以有多个外模式,对应不同的用户需求。
模式:也称逻辑模式,数据库中全体数据的逻辑结构和特征的描述。
内模式:也称存储模式,一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
-----数据库的两层映像,保证了数据库管理系统中的数据具有较高的逻辑独立性和物理独立性。
外模式/模式映像:模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。一个模式可以有多个外模式。对于每一个外模式,数据库管理系统都有一个模式/外模式映像,定义了该外模式和模式之间的关系,该映像定义在外模式的描述中。保证数据与程序的逻辑独立性。
模式/内模式映像:数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的。定义了数据的全局逻辑结构和物理存储之间的对应关系。该映像定义在模式的描述中。保证数据的物理独立性。
数据的独立性:**数据独立是指数据的使用(即应用程序)与数据的说明(即数据的组织结构和存储方式)分离,使应用程序只考虑如何使用数据,而无须关心他们的构造和存储。**数据的独立性用来描述应用程序和数据结构之间的依赖程度,包括数据的物理独立性和数据的逻辑独立性,依赖程度越低则独立性越高。
物理独立性:用户的应用程序和与数据库中数据的物理结构是相互独立的。数据库中的数据在磁盘上如何存储和组织的由数据库管理系统负责,应用程序只关心数据的逻辑结构,当数据的物理存储结构改变时,不用修改应用程序。
**逻辑独立性:用户的应用程序与数据库中的数据的逻辑结构是相互独立的。**数据库中的数据的全局逻辑结构由数据库管理系统负责,应用程序只关心数据的局部逻辑结构。数据的全局逻辑结构改变了,应用程序也不用修改。
----数据库系统的组成:
1.数据库
2.数据库管理系统和应用系统
3.人员(数据库管理员、系统分析员、数据库设计人员、应用程序猿、最终用户)
第二章、关系模型和关系代数
-----关系数据库系统:是支持关系模型的数据库系统。
关系模型的数据结构非常简单,只包含单一的数据结构——关系。
在用户看来,关系模型中数据的逻辑结构是一张二维表。
-----关系数据结构的形式化定义
1.域:一组具有相同数据类型的值的集合。
2.笛卡尔积:给定一组域D1,D2,D3,D4…,Dn,它们之间可以有相同的域。则D1,D2,D3,D4…,Dn的笛卡尔积为:D1XD2XD3XD4…XDn={(d1,d2,d3,…,dn)}对于集合中的每一个元素(d1,d2,d3,…,dn)成为一个n元组,简称元组;元素中的每一个值di称为一个分量。笛卡尔积的基数就是元组的数目。
3.关系:D1×D2×…×Dn的子集叫做所在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…Dn),relation。
这里R表示关系的名字,n是关系的目或度。
关系中的每个元素是关系的元组,通常用t表示。
n=1时,该关系为单元关系,或一元关系。
n=2时,为二元关系。
3.对于关系数据库,表头对应于关系模式,关系模式是型的概念,定义了元组集合的结构;表体对应于关系,关系是元组的集合,关系是值的概念。关系的描述即是关系模式,一般表示:
R(属性名1,属性名2,… ,属性名n)。
4.码:唯一标识一个元组的属性集。码=超码=码键
5.超码:唯一的标识一个元组的属性集。一个超码的任何超集都是超码。
6.如果属性集A是关系r的超码且属性集A的任意真子集都不能成为关系r的超码,则称属性集A为候选码。候选码就是最小的超码。
7.候选码:可以唯一标识一个元组的最少的属性集合。
8.主码:某个能够唯一标识一个元组的最小属性集合。
候选码的诸属性称为主属性,不包括在任何候选码中的属性称为非主属性,或非码属性。
无论是超码、候选码、主码,都具有唯一标识一个元组的特性,码包括超码、候选码和主码。
主码=主键,外码=外键。
在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性都是这个关系的候选码,称为全码。
-----关系数据库模式
1.在关系模式中,实体和实体之间的联系都是通过关系来表示的。
2.所有的实体以及实体之间的联系所对应的关系的集合就构成了一个关系数据库。关系数据库也有值和型之分,关系数据库的型就是关系数据库模式,关系数据库模式就是它所包含的所有关系模式的集合,是对关系数据库的描述;关系数据库的值就是这些关系模式在某一时刻所对应的关系的集合,通常叫关系数据库实例。
-----关系完整性约束
关系模式中有3类数据完整性约束,实体完整性、参照完整性和用户自定义完整性。实体完整性和参照完整性是关系模式必须满足的数据完整性约束,被称作关系的两个不变性,由关系数据库管理系统自动支持。用户自定义完整性是应用领域需要遵循的数据完整性约束。
1.实体完整性:若属性集A是关系r的主码,则A一定不能取空值。由于现实中的实体都是可区分的,即它们具有某种唯一性标识,如果主码取空,那么存在不可标识的实体,这是不允许的。关系模式中以主码作为唯一性标识。
2.参照完整性:现实世界中的实体之间存在各种联系,而在关系模型中实体以及实体间的联系都是用关系来描述。因此,实体间的联系也就对应关系和关系之间的联系。参照完整性规则,若关系r外码参照关系s的主码,则对应的关系r中的每一个元组在属性F上的取值,要么是空值NULL,要么等于关系s中的某个元组的主码值。
3.数据库模式导航图
4.任何关系数据库管理系统都应该支持实体完整性和参照完整性,这是关系模式所要求的。不同的关系数据库根据不同的业务语义,通常还需要满足一些特殊的约束条件。
-----关系操作
-----关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表(关系就是表)
基本表是实际存在的表,查询表是查询结果对应的表,视图表是由基本表和其他视图表导出的表,是虚表。
-----关系模型的关系操作
1.关系中的关系操作有查询操作和更新操作(插、删、改、除)。查询操作是关系模型操作的最主要部分。查询操作的五个基本关系操作,选择、投影、集合并、集合差和笛卡尔积。其他操作可以通过基本操作来定义导出。关系操作的特点是集合操作方式,即操作的对象和结果都是集合。
2.查询语言可以分为过程化语言和非过程化语言。在过程化语言中,用户指导系统对数据库执行一系列操作以计算所需结果。在非过程化语言中,用户只需描述所需信息,而不用给出获取该信息的具体过程。关系查询语言有关系代数、关系演算和SQL语言。关系代数是用代数方式表达的关系查询语言,关系演算是用逻辑方式表达的关系查询语言,它们都是非结构化的查询语言。
3.结构化查询语言SQL,不仅有丰富的查询功能,而且数据定义、数据操作数据控制功能,集DDL、DML、DCL于一体,是关系数据库的标准语言。
-----关系代数查询语言
1.关系代数就是通过关系代数运算****来构建查询表达式。
2.查询又可以分为选择、投影、连接、除、并、差、交、笛卡尔积等、其中选择、投影、并、差、笛卡尔积是5 种基本的操作。交可以用差表示。
3.选择操作:在关系r中找到满足给定的谓词(选择条件)的所有元组,P表示谓词(选择条件)。例:σP®。
4.投影操作:关系是一个二维表,对它的操作从水平角度是选择操作,从纵向角度进行,即投影操作。例:ΠA®,关系r上的投影从关系r中选择若干属性组成新的关系,A为关系r的属性集合。无论是选择还是投影操作,最终结果都是关系,即可以用表达式来替代操作中的关系r。
5.笛卡尔积(重点理解怎么将两个关系进行合并,实际上就是关系r中的元组进行扩展,每个元组都扩展关系s中元组数,并添加到后面,且属性数是两个关系属性数目之和)
6.连接:连接也称为θ连接,关系R与关系S的连接运算是从两个关系的笛卡尔积中选取属性间满足一定条件(谓词θ)的所有元组。
等值连接:等值比较谓词的连接运算。
自然连接:是一种特殊的等值连接,两个关系中具有相同的属性组,并在这个公共属性集中等值连接,在结果中把重复的属性列去掉,最后只保留属性组中分量相同的元组。
左连接:在自然连接的基础上加上左边表上不包含自然连接中所含元组(行)的元组。
右连接:在自然连接的基础上加上右边表上不包含自然连接中所含元组(行)的元组。
外连接:左连接+右连接。
笛卡尔积对两个关系 R 和 S 进行操作,产生的关系中元组个数为两个关系中元组个数之积。等值联接则是在笛卡尔积的结果上再进行选择操作,挑选关系第 i 个分量与第(r+j) 个分量值相等的元组;自然连接则是在等值联接(以公共属性值相等为条件)的基础上再行投 影操作,去掉 S 中的公共属性列,当两个关系没有公共属性时,自然连接就转化成笛卡尔 积。
1、自然连接一定是等值连接,但等值连接不一定是自然连接。
2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量必须是公共属性。
3、等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
4、等值去掉重复的属性就是自然连接。
第三章SQL查询语言
SQL语言由四部分组成,数据定义语言DDL、数据操作语言DML、数据控制语言DCL和其他。
数据定义语言:定义数据的逻辑结构,包括数据库、基本表、视图和索引等。还支持存储过程、函数、对象、触发器等的定义。
数据操作语言:数据库的数据进行检索和更新。更新操作包括增(插)、删、改。SQL数据操作语言=SQL数据检索寓言+SQL数据更新语言。
数据控制语言:对数据库对象进行授权、用户维护、完整性规则定义和事务定义等。
-----SQL结构化查询语言
1.高度非过程化,只需提出做什么,不用指明怎么做。
2.面向集合的操作方式,操作对象、查找结果和插入删除对象也可以是元组的集合。
3.SQL语言是独立的语言,也是嵌入式语言,可以插入到高级程序设计语言中去。
-----SQL语言支持关系数据库管理系统的三级模式结构,其中外模式对应视图和部分基本表,模式对应基本表,内模式对应存储文件。
1.数据库中的独立存在的表称为基本表。SQL中一个关系对应一个基本表,一个或者多个基本表对应一个存储文件;一个表可以带若干索引,索引也存放在存储文件中。
2.视图:一个或者几个基本表中导出的表,只存放视图的定义,不存放对应的数据。
-----SQL语句执行顺序
1.FROM子句
2.WHERE子句
3.GROUP子句
4.聚集函数进行计算
5.HAVING函数子句进行筛选分组
6.计算所有表达式
7.GROUP BY对结果进行排序
------SQL语句查询实例
https://blog.csdn.net/CJJ_jingjie/article/details/79845950
https://blog.csdn.net/znyyjk/article/details/52717336
https://blog.csdn.net/hundan_520520/article/details/54881208
https://blog.csdn.net/Hectorhua/article/details/13767361
https://blog.csdn.net/kasama1953/article/details/52226128
第四章数据库建模
数据库设计:通过将现实世界中的数据进行合理组织,并利用已有的数据库管理系统来建立数据库系统的过程。
-----数据库建模就是数据库概念设计。
它的任务就是分析数据库中必须存储的信息以及这些信息之间的关系,并通过一种数据模型表示。E-R模型是一种数据建模工具,它通过将现实世界中的事物以及关系建模为实体、实体的属性和实体之间的联系,并通过E-R图进行描述,具有很强的表达能力。
-----数据库设计分6个阶段:
需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
①需求分析:准确了解与分析系统需要提供的功能和用户需求(包括数据与处理);这是最困难、最耗费时间的一步。
这一阶段的分析结果是形成用户的需求规格说明书。
②概念结构设计(E-R模型的数据库概念设计):通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。这是整个数据库设计的关键。
③逻辑结构设计:将概念结构转换为某个DBMS所支持的数据模型,即数据库模式。将E-R模式转换为关系数据库模式。
④物理结构设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
⑤数据库实施:运用DBMS提供的数据库语言(如SQL)及宿主语言,根据逻辑设计和物理设计的结果:a. 建立数据库;b. 编制与调试应用程序;c. 组织数据入库;d. 进行试运行
⑥数据库运行和维护阶段:数据库应用系统经过试运行后即可投入正式运行;在数据库系统运行过程中必须不断地对其进行评价、调整与修改。
需求分析和概念设计独立于任何数据库管理系统。
逻辑设计和物理设计与选用的DBMS密切相关。
-----E-R模型的基本概念及表示
实体与实体集:
实体是客观世界中可区别其他事物的“事物”或“对象”。实体集是指具有相同类型和相同属性的实体集合。
属性:
简单属性和复合属性:可以和不可以划分为更小部分的属性。家庭地址多值属性。
单值属性和多值属性:一个特定实体在任何时候有一个或者多个值。
派生属性,通过其他相关属性派生出来。
E-R图中,实体集用矩形表示,属性用椭圆表示,多值属性用双椭圆表示,派生属性用虚线椭圆表示,属性与实体之间用连线表示。主码-下划线,外码-斜体字。
-----联系与联系集
**联系是多个实体间的相互关联,联系集是同类联系的集合。联系集是n(n>=2)个实体集上的数学关系,这些实体集不必互异。一般用菱形表示实体集。**例:选课联系集表示学生与课程之间的选课联系。可以为选课联系集定义一个属性成绩,一般图中都是省略实体集的属性,不再标明。
**数据字典:数据字典的作用是给数据流图上每个成分加以定义和说明。换句话说,数据流图上所有的成分的定义和解释的文字集合就是数据字典。**数据字典内容包括:
1.数据库中所有模式对象的信息,如表、视图、簇、及索引等。
2.分配多少空间,当前使用了多少空间等。
3.列的缺省值。
4.约束信息的完整性。
5.用户的名字。
6.用户及角色被授予的权限。
7.用户访问或使用的审计信息。
8.其它产生的数据库信息。
多联系:给定的各实体之间可以有多种不同的联系,即多个不同的联系集可以定义在一些相同的实体集上,称为实体之间的多联系。
联系集的度:参与联系集的实体集的数目称为联系集的度。二元联系集、三元联系集,数据库系统中大多数联系集都是二元的。
第五章关系数据理论和模式求精
-----必须掌握的基本概念
1.码:唯一标识一个元组的属性集。码=超码。
2.超码:唯一的标识一个元组的属性集。一个超码的任何超集都是超码。
3.如果属性集A是关系r的超码且属性集A的任意真子集都不能成为关系r的超码,则称属性集A为候选码。候选码就是最小的超码。
4.候选码:可以唯一标识一个元组的最少的属性集合。
5.主码:某个能够唯一标识一个元组的最小属性集合。
6.主属性(码属性)包含在任何一个候选码码中的属性称为为主属性,不包括在任何候选码中的属性称为非主属性(非码属性)。
7.无论是超码、候选码、主码,都具有唯一标识一个元组的特性,码包括超码、候选码和主码。
主码=主键,外码=外键。
在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性都是这个关系的候选码,称为全码。
导读:一个好的关系模式应该是数据冗余尽可能少,且不会发生插入异常、删除异常和更新异常问题。为得到一个好的关系模式,一般需要进行模式分解。但模式分解还要考虑分解后的模式是否具有无损连接、保持依赖等特性。关系数据理论就是来指导设计出一个好的关系模式以及对已有的模式进行求精。
问题提出:数据冗余导致的问题和模式分解导致的问题。
-----数据冗余导致的问题(同一信息在数据库中存储了多个副本)
1.冗余存储:信息重复存储。例:在选课模式中,学生姓名和课程名都被重复存储多次。
2.更新异常:当重复信息的一个副本被修改时,所有的副本都要进行修改,当更新数据时,系统需要付出很大代价维护数据库的完整性,否则面临数据一致性的危险。例:当修改某学生的姓名或课程名时,可能只修改部分副本的信息,而其他副本未被修改到。
3.插入异常:只有当一些信息事先已经存放在数据库中时,另外一些信息才能存入数据库。如果某学生没选课或者某门课程没有学生选,则该学生或课程信息不能存入数据库。
4.删除异常:删除某些信息可能丢失其他信息。学生的所有选修课程信息被删除时,则该学生的信息被丢失。
解决问题:关系模式应该满足条件,即范式要求。
-----模式分解导致的问题
模式分解:为减少冗余和各种异常,将关系模式分解为较小的关系模式集来解决就是模式分解。
有损分解和无损分解:如果能够通过连接分解以后所得到的较小关系完全还原被分解关系的所有实例,称为无损分解。该分解具有无损连接的特性。
保持依赖:被分解的关系模式上的所有依赖关系都应该在分解得到的关系模式中保留。
-----函数依赖定义
若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。也就是说,在数据表中,不存在任意两条记录,它们在X属性(或属性组)上的值相同,而在Y属性上的值不同。这也就是“函数依赖”名字的由来,类似于函数关系 y = f(x),在x的值确定的情况下,y的值一定是确定的。
函数X确定Y函数=Y函数确定X= X → Y。
系名 → 系主任 学号 → 系主任 (学号,课名) → 分数
但下函数依赖关系则不成立:
学号 → 课名 学号 → 分数 课名 → 系主任 (学号,课名) → 姓名
完全函数依赖(所有的X函数的属性确定Y)
在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X ’ → Y 不成立,那么我们称 Y 对于 X 完全函数依赖,记作 X F→ Y。(那个F应该写在箭头的正上方,没办法打出来……,正确的写法如图1)
例如:
学号 F→ 姓名 (学号,课名) F→ 分数 (注:因为同一个的学号对应的分数不确定,同一个课名对应的分数也不确定)
部分函数依赖(部分函数X的属性确定Y)
假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X,记作 X P→ Y,如图2。
例如:(学号,课名) P→ 姓名
非平凡函数依赖:A->B函数依赖图
平凡函数依赖:A->A;AB->A(AB是属性集合,即相并)
传递函数依赖:前提,两两非平凡函数依赖
主属性(在任一候选码的属性)、非主属性、码(此处指候选码)
-----四个范式(重点)
1.第一范式1NF,如果关系模式r®的每个属性都是不可分的,则称r®属于第一范式,r®∈1NF。
2.第二范式2NF,如果关系模式r®∈1NF,且所有非主属性都完全函数依赖于r®的候选码(不存在非主属性部分依赖于候选码),则称r®属于第二式,r®∈2NF。目标;将只部分依赖候选码的非主属性分解到其他关系模式中去。
3.第三范式3NF,如果关系模式r®∈2NF,且所有非主属性都直接函数依赖于r®的候选码(不存在非主属性传递依赖于候选码,允许存在主属性对候选码的传递和部分函数依赖)。
4.BCNF范式,如果关系模式r®∈3NF,函数依赖集合中的所有依赖X->Y左部都包含R中的任一候选码(即BCNF范式中左部必须含有候选码)消除主属性对于码的部分与传递函数依赖。
5.一个满足BCNF范式的关系模式必然满足下列结论:
(1)所有非主属性都完全直接函数依赖于每个候选码。
(2)所有主属性都完全函数依赖于每个不包含它的候选码。
(3)没有任何属性完全函数依赖于非候选码的任何一组属性。即左部如果不包含候选码,那么就不存在。
例:3NF放松之处在于允许主属性对候选码的传递依赖和部分依赖。在满足3NF的如下关系模式中,存在主属性a部分函数依赖于候选码B,存在主属性b部分函数依赖于候选码C,存在主属性a传递依赖于主属性c。
**BCNF范式可以出现主属性传递依赖于某一候选码,但此时还需直接依赖另外一个候选码。**关系模式r®,R是属性集合,R(A,B,C,D),函数依赖集F={X1->X2 X2->X1 X1->X3 X1->X4}。仍然满足BCNF范式。
6.解题技巧:先标出主属性、非主属性、候选码,然后再标出关系。
-----函数依赖理论
逻辑蕴涵:若给定函数依赖集F,可以证明其他函数依赖也成立,则称这些函数依赖被逻辑蕴涵(p->q)。
函数依赖集闭包:F为函数依赖集,F逻辑蕴涵的所有函数依赖组成的集合称为F的闭包,记F+,F->F+当且仅当其永真。
计算函数依赖集的闭包:**Armstrong公理,**几个推论直接用于闭包计算。如下:
合并律:若X→Y,X→Z同时在R上成立,则X→YZ在R上也成立。
分解律:若X→YZ在R上成立,则X→Y,X→Z在R上也成立。
伪传递律:若X→Y在R上成立,且WY→Z,则XW→Z。
属性集闭包:r®为关系模式,F为函数依赖集,A为包含于R的属性集,则称在函数依赖集F下由A函数确定的所有属性的集合为F在属性集A的闭包,A+。
属性依赖集闭包的作用:
求关系模式R的候选码和最小函数依赖集F:
L类:一定存在某候选码当中。
R类:不属于候选码
N类:一定存在任意候选码当中
LR类:与L和N候选码中的属性逐个结合,求属性集闭包,若等于U,则为候选码。
模式分解算法:BCNF分解算法和3NF分解算法。
第六章数据库安全性保护和完整性约束
-----数据库安全性
导读:由于数据库中的数据是共享数据,必须在数据库管理系统中建立一套完整的使用规则进行数据库保护,以防止不合法的使用所造成的数据泄露、更改和破坏。
数据库安全保护的目标是确保只有授权用户才能访问数据库,所有未被授权的人员则无法接近数据。安全措施是指计算机系统中用户直接或通过应用程序访问数据库所要经过的安全认证过程。
数据库安全保护:
1.身份认证。
2.存取控制。:决定用户可以对数据库中的哪些对象进行操作、进行何种操作。
(1)**定义用户权限.**并将用户权限登记到数据字典中去。
(2)**合法权限检查。**每当用户发出 存取数据库的操作请求后,DBMS查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。
3.视图:可以通过对不同的用户定义不同的视图,达到限制用户访问范围的目的。因此,视图机制能隐藏用户无法获取的数据。视图的主要功能是提供数据库的逻辑独立性。
4.审计:审计是一种监视措施,用来跟踪和记录有关数据的访问活动。审计追踪把用户对数据库的所有操作自动记录下来,存放在审计日志中。审计日志的一般内容包括操作系统用户名、数据库用户名、数据库操作、操作对象名、操作时间等。审计往往很耗费时间和空间,DBMS一般都是将其作为可选特征,允许DBA根据应用需求打开或者关闭审计功能。审计是DBMS达到C2以上安全级别必不可少的一项安全指标。
第七章事务管理与恢复
-----事务的概念和4个特征
事务是用户定义的一个数据库操作系列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
事务具有4个特性:原子性、一致性、隔离性和持续性,这4个特性也简称为ACID特性。
原子性:故障原子性。事务是数据库的逻辑工作单位。事务的所有操作要么都做要么都不做。通过DBMS撤销未完成事务对数据库的影响来实现的。
一致性:并发原子性。事务执行的结果必须是使数据库从一个一致性状态另外一个一致性状态。它是多个事务并发执行正确性的基础。通过代码或者DBMS提供的数据库完整性约束(如触发器)的自动检查功能来保证。事务的一致性包括显示一致性和隐式一致性。显示一致性是显示定义的完整性约束,如主码、外码、用户自定义约束等。隐式一致性是业务规则隐含的完整性要求。
隔离性:执行原子性。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。通过DBMS的并发控制模板保证。
持久性:恢复原子性。指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。 通过记录在磁盘中的恢复信息(如日志、备份等)来实现丢失数据(因中断而丢失的存放在主存中还未保存到磁盘数据库中的数据)的恢复。
在操作系统中,进程是竞争系统资源和进行处理机调度的基本单元。在数据库管理系统中,事务是数据库管理系统中竞争资源、并发控制和恢复的基本单元。它由SQL语言和高级编程语言提供的事务开始语句和事务结束语句以及由它们包含的全部数据库操作语句组成。有两种类型的事务结束语句。
事务提交(commit):将成功完成事务的执行结果永久化,并释放事务占有的全部资源。
事务回滚(rollback):中止当前事务、撤销其对数据库的更新,释放所占全部资源。事务异常终止。回滚之前事务的所有更新操作,事务滚回到开始时的状态。
-----如何定义事务
显示定义事务:
BEGIN TRANSACTION
SQL语句1
SQL语句2
…
COMMIT/ROLLBACK
隐式定义事务:是指事务提交或回滚之后,自动开始新的事务。
-----事务的并发执行与调度
**并发执行和并行执行:**并发执行是单CPU的处理方式,即“宏观上并行,微观上串行”。并行执行就是在多CPU环境下,才能实现的多个任务同时进行。两者区别在于是否同时。
事务并发执行的优点:
增加系统吞吐量。吞吐量就是单位时间内系统完成事务的数量。当一事务需要等待I/O时,CPU可以去处理其他正在等待CPU的事务。
减少平均响应时间。事务响应时间是指事务从提交给系统到最后完成所需要的时间。
事务一致性状态:数据库中只包含成功事务提交的结果。
事务不一致性状态:数据库中包含失败事务提交的结果。
事务并发执行导致的不一致问题:
1.读脏数据。如果事务T1读取数据但没有提交这个数据,T1由于某种原因中止而撤销,这时T2读取这个未提交的数据,就读取了不一致(失败事务的结果)的数据。数据库中将这种读取未提交且被回滚撤销(先读取再撤销)的数据为读脏数据。
2.不可重复读。指事务Ti两次从数据库中读取的结果不同。如果事务1在事务2更新之前读取一次数据,在更新之后又读取这笔数据,两次读取时不同的。为保证不可重复读,隔离级别下,一个事务可以读另外一个事务未被提交的结果(前提是这个事务不回滚)
**3.丢失更新。**两个或多个事务都读取了同一数据值并修改,最后提交的事务的执行结果覆盖了前面事务提交的执行结果,从而导致前面事务的更新丢失。解决丢失更新的操作就是多读一次。
-----事务调度
事务并发执行的顺序是随机的,可以将多个事务操作组成的随机执行序列称为一个调度。对于一个调度序列来说,应该满足;
该调度应包含该组事务的全部操作。
属于同一个事务的操作应保持在原事务中的执行顺序。
串行调度:属于同一事务的操作都是相邻的。
事务的串行调度可保证数据库的一致性,如果能判断一个并发调度的执行结果等价于一个串行调度的结果,就称该并发调度可保证数据库的一致性(并发执行结果是正确的)。
**冲突操作:**如果Oi和Oj是不同事务在相同数据对象上的操作,并且其中至少有一个写操作,则称Oi和Oj是冲突操作,否则为非冲突操作(都是读操作)。
**冲突等价:**如果调度S可以经过交换一系列的非冲突操作(读操作之间的交换)得到一个新的调度S’,则称S和S’是冲突等价的。
冲突可串行化:如果调度S和一串行调度是冲突等价的(经过一系列读操作之间变换得到一个串行调度),则称S是冲突可串行化的。
冲突可串行化调度执行结果一定是正确的,但是正确的调度不一定是冲突可串行化的。存在不能冲突可串行化的调度结果正确,且等于串行调度结果的值。
题:判断一个给定调度是否可以冲突可串行化?
设并发调度事务集T={t1:R1(X)W1(X),t2:R2(X)R2(Y)W2(X),t3:R3(Y)W3(Y)},两个并发调度为:
HT=R1(X)R2(X)W1(X)R2(Y)W2(X)R3(Y)W3(Y)
HT’=R2(X)R3(Y)R2(Y)W2(X)R1(X)W3(Y)W1(X)
判断是否为冲突可串行化调度。
优先图:G=
1.Wi(Q)->Rj(Q)
2.Ri(Q)->Wj(Q)
3.Wi(Q)->Wj(Q)
基于优先图的冲突可串行化判别标准:如果优先图中无环,则冲突可串行化;如果有环,则非冲突可串行化。
根据并发调度从第一个操作开始直到最后一个操作结束,画出优先图。如果重复的指向,则保留一个箭头。先找操作对象,然后看事务顺序。
-----四大隔离级别:
当多个事务同时进行时,通过设置隔离级别来处理脏读、不可重复读、幻读事件。
read uncommitted | 0 未提交读
将查询的隔离级别指定为 0。
可以读脏数据
读脏数据:一事务对数据进行了增删改,但未提交,有可能回滚,另一事务却读取了未提交的数据
read committed | 1 已提交读
将查询的隔离级别指定为 1。
避免脏读,但可以出现不可重复读和幻读
**不可重复读:**一事务对数据进行了更新或删除操作,另一事务两次查询的数据不一致
幻(虚)读:一事务对数据进行了新增操作,另一事务两次查询的数据不一致。
repeatable read | 2 可重复读
将查询的事务隔离级别指定为 2。
避免脏读,避免不可重复读,允许幻像读
serializable | 3 可序列化
将查询的隔离级别指定为 3。
串行化读,事务只能一个一个执行,避免了脏读、避免不可重复读、避免幻读。
-----并发控制
当数据库中多个事务并发执行时,事务的隔离性不总是得以保证,DBMS必须采取一定的措施对并发执行事务之间的相互影响加以控制,这种措施就是并发控制机制。分为悲观的和乐观的。
悲观的事务并发控制方法认为数据的一致性经常会受到破坏(出现脏读、不可重复读和幻读),因此在事务访问数据对象前须采取一定措施加以控制 ,只有得到访问许可时,才能访问数据对象,如基于封锁的并发控制方法。乐观的事务并发控制方法认为数据的一致性通常不会受到破坏,故事务执行时可直接访问数据对象,只有事务结束时才验证数据库的一致性是否会被破坏。如基于有效性验证方法。
基于封锁的并发控制方法的基本思想:当事务T需访问数据对象Q时,先申请对Q的锁。如批准获得,则T继续执行,此后不允许其他事务修改Q,直到事务T释放Q上的锁。
基本锁类型:
1.共享锁(share lock,S锁),如果事务T获得数据对象Q的共享锁,则Q可读Q但不能写Q。
2.排他锁(X锁),如果事务T获得数据对象Q的排他锁,则Q可读Q也可写Q。
3.读操作申请S锁,写操作或读写操作申请X锁,事务管理器收到封锁请求后,按封锁相容性原则判断是否满足该事务的加锁请求。
**4.锁相容:**如果事务Ti持有数据对象Q的某类型锁后,事务Tj也申请对Q的封锁,如果允许Tj获得对Q的锁,则称Ti申请锁与Tj持有锁相容,否则不相容。共享锁与共享锁相容其他都不相容。
-----两阶段封锁协议(封锁就是加锁,也可以说是申请锁、加锁和释放锁的一系列操作)
两阶段封锁协议要求每个事务分两个阶段提出申请锁和解锁。
1.增长阶段:事务可以获得锁,不能释放锁。
2.缩减阶段:事务可以释放锁,不能再申请锁。
3.两阶段封锁协议能保证冲突可串行化。(非冲突操作交换得到一个串行调度)对于任何事务,调度中该事务获得其最后加锁时刻(增长阶段结束点)称为事务的封锁点。这样多个事务可以根据它们的封锁点进行排序,而这个顺序就是并发事务的一个冲突可串行化顺序。
**4.保证事务可串行化的最常用协议是两阶段封锁协议。**一开始,事务处于增长阶段,事务根据需要获得锁。一旦该事务释放了锁,它就进入缩减阶段,不能再发出加锁请求。两阶段封锁协议实现了事务集的串行化调度,但同时,一个事务的失败可能会引起一连串事务的回滚。为避免这种情况的发生,我们需要进一步加强对两阶段封锁协议的控制。
5.严格两阶段封锁协议(避免级联回滚)和强两阶段封锁协议。严格两阶段封锁协议除了要求封锁是两阶段之外,还要求事务持有的所有排它锁必须在事务提交之后方可释放。这个要求保证未提交事务所写的任何数据,在该事务提交之前均以排它锁封锁,防止其他事务读取这些数据。强两阶段封锁协议,**要求事务提交之前不得释放任何锁。**使用锁机制的数据库系统,要么使用严格两阶段封锁协议,要么使用强两阶段封锁协议。两阶段封锁协议并不保证不会发生死锁,数据库系统必须采取其他的措施,预防和解决死锁问题。
-----恢复与备份
导读:DBMS在运行过程中,可能出现各种各样的故障,如软件故障、电源故障、磁盘故障、自然灾害甚至人为的恶意破坏。由于这些故障的发生可能导致数据丢失或者损坏。当这些故障发生后,DBMS应该采取一系列措施保证能够将数据库恢复到故障发生前的某个一致性状态。 如果数据库中只包含所有成功事务的结果,则称该数据库处于一致性状态。如果由于故障导致有些事务尚未完成就被迫中断,如果这些未完成的事务对数据库所做的修改有一部分写入物理数据库中,数据库就处于一种不正确状态(不一致状态),需要DBMS根据故障类型采取相应措施,将数据库恢复到某个一致的状态。
数据库的故障可用事务的故障来表示,主要分类:
(1)事务故障。事务在运行过程中由于种种原因,如输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误,以及并发事务发生死锁等,使事务未运行至正常终止点就被撤销,这种情况称为“事务故障”。该类故障特征就是系统的软件和硬件都能正常运行,内存和磁盘上的数据都没有丢失和破坏。数据库可能已经将夭折事务操作完成的部分修改的数据写到磁盘中。此时,DBMS强行回滚夭折事务,清除其对数据库的所有修改,使得事务好像没由操作过一样。这类恢复叫撤销。
(2)系统故障。系统故障是指系统在运行过程中,由于某种原因(如操作系统或数据库管理系统代码错误、操作员操作失误、特定类型的硬件错误(如 CPU 故障)、突然停电等造成系统停止运行),致使事务在执行过程中以非正常方式终止,这时内存中的信息丢失,但存储在外存储设备上的数据不会受影响。发生系统故障时,一些尚未完成的事务的结果可能已写入物理数据库中,为了保证数据一致性,需要清除这些事务对数据库的修改。还有一些已完成事务所提交结果留在内存缓冲区中,尚未写到磁盘物理数据库中,使得这些事务对数据库的修改丢失,这也使数据库处于一种不一致状态,因此应将这些已提交事务的更新结果重新写入数据库。系统启动时,恢复程序需要撤销所有未完成事务,还需要重做所有已提交事务,以便将数据库真正恢复到某个一致性状态。
(3)介质故障。系统在运行过程中,由于某种硬件故障,如磁盘损坏、磁头碰撞或由于操作系统的某种潜在的错误、瞬时强磁场干扰,使存储在外存上的数据部分损失或全部损失,称为“介质故障”。这类故障比前两类故障的可能性虽然小得多,但破坏性却最大。
(4)计算机病毒。计算机病毒是一种人为破坏计算机正常工作的特殊程序。在数据库系统中,恢复的基本含义就是恢复数据库本身。也就是说,在发生某种故障使数据库当前的状态已经不再正确时,把数据库恢复到已知为正确的某一状态。目前数据库系统中最常用的恢复方法是转储和登记日志文件,可根据故障的不同类型,采用不同的恢复策略。