系统分析师学习笔记(六)

数据库系统

数据库模式

数据库系统是指在计算机信息系统中引入数据库后的系统,一般由数据库、数据库管理系统(DataBase Management System,DBMS)、应用系统、数据库管理员(DataBase Administrator,DBA)和用户构成。数据库系统的结构典型的是三级划分法,其中包括三级模式和两级映射。

1.三级模式
数据库系统由外模式、概念模式和内模式三级构成。

(1)外模式也称为子模式或用户模式,对应于用户级数据库,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。一个数据库可以有多个外模式,一个应用程序只能使用一个外模式。
(2)概念模式也称为模式或逻辑模式,对应于概念级数据库。概念模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。概念模式通常还包含有访问控制、保密定义和完整性检查等方面的内容,以及概念/物理之间的映射。一个数据库只有一个概念模式。
(3)内模式对应于物理级数据库,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。

2.两级独立性
数据库系统两级独立性是指物理独立性和逻辑独立性。三个抽象级别之间通过两级映射(外模式/模式映射和模式/内模式映射)进行相互转换,使得数据库的三级模式形成一个统一的整体。

物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的,当数据的物理存储改变时,应用程序不需要改变。

逻辑独立性是指用户的应用程序与数据库中的逻辑结构是相互独立的,当数据的逻辑结构改变时,应用程序不需要改变。

数据模型

数据模型是现实世界数据特征的抽象。数据模型所描述的内容包括三个部分,分别是数据结构、数据操作和数据约束

数据模型的分类

数据模型主要有两大类,分别是概念数据模型(实体联系模型)和基本数据模型(结构数据模型)。

概念数据模型是按照用户的观点来对数据和信息建模,主要用于数据库的设计,一般用实体-联系(Entity-Relationship,E-R)方法表示,所以也称为E-R模型。

基本数据模型是按照计算机系统的观点来对数据和信息建模,主要用于数据库的实现。基本数据模型是数据库系统的核心和基础,通常由数据结构、数据操作和完整性约束三部分组成。基本数据模型,其中最着名的有层次模型、网状模型、关系模型和面向对象模型。

1.层次模型
层次模型是最早出现的数据模型,采用了树形结构作为数据的组织方式。层次模型数据库系统的典型代表是IBM公司的IMS数据库管理系统(现已经被淘汰)。

2.网状模型
网状模型用有向图表示实体类型和实体之间的联系。网状模型的优点是记录之间的联系通过指针实现,多对多的联系容易实现,查询效率高;其缺点是编写应用程序比较复杂,程序员必须熟悉数据库的逻辑结构。

3.关系模型
关系模型用表格结构表达实体集,用外键表示实体之间的联系。关系模型建立在严格的数学概念基础上,概念单一、结构简单、清晰,用户易懂易用;存取路径对用户透明,从而数据独立性和安全性好,能简化数据库开发工作;其缺点主要是由于存取路径透明,查询效率往往不如非关系数据模型。

关系模型是目前应用最广泛的一种数据模型,例如,Oracle、DB2、SQL Server、Sybase和MySQL等都是关系数据库系统。

4.面向对象模型
面向对象模型是用面向对象的观点来描述现实世界实体的逻辑组织、对象之间的限制和联系等的模型。目前,已有多种面向对象数据库产品,例如,ObjectStore、Versant Developer、Suite Poet和Objectivity等,但其具体的应用并不多。

关系模型

在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库。

1.关系运算
关系代数的基本运算主要有并、交、差、笛卡尔积、选择、投影、连接和除法运算。

2.元组演算
在元组演算中,元组演算表达式简称为元组表达式,其一般形式为{t|P(t)},其中,t是元组变量,表示一个元数固定的元组;P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表达式。{t|P(t)}表示满足公式P的所有元组t的集合。

规范化理论

1.函数依赖与键
函数依赖是数据库的一种约束,决定了关系模式属于哪种范式。

设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记作X→Y。

在R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都有X′→Y不成立,则称Y对X完全函数依赖。若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖;在R(U)中,如果X→Y(Y不是X的真子集),且Y→X不成立,Y→Z,则称Z对X传递函数依赖。

在关系模式中,用户正在使用的候选键称为主键。如果两个关系拥有公共属性(集),且公共属性在一个关系中是主键,则称公共属性是另一个关系的外键。一个关系的候选键有多个,但主键只能有一个。

在此,引入一种求候选键的快捷方法,即图示法。使用图示法求候选键,主要有两个步骤:

(1)将关系模式的函数依赖关系,用有向图的方式表示,其中顶点表示属性,弧表示属性之间的依赖关系。
(2)找出入度为0的属性集,并以该属性集为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键;若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间顶点(既有入度,也有出度的顶点)并到入度为0的属性集中,直至该集合能遍历所有顶点,则该集合为候选键。

2.范式
为了设计一个好的数据库,人们定义了一些好的关系模式标准,称它们为规范的关系模式或范式(Normal Form,NF)。

