第一节 数据库系统概述
一、专业术语
(一)数据库
从最浅显的角度理解,数据库就是存放数据的一个仓库。
从严格的专业角度理解,数据库是长期存储在计算机内的有组织的、可共享的数据集合。
三个基本特点:永久存储、有组织、可共享
(二)数据库管理系统 DBMS
数据库管理系统属于系统软件,位于用户和操作系统之间。主要用来对数据进行获取和维护。
主要功能:
1.数据定义功能
DBMS提供数据定义语言(DDL),用户通过它可以方便地对数据库中的数据对象进行定义。
2.数据组织、存储和管理
DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、数据的存取路径等。
数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述。
3.数据操纵功能
DBMS提供数据操纵语言(DML),用户可以使用DML操纵数据,对数据进行增删改查。
4.数据库的事务管理和运行管理
数据库在建立、运用和维护时由数据库管理系统统一管理,以保证数据的安全性、完整性及发生故障的系统恢复。
5.数据库的建立和维护功能
包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能。
(三)数据库系统
数据库系统是指在计算机系统中引入数据库之后的系统。
数据库管理系统包括软件、硬件、数据库和人。
数据库系统的核心是数据库管理系统,数据库管理系统的核心是数据库,数据库技术的根本目的是要解决数据共享问题。
二、数据管理技术的发展
(一)人工管理
1.时间:20世纪50年代以前
2.背景:计算机主要用于科学计算。
3.特点:数据不长期保存;数据主要面向应用;不具有共享性。
(二)文件管理
1.时间:20世纪50年代到60年代
2.背景:产生了磁盘等直接存取的存储设备;操作系统中产生了数据管理软件,即文件系统。
3.特点:数据可以存放在文件中,在更新与查询时再次使用;通过文件系统管理数据;数据共享性差
(三)数据库管理系统
1.时间:20世纪60年代后期
2.背景:有了大容量的硬盘
3.特点:数据结构化(是数据库系统阶段和文件系统阶段的本质区别),加上逻辑结构;数据的共享性高,易扩充;数据由DBMS统一管理和控制
加上逻辑结构后
第二节 数据模型
一、模型的概念
特征抽象。所谓的模型就是对现实中具体事物的一种抽象,对现实世界中数据特征的一种抽象或表示。
二、数据模型的概念
数据模型是对现实世界数据特征的抽象。数据模型是用来描述数据、组织数据和对数据进行操作的。
三、数据模型的组成要素
(一)数据结构
数据结构描述数据库的组成对象以及对象之间的联系。
1.与对象的类型、性质、内容有关的。
2.与数据之间联系有关的对象
(二)数据操作
指对数据库中各种对象的实力允许执行的操作的集合。主要的操作有:增、删、改、查。
(三)数据的完整性约束条件
数据的完整性约束条件是一组完整性规则,以保证数据的正确、有效和相容。
实体完整性(主码不为空)、参照完整性(外码)、用户自定义完整性(年龄、性别约束)
四、现实世界的数据化过程——两化三世界
五、概念模型概念
(一)实体
客观存在的具体事物或者抽象概念。eg:一个学生,一个操作流程。
(二)属性
是对客观事物特征的一种反映,是实体具有的某个特征。eg:学生实体中有学号属性、姓名属性,性别属性。
(三)码
可以唯一区分一个实体的属性或属性集。
(四)域
一个属性的取值范围被称为域。eg:性别属性的属性值只能为男/女
(五)实体型
实体集的名称及其所有属性名就是实体型。eg:学生(学号,姓名,性别,年龄)就是学生实体集的实体型。
(六)实体集
所有属性名完全相同的实体集合在一起,称为实体集。eg:学生实体集。
第三节 数据库系统结构
一、数据库系统的三级模式结构
数据库中的三级模式,包含外模式、模式和内模式。如图所示。
模式也称为逻辑模式,是全体数据的逻辑结构。通常以某种数据模型为基础,定义数据的逻辑结构。例如,数据记录的名字、类型、数据值的取值范围等。模式中不存储数据,仅仅用来描述数据库的格式。在数据库系统中用数据库管理系统DBMS提供的数据库定义语言DDL来定义数据库的模式。一个数据库只有一个模式。
外模式是部分数据逻辑结构,相当于模式的子集。如果不同的用户具有不同的数据需求,那么不同用户所使用的外模式也是不同的。每个用户只能看见和访问所对应的外模式。所以外模式是保证数据库安全性的一个重要措施。在数据库系统中用数据库管理系统DBMS提供的数据库定义语言DDL来定义数据库的外模式。
内模式定义了存储方式和存取方法。内模式接近于机器本身,所以内模式与具体机器的硬件和软件密切相关。一个数据库只能有一个内模式。
二、数据库的二级映像
(一)外模式/模式映像
在数据库系统中,可以在同一个模式上创建多个外模式。对于每一个外模式在数据库系统中都对应有外模式/模式映像,它定义了对应关系。若一个数据库的模式发生改变(例如:增加新关系、新的属性或者改变属性的类型等),数据库管理员可以对外模式/模式映像做相应改变,使外模式不变,而用户所使用的应用程序又是根据外模式编写的,故应用程序不需要做出改变,这样就有效保证了数据与应用程序在逻辑上的独立,通常把这种独立成为逻辑独立性。
(二)模式/内模式映像
一个数据库中只有一个模式,并且只有一个内模式,所以说模式/内模式映像是唯一的。它主要定义的是全局逻辑结构与物理存储的对应关系。当数据库的存储发生变化也就是说内模式发生变化,数据库管理员可以通过改变模式/内模式映像而保证模式不变,从而应用程序不变。这样就有效保证了数据与应用程序在物理上的独立,我们把这种独立称为物理独立性。
三、SQL中的三级模式结构
虽然三级模式特别适合于关系模型,但是绝不仅仅是只适合关系模型。很多的其他数据模型也可以用三级模式来体现。
SQL中的关系体现如图所示。
(一)视图
视图是外模式的基本单位,视图是从基本表中导出的一种关系,本身不存储数据,所以视图也被称为虚表,但是用户可以当作表一样的访问从而获取数据。
当用户使用视图查询时,将实时从数据库中调出此视图的定义,并根据该定义及查询条件,从若干个表中取出数据,组织成查询结构,然后展现给用户。
(二)基本表
基本表是模式的基本内容。每一个基本表都是一个实际存在的关系。
(三)存储文件
存储文件是内模式的基本文件。在存储文件中,可以存储基本表的内容。
第四节 关系数据结果及形式化定义
一、关系
K1 X K2 X K3 X …… X Kn的子集叫做在域K1,K2,……,Kn上的关系,表示为R(K1,K2,……,Kn)
R:关系的名字,n:关系的目或度。
关系是笛卡尔积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性。n目关系必有n个属性。
(一)基本术语
1.超键
在关系中能唯一标识元组的属性集称为关系模式的超键。
2.候选键
不含多余属性的超键。
3.主码
用户选作元组标识的一个候选键程序主键
4.主属性
候选键的诸属性称为主属性,不包含在任何候选码中的属性称为非主属性或非码属性。
5.全码
在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码。
6.外码
换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键,则该属性集是关系模式R的外键。
(二)关系的三种类型
1.基本表
基本表是实际存在的表,它是实际存储数据的逻辑表示。
2.查询表
查询表是查询结果对应的表。
3.视图表
视图表是由基本表或者其他视图表导出的表,是虚表,不对应实时存储的数据。
二、关系的完整性
关系模型中有三类完整性约束:实体完整性、参照完整性、用户定义的完整性。
(一)实体完整性
1.规则
若属性(指一个或者一组属性)A是基本关系R的主属性,则A不能取空值
按照实体完整性规则的基本关系的主码都不能取空值。如果主码由若干属性组成,则所有这些主属性都不能取空值。
eg:假设有一张学生表,学号作为主码,如果没有学号,就无法存入学生表中,即主码不为空,实体完整性。
2.具体说明
(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
(2)现实世界中的实体是可以区分的,即它们具有某种唯一性标识。
(3)相应地,关系模型中以主码作为唯一标识。
(4)主码中的属性即主属性不能取空值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与(2)相矛盾,因此这个规则称为实体完整性。
(二)参照完整性
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
(1)或者取空值(F的每个属性值均为空值);
(2)或者等于S中某个元组的主码值。
eg:学生表(学号、姓名、班号);班级表(班号,专业)。班号对于班级表是主码,对于学生表是外码。假如转来学生,外码班号为空(未分班)或者为班级表中某个班号。
(三)用户自定义完整性
任何关系数据库都应该支持实体完整性和参照完整性。除此外,不同的关系数据库都需要根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性就是针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须满足的语义要求。例如某个属性必须取值唯一、某个非主属性不能取空值等。
eg:性别(女/男) 年龄(int)
第五节 范式
一、范式——规范化的形式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。满足最低要求的叫第一范式1NF。在第一范式中满足进一步要求的为第二范式,其余以此类推。
二、范式级别
(一)第一范式1NF
1.规定
符合1NF的关系中每个属性都不可再分。
2.实例:图1要满足1NF——>图2
实际上,1NF是所有关系数据库最基本的要求。如果数据表的设计不符合这个最基本的要求,那么操作是一定不能成功的。也就是说,只要在关系型数据库管理系统RDBMS中已经存在的数据表,一定是符合1NF的。
(二)第二范式
1.存在问题
(1)数据冗余
每一名学生的学号、姓名、系名、系主任这些数据重复多次。每个系和对应的系主任的数据也重复多次。
(2)插入异常
假如学校新建了一个系,但是暂时没有招收任何学生,那么就无法将系名与系主任的数据单独添加到数据表中去。
(3)删除异常
假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了。
(4)修改异常
假如张三转到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据。
以上关系满足第一范式,但仍存在问题,主要如下
通过以上函数依赖关系分析,码只有一个(学号、课名)。
第二步:找出主属性——学号、课名
第三步:找出非主属性——姓名、系别、系主任、分数
第四步:判断依赖关系
2.规定
2NF在1NF的基础上,消除非主属性对于码的部分函数依赖。也就是将大数据表拆分为两个或者更多更小的数据表,在拆分的过程中,要达到更高一级范式的要求,这个过程叫做模式分解。以下是其中一种模式分解的方法:
选课(学号,课名,分数)
学生(学号,姓名,系名,系主任)
通过分解以后得到以下两个关系:
(三)第三范式3NF
1.存在问题
通过上述的分解,我们来判断是否还存在异常问题。
首先,若张三转到法律系,只需要修改一次张三对应的系即可(改进修改异常)
其次,学生的姓名、系名与系主任,不再像之前一样重复那么多次(改进数据冗余)
然后,删除某个系中所有学生的记录,该系的信息仍然丢失(无改进删除异常)
最后,插入一个尚无学生的新系的信息,因为学生表的码是学号不能为空,所以此操作不被允许(无改进插入异常)
为了进一步解决这些问题,我们需要将符合2NF要求的数据表改进为符合3NF的要求。
2.规定
消除了非主属性对于码的传递函数依赖。也就是说,如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
3.解决方式
为了让数据报设计达到3NF,我们进一步进行模式分解为以下形式:
选课(学号,课名,分数)
学生(学号,姓名,系名)
系(系名,系主任)
通过分解以后得到以下三个关系:
……
第六节 数据库的恢复与并发
一、事务的基本概念
(一)事务
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。eg:在数据库中,一个事务可以是一条SQL语句,一组SQL语句或这个程序。
事务和程序是两个概念,一般来说,一个程序中包含多个事务。
事务的开始和结束可以由用户显式控制。如果用户没有显式的定义事务,则有DBMS按缺省自动划分事务。在SQL中,定义事务的语句有3条:
BEGIN TRANSACTION //开始
COMMIT //提交
ROLLBACK //回滚
(二)事务的特性
原子性、一致性、隔离性和持续性。这四个特性称为ACID特性。
1.原子性(过程)
事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
2.一致性(结果)
一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。
3.隔离性
可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
4.持续性
一旦事务完成,无论发生什么系统错误,他的结果都不受影响。
二、数据库的恢复
所谓数据库恢复就是数据库管理系统把数据库从错误的状态,恢复到某一已知的正确状态。
三、数据库恢复的实现技术
(一)数据转储——备份
1.定义
数据转储是数据库恢复中采用的基本技术。所谓转储即DBA定期地将整个数据库复制另一个磁盘上保存起来的过程。这些备用数据被称为后备副本。
当数据库遭到破坏后可以将后备副本重新装入,但重装后备副本只能将数据库恢复到转储的状态,要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。
2.分类
(1)静态转储
静态转储是指系统中无运行事务时进行的转储操作。即转储操作开始的时刻,数据库处于一致性状态,而转储期间不允许对数据库取得任何存取、修改活动。
(2)动态转储
动态转储是指转储期间允许数据库进行存取或修改。即转储和用户事务可以并发执行。
动态转储克服了静态转储的缺点。需要把转储期间各事务对数据库的修改活动登记下来,建立日志文件。这样,后备副本加上日志文件就能把数据库恢复到某一时刻的正确状态。
(二)登录日志文件
1.日志文件的作用
第一,事务故障恢复和系统故障恢复必须用日志文件;
第二,在动态转储方式中必须建立日志文件,后备副本和日志文件结合才能有效恢复数据库
第三,在静态转储方式中,也可以建立日志文件。当数据库毁坏后可装入备用副本将数据库恢复至转储结束的状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时间尚未完成的事务进行撤销处理。
2.登记日志文件
为了保证数据库是可恢复的,登记日志文件时必须遵循两条原则:
(1)登记的次序严格按并发事务执行的时间次序;
(2)必须先写入日志文件,后写数据库。
四、并发控制
(一)并发控制
多用户数据系统需要为众多并发用户提供高度的可用性和快速的响应时间。也就是说要避免多个用户在使用同一数据时造成的相互影响。为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度。
并发操作如果不加控制,虽然单个事务的执行并未发生问题,但由于其他事务的并发,可能引起数据的不一致性,主要体现在以下三个方面:
1.丢失修改;
eg:a、b同时在买北京西的票,票原本有五十张,减去票后剩49张(应为48)
2.不可重复读;
eg:数据库读到A=50,减1后,读到A=49,与前一次不一致。
3.读“脏/错误”数据。
eg:a执行数据t=t-1=49,b读到t=49,a发现执行失败因此进行回滚(rollback),t=50。b读到49就是读错了。
(二)封锁
1.排他锁
也称为X锁,写锁。就是排除他人的锁。一旦建立,那么其他事务对于加了排他锁的对象不能进行再次加锁和其他类型的操作。
2.共享锁
也称为S锁,读锁。一旦建立,那么其他事务就不能在该对象上建立排他锁,但可以再次建立一个共享锁。
3.两锁相容