首页 > 代码库 > 数据库原理

数据库原理

数据库系统概述

基本概念

数据:描述事务的符号记录。

数据库(DB):按一定的数据模型组织,描述和存储在计算机内的,有组织的,可共享的数据集合。

数据库管理系统(DBMS):位于用户和操作系统之间的一层数据管理软件。主要功能包括:

     数据定义功能:DBMS提供DDL,用户通过它定义数据对象。

     数据操纵功能:DBMS提供DML,用户通过它实现对数据库的查询,插入,删除和修改等操作。

     数据库的运行管理:DBMS对数据库的建立,运行和维护进行统一管理,统一控制,以保证数据的安全性,完整性,并发控制及故障恢复。

     数据库的建立和维护功能:数据库初始数据的输入,转换,数据库的转储,恢复,重新组织及性能监视与分析等。

数据库系统(DBS):计算机中引入数据库后的系统,包括:数据库DB,数据库管理系统DBMS,应用系统,数据库管理员DBA和用户

数据管理与数据处理

数据管理:对数据收集,整理,组织,存储,(对象) 维护,检索,传送,(操作)等,目标:在妥当的时候以妥当的形式给妥当的人提供妥当的数据。

数据处理:对数据进行加工,计算,提炼,从而产生新的有效数据的过程(数据--》信息)

管理与处理的关系:管理是处理的基础,处理为管理服务

数据管理的发展阶段

人工管理阶段(50年代中期以前)

文件系统阶段(50年代中期至60年代后期)

数据库系统阶段(60年代后期以后)

技术分享

数据模型

数据处理的抽象过程:现实世界--抽象》信息世界--转换》机器世界(数据世界)

概念模型(信息模型):把现实世界中的客观对象抽象成的某种信息结构,主要用于数据库设计。

实体与记录

信息世界

    实体:客观存在并可相互区分的事务。

    实体集:性质相同的同类实体的集合。

    属性:实体具有的某一特性。

    实体标识符:能将一个实体与其他实体区分开来的一个或一组属性。

数据世界

    记录:实体(抽象表示)

    文件:实体集

    字段或数据项:属性

    关键字:实体标识符。唯一地标识一个记录。又称码,键。

型与值

在DBS中,每一个对象广义上讲都有型与值之分:

是对象的结构或特性描述。

是一个具体的对象实例。

类似于程序实际语言中数据类型数据值的概念。

实体间的联系

实体内部的联系:反应在数据上就是记录内部数据项间的联系(1对1,1对多,多对多)

实体之间的联系:反应在数据上就是记录之间的联系

数据模型

是对现实世界进行抽象的工具,它按计算机系统的观点对数据建模,用于提供数据库系统中信息表示和操作手段的形式框架,主要用于DBMS的实现,是数据库系统的核心和基础。

常用的数据模型:层次模型,网状模型,关系模型,面向对象模型

数据模型的三要素:数据结构(静态)--》如何表示实体及联系,数据操作(动态)--》如何实现增删改查,完整性约束--》如何保证数据的约束条件得到满足

层次模型:用树形结构来表示实体以及实体间联系的模型。

 技术分享

网状模型

技术分享

技术分享

关系模型

技术分享

技术分享

DBS的结构

DBS的三级模式结构

模式:又称逻辑模式,DB的全局逻辑结构,即DB中全体数据的逻辑结构和特征的描述。模式定义的任务:定义全局逻辑结构(构成记录的属性名,类型,宽度等)。定义有关的安全性,完整性要求,定义记录间的联系。

外模式:又称子模式或用户模式,DB的局部逻辑结构,即与某一应用有关的数据的一个逻辑表示。

说明:外模式是某个用户的数据视图,模式是所有用户的公共数据视图,一个DB只能有一个模式,但可以有多个外模式。外模式通常实模式的子集,但可以在结构,类型,长度等方面有差异。DBS提供外模式DDL。

内模式:又称存储模式。数据的物理结构和存储方式的描述,即DB中数据的内部表示方式。一个数据库只有一个内模式,内模式定义的任务:记录存储格式,索引组织方式,数据是否压缩,是否加密等。

两级映像及其作用

模式变,可修改映象使外模式保持不变,从而应用程序不必修改,保证了程序和数据的逻辑独立性。

存储结构变,可修改映象使逻辑结构(模式)保持不变,从而应用程序不必修改,保证了数据与程序的物理独立性。

数据库系统的组成

数据库:一个或多个数据库,四要素:用户数据,元数据,索引,应用元数据