(1)第一范式(1NF)。在关系模式R中,当且仅当所有属性只包含原子值,即每个分量都是不可再分的数据项,则称R满足1NF。
(2)第二范式(2NF)。满足1NF的关系模式会有许多重复值,修改数据可能会引起疏漏。为了消除这种数据冗余和避免更新数据的遗漏,需要使用更加规范的2NF。当且仅当关系模式R满足1NF,且每个非键属性(即不属于任何候选键的属性,也称为非主属性)完全依赖于候选键时,则称R满足2NF。
(3)第三范式(3NF)。当且仅当关系模式R满足1NF,且R中没有非键属性传递依赖于候选键时,则称R满足3NF。
(4)BCNF。如果关系模式R满足1NF,且R中没有属性传递依赖于候选键时,则称R满足BCNF。

3.关系模式分解
将一个关系模式分解成几个子关系模式,需要考虑的是该分解是否保持函数依赖,是否是无损联接。

数据库访问接口

数据库访问接口是指应用程序与数据库之间的连接部分。常见的数据库访问接口有专用调用、ODBC(Open DataBase Connectivity,开放数据库互连)和JDBC(Java DataBase Connectivity,Java数据库连接)等。

1.专用调用
专用调用接口的优点是执行效率高,由于是专用,编程实现较简单。但对程序员而言,专用调用并不是一件好事情。因为这使得程序员在程序中连接数据库时变得非常困难,对每一种数据库进行编程,就必须对该数据库的底层API有相当程度的了解。这意味着需要同时了解多种数据库的底层API,还不能混淆。

2.开放数据库互连
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。

ODBC的最大优点是能以统一的方式处理所有的数据库,其缺点也是非常明显的,主要体现在以下三个方面:

(1)ODBC只支持关系型数据,像电子邮件之类的非关系型数据是不能支持的。
(2)由于ODBC最初的设计理念就是能够访问所有类型数据库,这种普遍适用也造成了ODBC对每种数据库的支持都不是特别理想。
(3)使用ODBC需要进行一些系统的配置工作。当然,这个操作也是可以用程序来完成。

3.Java数据库连接
Java数据库连接(Java DataBase Connectivity,JDBC)的作用与ODBC是类似的,只不过JDBC只能用在Java程序设计语言中。

数据库的控制功能

DBMS的控制功能,包括并发控制、性能优化、数据完整性和安全性,以及数据备份与恢复等问题。

并发控制

1.事务的基本概念
DBMS运行的基本工作单位是事务,事务是用户定义的一个数据库操作序列,这些操作序列要么全做,要么全不做,是一个不可分割的工作单位。事务具有以下特性:

(1)原子性(Atomicity)。事务是数据库的逻辑工作单位,事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说,这些操作是一个整体,不能部分的完成。
(2)一致性(Consistency)。一致性是指使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的,一致性在逻辑上不是独立的,它由事务的隔离性来表示。
(3)隔离性(Isolation)。隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
(4)持久性(Durability)。持久性也称为永久性,是指事务一旦提交,改变就是永久性的,无论发生何种故障,都不应该对其有任何影响。

事务的原子性、一致性、隔离性和持久性通常统称为ACID特性。

2.数据不一致问题
数据库的并发操作会带来一些数据不一致问题,例如,丢失修改、读“脏数据”和不可重复读等。

(1)丢失修改。事务A与事务B从数据库中读入同一数据并修改,事务B的提交结果破坏了事务A提交的结果,导致事务A的修改被丢失。
(2)读“脏数据”。事务A修改某一数据,并将其写回磁盘,事务B读取同一数据后,事务A由于某种原因被撤消,这时事务A已修改过的数据恢复原值,事务B读到的数据就与数据库中的数据不一致,是不正确的数据,称为“脏数据”。
(3)不可重复读。不可重复读是指事务A读取数据后,事务B执行了更新操作,事务A使用的仍是更新前的值,造成了数据不一致性。

3.封锁协议
处理并发控制的主要方法是采用封锁技术,主要有两种封锁,分别是X封锁和S封锁。

(1)排他型封锁(X封锁)。如果事务T对数据对象A(可以是数据项、元组和数据集,以至整个数据库)实现了X封锁,那么只允许事务T读取和修改数据A,其他事务要等事务T解除X封锁以后,才能对数据A实现任何类型的封锁。可见,X封锁只允许一个事务独锁某个数据,具有排他性。
(2)共享型封锁(S封锁)。X封锁只允许一个事务独锁和使用数据,要求太严。需要适当从宽,例如,可以允许并发读,但不允许修改,这就产生了S封锁的概念。S封锁的含义是,如果事务T对数据A实现了S封锁,那么允许事务T读取数据A,但不能修改数据A,在所有S封锁解除之前,决不允许任何事务对数据A实现X封锁。

在多个事务并发执行的系统中,主要采取封锁协议来进行处理,常见的封锁协议如下:

(1)一级封锁协议。事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可防止丢失修改,并保证事务T是可恢复的,但不能保证可重复读和不读“脏数据”。
(2)二级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,读完后即可释放S锁。二级封锁协议可防止丢失修改,还可防止读“脏数据”,但不能保证可重复读。
(3)三级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。三级封锁协议可防止丢失修改、读“脏数据”,且能保证可重复读。
(4)两段锁协议。所有事务必须分两个阶段对数据项加锁和解锁。其中扩展阶段是在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;收缩阶段是在释放一个封锁之后,事务不能再申请和获得任何其他封锁。若并发执行的所有事务均遵守两段封锁协议,则对这些事务的任何并发调度策略都是可串行化的。遵守两段封锁协议的事务可能发生死锁。

使用封锁技

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值