软件:操作系统,数据库管理系统(DBMS),数据库应用开发工具等辅助软件,具有数据库接口的高级语言与编译系统,如C,C++等,某个数据库应用系统

人员:用户(使用),应用程序员(开发),数据库管理员DBA(管理)

硬件:计算机有关设备。

数据库系统研究的对象:三个主要研究领域:DBMS及其辅助软件,数据库设计,数据库理论

关系数据库

关系数据库是应用数学方法来处理数据的,它具有结构简单,理论基础坚实,数据独立性高以及提供非过程性语言等优点。

关系的数学定义

域:值的集合。它们具有相同的数据类型,语义上通常指某一对象的取值范围。

笛卡尔积:没有任何条件的关联

关系

关系模型

三部分:关系数据结构,关系操作集合,关系的完整性

数据结构

单一的数据结构

关系模式

技术分享

关系的三种形式:

基本关系:客观存在的基本表

查询表:由基本表按一定条件检索得到的结果

试图:从一个或多个基本关系上导出的关系。它不对应实际的存储数据,是一个虚关系,然而可永久存在,相当于关系模型的外模式。

关系操作

种类:选择,投影,连接,除,并,交,差,(查询操作)增加,删除,修改(维护操作)

关系模型的三类完整性

实体完整性,参照完整性,用户定义的完整性,

关系数据库标准语言--SQL

数据查询():SELECT

数据定义(DDL):CREATE,DROP,ALTER

数据操纵:INSERT,DELETE,UPDATE

数据控制:GRANT,REVOKE

技术分享

关系系统及其查询优化

全关系系统准则:信息准则,保证访问准则,空值的系统化处理,基于关系模型的动态的联机数据字典,统一的数据子语言准则,试图更新准则,高级的插入修改删除操作,数据物理独立性,数据逻辑独立性,数据完整性的独立性,分布独立性,无破坏准则。

优化的一般策略:

选择,投影运算应尽可能先做,好处是减少下一步运算的数据量

选择和投影运算同时进行,好处是扫描关系的次数

在执行连接前对文件适当 的预处理

把投影同起前或其后的双目运算结合起来

把某些选择和笛卡尔积乘积结合起来成为连接运算

找出公共子表达式

关系代数表达式的优化

语法树:用来表示关系代数表达式的一棵树,其内结点表示一种运算,叶结点表示一个关系。

技术分享

关系代数表达式的优化算法:

分解选择

选择下移

投影下移

选择,投影合并

按点分组(每组只有一个二元运算)

生成程序

优化的一般步骤

把查询转换成某种内部表示,如语法树,

按优化算法对语法树进行优化(标准形)

选择底层的存取路径(充分考虑索引,数据的存储分布,然后选取存储路径)

生成查询计划,选择代价最小的(如对连接运算,考虑各种实现策略,从中选出代价最小的)

关系数据理论

为什么不合适的关系模式会带来插入异常,删除异常,存储异常,修改困难等严重问题

深刻理解函数依赖,多值依赖等有关概念

掌握关系的1NF,2NF,3NF,BCNF,4NF的概念和特征

掌握函数依赖的公理系统,求属性集的闭包算法以及求极小函数依赖集的方法等

掌握模式分解的无损连接性和保持函数依赖性以及分解算法

数据库设计

数据库设计的特点:”三分技术,七分管理,十二分基础数据“,数据库设计和应用系统设计相结合,即将结构设计和行为设计相结合

数据库设计方法中著名的新奥尔良方法,将数据库的设计分为四个阶段:需求分析(分析用户要求),概念设计(信息分析和定义),逻辑设计(设计实现),物理设计(物理数据库设计)。

需求分析

概念结构设计

将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。

概念结构设计的方法:自顶向下,自底向上,逐步扩张,混合策略

逻辑结构设计

逻辑结构分三步进行:将概念结构转换成一般的关系,层次,网状模型

                             将转换来的关系,层次,网状模型向特定的DBMS支持下的数据模型转换

                             对数据模型进行优化

物理结构设计

关系模式的存取方法选择,常用的存取方法:索引方法,B+树方法,Cluster方法,HASH方法,

数据库的实施和维护

事务管理——数据库恢复技术

掌握事务的概念及性质

事务(transaction):一个数据操作序列(主要是更新操作),是数据库应用程序的基本逻辑单元。这些操作要么都做,要么都不做,是一个不可分割的执行单位。

事务标记:BEGIN TRANSACTION(事务开始)  COMMIT(事务提交:事务完成了其包含的所有活动,正常结束),ROLLBACK(事务回滚:撤销已做的所有操作,回到事务开始时的状态)。

事务应具有的性质:原子性(Atomiccity):事务执行时的不可分割性,即事务所包含的活动要么都做,要么都不做。若事务因故障而中止,则要设法消除该事务所产生的影响,使数据库恢复到该事务执行前的状态。

                          一致性(Consistency):事务对数据库的作用应是数据库从一个一致状态到另一个一致状态。

                          隔离性(Isolation):多事务并发执行,应像各事务独立执行一样,不能相互干扰。一个正在执行的事务其中间结果不能为其他事务所访问。

                          持久性(Durability): 一旦事务提交,不论执行何种操作或发生任何故障,都不应对事务的执行结果有任何影响。

                          可串行性(Serializability):并发控制正确性的标准用户程序在逻辑上是正确的,它在串行执行时没有问题,当多个事务并发执行时,可以等价于一个串行执行序列。

事务管理又分为两个方面:

   恢复:保证事务在故障时满足上述性质的技术。

   并发控制:保证事务在并发执行时满足上述性质的技术。

掌握数据库恢复的基本技术和策略

故障的种类:

  事务内部的故障:可以通过事务程序本身发现并处理的故障。非预期的故障(不能由应用程序处理),如运算溢出,被零除,发生死锁时被选中撤销等。

  系统范围内的故障:软故障,造成系统停止的任何事件,如CPU故障,操作系统故障,程序代码错误,断电等。

  介质故障:硬故障,如磁盘损坏,磁头碰撞,强磁场干扰等

  计算机病毒。

恢复的实现技术:

数据库恢复的机制:

    建立冗余数据:数据转储,登记日志文件

    利用冗余数据实施数据库恢复

数据转储与恢复:

    转储:DBA定期将整个数据库复制到磁带或者另一个磁盘上保存起来的过程。

    恢复:当数据库被破坏后可将后备副本重新装入,并重新运行转储以后的所有更新事务。

转储的状态

    静态转储:静态转储得到的一定是一个数据一致性的副本。因为转储必须等用户事务全部结束才能进行,而且新的事务必须等到转储完毕才能开始执行,但数据库的可用性被降低。

    动态转储:转储和用户事务可并发执行,即不必等待正在运行的事务结束,也不影响新事务的运行。但转储的数据可能已过时。为此,必须建立日志文件,记录转储期间对数据库的更新活动,这样,后援副本加日志文件就能把数据库恢复到某个时刻的一致性状态。

转储方式:

    海量转储:每次转储全部数据库(一般每周一次)

    增量转储:只转储上次转储后更新的过程(一般每天一次)

转储方法:

    动态海量,静态海量,动态增量,静态增量

日志文件和恢复:

   日志用来对数据库的更新操作的文件。

   动态转储方式必须建立日志文件

   静态转储方式最好建立日志文件

日志原则:严格按并发事务执行的时间次序登记,先写日志文件,后写数据库。

恢复策略

   利用日志文件进行恢复

   基本策略:对于尚未提交的事务,执行撤销处理(UNDO),对于已经提交的事务,执行重做处理(REDO),在日志文件中设置检查点记录

事务管理--并发控制

并发操作可能造成的不一致性:

   丢失修改:两事务读出同一数据并修改,先写回的数据修改丢失。

   不可重复读:事务T1读取某一数据,事务T2读取并修改了同一数据。事务T1为了对读取值进行校对再读此数据,得到了不同的结果。

   读出“脏”数据:事务T1修改某一数据,事务T2读取同一数据;事务T1由于某种原因被撤销,则T2读到的就是“脏”数据。

产出上述三类不一致性的主要原因就是并发操作破坏了事务的隔离性。

并发控制就是要用正确的方式调度并发操作,使某个事务的执行不受其他事务的干扰。

并发控制的技术是封锁,即事务在修改某个对象前,先锁住该对象,不允许其他事务读取或修改该对象,修改完毕或事务完成后再将锁打开。

封锁

封锁的类型:

  排它锁:(简称X锁,又称互斥锁)若事务T对数据对象R加上X锁,则只允许T读,写R,禁止其他事务对R加任何锁,相应的其他事务就无法读写对象R。

  共享锁:(简称S锁)若事务T对数据对象R加上S锁,则T可以读R,但不可以写R,且其他事务可以对R加S锁,但禁止加X锁。这保证了事务T在释放R的S锁之前,其他事务只可以读R,不可以修改R。

封锁协议: 

   一级封锁协议:事务T在修改数据对象R之前必须先对其加X锁,直到事务结束才释放。

   二级封锁协议:1级封锁协议+事务T在读取数据对象R之前必须先对其加S锁,读完即释放S锁。作用:防止丢失修改,保证事务是可恢复的,防止读“脏”数据。

   三级封锁协议:1级封锁协议+事务T在读取数据对象R之前必须先对其加S锁,S锁也是直到事务结束才释放。作用:防止丢失修改,保证事务是可恢复的,防止读“脏”数据,保证可重复读。

活锁和死锁

活锁(Livelock):数据对象不断处于上锁,开锁的交替状态,某个事务有可能为该对象上锁,但始终没有得到上锁机会而永久等待下去的情形。避免活锁:采用先来先服务策略。

死锁(Deadlock):多个事务因封锁冲突(竞争资源)而永远等待下去的情形。

死锁问题的解决方法:

  预防死锁:一次封锁法,顺序封锁法(都不是很适合)

  诊断死锁并解除:

        超时法:当一个事务的等待时间超过了规定的时限,就认为发生了死锁。很难确定一个合理的时限。

        等待图法:用一个有向图表示事务等待的情况。技术分享

并发调度的可串行性

 调度(Schedule):若干个事务的操作构成的序列。

 串行与并发:对调度S中的两个事务Ti和Tj,若S中Ti的操作都在Tj的操作之前(或反之),则称Ti,Tj是串行执行的,否则称作是并发执行的。若调度S中的所有事务都是串行执行的,则称S是串行的(Serial)。

 可串行化:多个事务的并发执行是正确的,当且仅当其结果与按某一个序串行的执行他们时 的结果相同,称这种调度为可串行化的调度。

两段锁协议

两段封锁协议:(简称2PL)在对任何数据进行读,写操作之前,事务首先要申请并获得对该数据的封锁(读时S锁,写时X锁);在释放一个封锁之后,事务不再申请和获得新的封锁。事务封锁分两个阶段:扩展阶段,只进行上锁;收缩阶段,只进行解锁。

2PL的正确性:定理:若所有事务都遵守两段封锁协议,则对这些事务的任何并发调度策略都是可串行化的。

封锁的粒度

意向锁:用来指示下级节点正在被加锁的锁。对任一结点加锁时,必须先对其上级结点加意向锁。

数据库安全性

用户标识和鉴别

数据存取控制

定义用户权限:对数据对象运行执行的操作类型。

合法权限检查

自主存取控制方法

强制存取控制方法

视图机制

审计

数据加密

SQL的安全性方法

安全保密与系统开销

数据库完整性

完整性约束条件

数据库的完整性:只数据的正确性和相容性。作用:防止数据库中存在不符合语义的数据,防止错误信息的输入输出,主要防范对象是不符合语义的数据。

数据库的安全性:保护数据库,防止非法存取和恶意破坏,主要防范对象是非法用户和非法操作。

完整性检查:DBMS提供一定的机制来检查数据库中的数据,看其是否满足语义规定的条件。

完整性约束条件是对数据语义上的要求

模式定义时对数据类型等的说明是对数据语法上的要求

完整性约束条件作用的对象:关系,元组,列

静态约束:确定状态时,数据对象所应满足的约束条件,是反映数据库状态合理性的约束。

动态约束:数据库从一种状态转变为另一种状态时,新,旧值之间所应满足的约束条件,是反映数据库状态的变迁的约束。

完整性约束条件分类

  静态列级约束

  静态元组约束

  静态关系约束

  动态列级约束

  动态元组约束

  动态关系约束

完整性控制机制

DBMS的完整性控制机制

  定义功能,提供定义完整性约束条件的机制。

  检查功能,检查用户操作是否违背了完整性约束条件

  拒绝违背完整性约束条件的用户操作,保证数据完整性

立即执行约束:事务中更新语句执行完后就进行完整性检查

延迟执行约束:整个事务执行完后才进行完整性检查

技术分享

完整性约束条件分类

对关系数据库,有实体完整性,参照完整性,用户定义的完整性。

参照完整性实现中的几个问题

外码能否接受空值的问题

在被参照关系中删除元组的问题

在参照关系中插入元组时的问题

修改关系中主码的问题

SQL中的完整性方法

实体完整性:用NOT NULL指明要求非空,UNIQUE指明要求唯一等

参照完整性 

数据库原理