第7章数据库设计第8章SQL系统环境第9章面向对象查询语言第1章
1.1数据管理技术的发展
数据管理:如何对数据进行分类.组织.储存.检索及维护。
数据管理的三个阶段:
–人工管理阶段
–文件系统阶段
–数据库系统阶段
1.1.1人工管理阶段
背景:
–硬件:外存只有卡片.纸带.磁带
–软件:汇编语言
–数据批处理
特点:
–数据不进行保存
–没有专门的数据管理软件
–数据面向应用
–只有程序的概念
1.1.2文件系统阶段
–硬件:磁盘.磁鼓等直接存取的外存设备
–软件:操作系统.高级语言.操作系统中的文件系统是专门用于数据管理的软件
–文件批处理.联机实时处理
–数据可以长期保存在磁盘上
–文件系统提供了数据与程序之间的存取方法
–数据冗余度大
–文件之间缺乏联系,相互孤立
1.1.3数据库系统阶段
–硬件:大容量的磁盘
–联机实时处理
–数据的结构化
–数据共享性好
–数据独立性好
–数据存取粒度小
–数据库管理系统(DBMS,databasemanagementsystem)1.2有关数据库的基本术语
数据:计算机用来描述事物的记录(文字.图形.图像.声音)
数据模型:是人们对现实世界的数据特征的抽象。(真实性.易理解.易实现)
–数据模型三要素:数据结构.数据操作和完整性约束
–数据模型类型:层资模型.网状模型.关系模型
数据库:由DBMS管理的数据的聚集
数据库管理系统DBMS:是数据库系统核心,用户开发的数据库系统是建立在特定的DBMS之上
数据库系统DBS(databasesystem):包括和数据库有关的整个系统:数据库.DBMS.应用程序.数据库管理员和用户等。
–数据库系统应该是:
允许用户用一种叫做“数据定义语言“的专用语言建立新的数据库。
允许用户用一种叫做“数据操作语言“或者“查询语言“的专用语言来对数据库中的数据进行查询和更新
支持存储大量的数据,保证对数据的正确及安全使用
控制多用户的并发访问,保证并发方问不相互影响,不损坏数据
数据的完整性
数据的安全性
并发控制
数据库的恢复
–为用户提供了友好的接口
1.3关系数据库系统
1.3.1什么是关系?就是一张表
表名
属性(域)
元组
键码:根据关系中的某个属性或属性集
能唯一确定一个元组,由把这个属性(集)称为关系的键码。
关系不仅可以用来表示某个实体,也可以用来表示实体和实体之间的联系1.3.2关系模型
数据以“关系”的形式,也就是二维表的形式来表示,其数据模型就是关系模型。
1.3.3关系数据库系统
以关系模型为基础的数据库系统就是关系数据库系统,是当前数据库系统的主流。
1.4数据库系统的体系结构
三层模式:外模式、模式、内模式
二层映象功能:外模式/模式映象和模式/内模式映象
1.4.1三层模式结构
外模式:又称为用户模式,是数据库用户和数据库系统的接口,是数据库用户的数据视图,是数据库用户可以看见和使用的局部数据的逻辑结构和特征的描描述。
一个数据库通常都有多个外模式。一个应用程序只能使用一个外模式,但同一外模式可为多个应用程序所用。
模式:可细分为概念模式和逻辑模式,是所有数据库用户的公共数据视而不见衅,是数据库中全部数据的逻辑结构和特征的描述。
一个数据库只有一个模式。模式不但要描友谊赛数据的逻辑结构,还要描述数据之音的联系、数据的完整性、安全性要求。
内模式:又称为存储模式,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。
一个数据库只有一个内模式。内模式并不涉及物理记录,也不涉及硬件设备。三层模式关系:数据库模式是数据库的核心和关键,外模式通常是模式的了集。数据按外模式的描述提供用户,按内模式的描述存储在硬盘上,而模式介于外、内模式之间,既不涉及外部的访问,也不涉及内部的存储,从而起到隔离作用,有利于保持数据的独立性,内模式依赖于全局逻辑结构,但可以独立于具体的存储设备。1.4.2两层映象功能
映象:是一种对应规则,说明映象双方如何进行转换。
外模式/模式映象
–作用:把描述局部逻辑结构的外模式与描述全局逻辑结构的模式联系趣来。
–当模式改变时,只要对外模式/模式映象做相应的改变,使外模式保持不变,则以外模式为依据的应用程序不受影响,从而保证了数据与程序之间的逻辑独立性,也就是数据的逻辑独立性
模式/内模式映象
–作用:把描述全局逻辑结构的模式与描述物理结构的内模式联系起来。
–当内模式改变时,比如存储设备或存储方式有所改变,只要模式/内模式映象做相应的改变,使模式保持不变,则应用程序就不受影响,从而保证了数据与程序之的物理独立性。
–1.5DBMS的体系结构1.5.1DBMS的组成概述
–DBMS的主要组成部分如图示(P10图1.8)–三种类型的DBMS输入:查询、更新、模式更新
查询:
–两种生成方式:(1)通过通用的查询接口
(2)通过应用程序的接口
更新:对数据的插入、修改和删除等操作统称为更新(如上的两种生成方式)
模式更新:数据库的模式是指数据的逻辑结构。模式更新命令一般只能由数据库管理员使用。
1.5.2查询处理程序
–任务是把用较高级的语言所表示的数据库操作转换成一系列对数据库的请求。它的一个重要任务是“优化”查询,即为给予定的查询找出好的解答算法。
1.5.3存储管理程序
–包括两部分:文件管理程序和缓冲区管理程序。它既管理磁盘存储器上的数据文件,又管理存放数据文件部分内容的内存缓冲区。
1.5.4事务管理程序
–事务是数据库的基本工作单元。典型的DBMS允许用户把一个或多个数据库操作组成“事务”。数据库系统常常允许多个事务并发地执行,事务管理程序的任务就是保证这些事务全都能正确执行。
–事务的特性:
原子性
一致性
隔离性
持久性
–如何实现上述特性:
加锁
日志文件
事务提交
1.5.5客户程序/服务程序体系结构
–数据库管理系统通常支持客户程序/服务程序体系结构,DBMS的核心部分都属于服务程序,而客户程序则负责用户接口。
1.6数据库系统运行过程
数据库系统运行过程示意图
2.1对象定义语言ODL对象定义语言:通过给出类的属性、联系和方法来描述面向对象的模型。属性用数据类型来描友谊赛。常用的数据类型包括整型、字符串、枚举型以及结构、集合、数组、包和列表等形式的结构类型。其中集合、数组、包和列表又统称为聚集类型。联系用与之相连的类来描述。联系有单值联系和多值联系之分。
2.1.1面向对象的设计
–对象:指某种可观察、可研究的实体。
–类:具有相似特性的对象归为一类。
–三种特性:
属性(attribute):类型是由基本的数据类型构成的。只有有限的几种。
联系(relationship):类型是对某类对象的引用或是这种引用的集合。
方法(method):是能用于该类对象的函数。
数据库建模:在设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建军模。它主权包括两部分内容:确定最基本的数
据结构;对约束建模。
数据库模式的两种表示法:实体—联系模型(E/R);对象定义语言(ODL)本章导读数据库设计的过程(建模和实现2.2实体—联系模型(E/R图)2.1.2类的说明
–说明一个类的最简单形式:
关键字interface(接口)
类的名字
用花括号括起来的类的特性表
–Example:interface<名字>{<特性表>}2.1.3ODL的属性
InterfaceCourse{AttributeintegerCourseNo;//课程号
attributestringCourseName;//课程名
AttributestringTeacher;//任课老师
}1.若增加一个结构类型的Date属性,用年月是表示:
AttributeSturctDate{integerYear,intergerMonth,intergerDay}CourseDate;//开课日期
–例2:电影类MovieInterfaceMovie{
attributestringTitle;//电影名
attributeintegerYear;//电影制作年
attributeintegerLength;//电影长度
attributeenumFilm{color,blackwhite}Type;电影类型
};注意:type的类型是枚举类型,属性type有两种可能的取值(color,blackwhite)。
2.1.4ODL中的联系和反向联系
注意:
描述一个对象需把属性和对象间的联系都描述出来才更完整
。
例1:course和student类间建立联系
–在course添加代码:
RelationshipSet
(注意有无set的区别:
Relationshipstudentrepresent;//课代表
)–在student类的说明中添加:
RelationshipSet
–一个完整的课程类定义:
Interfacecourse{attributeintegercourseno;attributestringcoursename;attributstringTeacher;RelationshipSet
actor–
在movie中添加:
relationshipset
–在actor中添加:
relationshipset
反向联系
例1:students和course并不是两个毫不相干的联系,如果某个学生出现在某门课程的选课学生集合中,那么这门课程就应该在这个学生的所选课程集合中;反之亦然。
相应代语句修改如下:
在course中:
relationshipset
在student中:
relationshipset
relationshipSet
P21----P23(举例讲)2.2实体—联系模型(E/R图)–属性:它用某个简单类型的什来描述对象的某个方面。
–属性的类型:整型、浮点型、字符类型、字符串类型、布尔类型、枚举类型、结构、集合、数组等类型。
–例1:学生选课数据库(Course)
三个主要部分:
–实体集
–属性
–联系:
与ODL区别:ODL中一对反向的联系在E/R图中用单一的联系来表示,而且ODL中的联系最多只能涉及两个类,而E/R图中的联系可以涉及两个以上的实体集。
–学生选课数据库结构的设计(P23图2.2)–电影资料数据库(P24图2.3)
–实体和实体集、联系与联系集2.2.1E/R图中联系的三种类型
一对一、一对多或多对一、多对多
2.2.2联系中的角色(P25图2.5)2.2.3联系的多向性(P25—26)
多元联系转换为二元的联系
2.3设计原则2.3.1真实性
最基本的设计原则:类(实体集)和属性应当是真实的,应当反映客观现实。
2.3.2避免冗余
设计过程中注意:任何事物都只表达一次,否则既浪费空间,又容易造成不必要的麻烦。
2.3.3简单性
设计过程中,要设法避免引入过多的元素,要应该尽量简单明了。
2.3.4合理选择元素类型
思想:假如某个事物具有比名称更多的信息(属性),那么作为类/实体集来实现更加合适;然而,如果它除了名称之外不具有其他信息,那么作为属性可能更合适。
2.4子类子类(subclass):从一个类中取出具有某些附加特性的对象组成一个附属的类,称为子类。子类除了具有原有类的特性以外,还具有自己附加的特性——属性和/或联系。用这种类与子类的层次关系往往能更好地反映现实世界的层次结构。ODL和E/R都支持这种层次结构。
2.4.1ODL中的子类
例1:为研究生定义一个类Student的子类:PostgraduateInterfacePostgraduate:Student{attributestringTutor;};
注意:子类能自动继承其超类的所有特性(属性和联系)
例2:为动画片定义一个Movie的子类cartooninterfaceCartoon:Movie{relationshipSet
–一个类有多个子类:
例:在movie中定义了cartoon的子类,假设再定义谋杀片子类Murder:interfaceMurder:Movie{attributestringWeapon;}–子类又可有子类,一个类可有多个超类
interfaceCartoon-Murder:Cartoon,Murder{};–注意:如此复杂,易造成混淆,如不同类中不同属性域的相同属性名。
–避免由于多重继承而产生的冲突的机制:
指出特性(属性或者联系)的两个定义中哪一个适用于子类。
重新命名有相同名字的另一个特性。
为子类重新定义在它的一个或多个超大型类中已经定义过的某些特性。
2.4.3E/R图中的子类(isa)P30图2.102.4.4E/R图中的继承
P30-31图2.112.5对约束的建模对约束建模:反映客观世界的各种数据,一般都不是孤立的,往往有着错综复杂的内在联系,而且对其取什也有一定的限制和要求,要使所建立的数据库准确、全面地反映现实世界,就要对这些内容进行说明、加以规范,这就是对约束建模。对约束建模是数据库建模的重要组成部分。对约束建模最重要的两部分是:说明某个属性或属性集构成键码;说明实体集(或类、关系)之间的引用完整性约束。
常见的约束信息:
–键码:是在ODL中类的范围内唯一标识一个对象,或者在E/R图中实体集的范围内唯一标识一个实体的属性或属性集。
–引用完整性约束要求某个对象所引用的值在数据库中确实存在。
–域约束要求某个属性的值必须处于特定的范围内或者取自特性值的集合。
–一般约束是要求在数据库中保存的任意断言。
2.5.1键码
ODL:
–一个键码(由一个属性组成)
interfacestudio(keyname){……};–一个键码(由属性集组成)
interfaceMovie(key(title,year)){};–多个键码
interfaceStudio(keyname,studioNo){};
E/R(用下划线表示):–一个键码(由一个属性组成)
–一个键码(由属性集组成)
–多个键码:把主键码看成实体集唯一的键码。
2.5.2单值约束:
2.5.3引用完整性:一个实体中某个特定属性(集)(通常称为外键码)的取值,如果不是空值,则只能引用另一个实体确实存在的键码属性(集)的值,而不能引用该键码属性取值以外的任何值,两个实体之音的这种联系就称为引用完整性。
2.5.4其他类型的约束
第三章
3.1关系模型的基本概念
关系模型:用称为关系的二维表来表示数据,其数据模型就称为关系模型。二维表的行称为元组,列以属性开头,对于每个属性,都有元组的一个分量与之对应。(例如P39图3.1)3.1.1属性:属性就是关系的标题栏中各列的名字,描述了该列各数据项的含义。3.1.2模式:关系的名称和关系的属性集称为关系的模式。例:student(StudentNo,StudentName,Age,Dept)3.1.3元组:除了关系的标题栏外,其他各行统称为“元组”。元组和对象的联系和区别:可以认为一个元组就表示一个对象,而元组所属的关系就表示对象所属的类。对象具有同一性,而元组没有。3.1.4域:
我们可以重新排和列,而关系并不改变。3.1.6关系的实例
给定关系中元组的集合称为该关系的“实例”。3.2从ODL设计到关系设计
先用ODL或者E/R图来进行数据库设计,再将该设计转换成关系模型。为什么非要把一步能完成的事情转换成两步?(P41)3.2.1从ODL属性到关系属性
若类的所有特性都是属性,而不是联系或者方法,并且属性都是原子类型。在这种情况下,对类建立对应的关系,类的第个属性对应于该关系的一个属性。而要把类中的对转换成元组,只需把该对象在类的四个属性上的取值作为元组的分量即可。3.2.2类中的非原子属性
1)
如果某属性是多个值的集合,则针对每个值建立一个元组。(例P42图3.4)2)
如果某属性的类型是定长的数组,则在关系中用带有数组和下标的属性来表示类中的数组类型的属性。(例P43图3.5)3.2.3单值联系的表示
同一样联系,无须两者都表示出来,只要在其中一个地方表示就可以了。3.2.6ODL子类的表示
原则:1)每个子类都对应于一个关系;2)
这个关系用相应子类的所有特性(包括从超类继承下来的全部特性)来表示。3.3从E/R图到关系设计
E/R与ODL主要有以下区别:1)
在E/RL图中,联系作为独立的概念存在,而不是像ODL那样作为特性嵌套在类定义中,这有助于避免数据冗余。2)
在ODL中,属性可能是任意的聚集类型,比如集合;而在E/R图中,虽然并没有严格规定允许使用的数据类型,但通常都认为允许使用结构化的数据,而不允许使用集合或者其他聚集类型的数据。3)
在E/R图中,联系可以具有属性,而ODL中没有相应的概念。3.3.1实体集到关系的转换
直接把E/R图中的属性对应成相应的属性。(例P46图3.8、图3.9)3.3.2E/R联系到关系的转换
对于一个联系R,它所对应的关系应该具有如下属性:一是联系R所涉及到的每个实体集的键码属性(集),二是R本身的属性。从E/R图转换到关系模式比从ODL转换到关系模式的优点:在ODL中,双向ODL联系会带来大量数据冗余;而从E/R图出发,用单个的关系就可以表示双向的联系。3.3.3“属于”联系到关系的转换
新建立的关系的属性包括被属于的实体集的键码及相应实体集的属性。3.4关系代数(p47—p54)
关系代数:是以代数的形式对关系模式进行查询的一种语方,其中要运算并、交、差、选择、投影、笛卡儿积、自然连接、θ连接和改名。综合使用这些运算可以表达各种各样的查询要求。3.4.1关系的集合运算:并、交、差
关系R和S必须满足条件:1)两者的模式具有相同的属性集;2)
对两者进行集合运算之前,要对两者的属性列进行排序,保证两个关系的属性顺序相同。运算定义如下:1)
R∪S,是R中的元素和S中的元素共同组成的集合。2)
R∩S,是既出现在R中又出现在S中的元素组成的集合。3)
R—S,是只在R中出现,不在S中出现的元素组成的集合。3.4.2投影
该运算作用于关系R将产生一个新关系S,S只具有R的某几个属性列。3.4.3选择
该运算作用于关系R也将产生一个新关系S,S的元组集合是R的一个满足某条件C的子集。3.4.4笛卡儿积
RXS,其关系模式是R和S的模式的并集,是R和S的元组以所有可能的方式组合起来。当R和S有同名的属性,至少要为其中一个属性重新命名。3.4.5自然连接
其关系模式是R和S模式的并集。假设A1、A2、……An是R和S的模式中的公共属性,那么如果R的元组r和S的元组s在这些属性上取值都相同,r和s组合而成的元组就归入该自然连接中。3.4.6θ连接
先将R和S笛卡儿积,然后从RXS的元组中选择满足条件C的元组集合。3.4.7改名
1)
只改关系名2)
不仅该关系名,且改属性名
3.4.8复合运算
3.4.9基本运算和导出运算
除了交、θ连接、自然连接这三种运算可由其他运算导出外,另外六种运算——并、选择、投影、笛卡儿积和改名都是基本运算,每一种都不能由另外五种运算导出。3.5关系演算
关系演算:把数理逻辑中的谓词演算应用到关系中,就是所谓的关系演算。在关系演算中,以元组为变量称为元组关系演算,而以域为变量,则称为域关系演算。关系代数中的8种运算都可用元组关系演算表达式来表达,用关系演算表达查询时,还常用到存在量词不达意和全称量词。
3.5.1元组关系演算
什么是原子公式?公式是定义?运算符的优先级?1、
交2、
并3、
差4、
选择5、
投影6、
笛卡儿积7、
自然连接8、
θ连接9、
复杂的关系代数表达式3.5.2域关系演算
元组关系演算的表达式中用的是元组变量,而域关系演算表达式中用的是元组分量的变量,简称为域变量。3.6关系逻辑
关系逻辑:是以逻辑的形式对关系模型进行查询的一种语言,具体用的查询语言称为数据逻辑。在数据逻辑中,用规则来表达查询。规则主要由称为部关系原子和含有一个或多个原子的体组成。体中的原子称为子目标,既可以是关系原子,也可以是算术原子。关系代数中的8种运算也都能用数据逻辑规则来表达。总之,关系代数、关系演算和关系逻辑完全等价。3.6.1谓词和原子
3.6.2规则和查询
3.6.3从关系代数到数据逻辑
1、交2、并3、差4、选择5、投影6、笛卡儿积7、自然连接8、θ连接10、
复杂的关系代数表达式第4章
4.1SQL的特点
高度非过程化2)
面向集合的操作方式3)
简洁易学,灵活易用4.2简单查询
1)格式:
SELECT*//*表示关系中所有的属性名,可自己按要求罗列几个属性
FROM关系名
WHERE选择条件2)
来的结果关系中的属性另个取名SELECT属性的原名
AS别名例:(P71)SELECTStudentnameasname,’清华大学学生’asdescription,2000-AgeASBirthYearFROMStudent4.2.1选择条件的构成
4.2.2字符串的比较
属性名
like‘字符串’1)‘%’
能和由任意字符组成的任意长度的字符序列匹配,‘-’能和任意一个字符匹配。1)
YYYY-MM-DDHH:MM:SS(.X)4.2.4输出的排序
OEDERBY<属性表>4.2.5聚合运算符
11)
SUM22)
AVG33)
MIN44)
MAX55)
COUNT4.2.6分组
GROUPBY分组属性
HAVING条件4.3连接查询
连接查询:对涉及两个或两个以上的关系进行查询,最本的方法是采用连接查询。其查询语句把关系代数中的自然连接、选择和投影简单地融合在一起。
4.3.1查询的并、交、差
并:UNION交:INTERSECT差:EXCEPT4.3.2连接与笛卡儿积(P77)
4.3.3元组变量
4.4嵌套查询
嵌套查询:把SELECT-FROM-WHERE查询作为子查询用于另一个查询的WHERE子句中,称为嵌套查询。可把运算符EXISTS、IN、ALL和ANY用于子查询的结果关系来表示布尔值条件;若对表达式求反,可在适当位置加上NOT,如果能确信子查询的结果为单值(仅一个元组、一个分量),就可以在外层查询的WHERE子句中直接用比较运算符。4.4.1产生单值的子查询(P79)
4.4.2涉及到关系的选择条件
EXIST2)
IN3)
ALL4)
ANY4.4.3涉及到元组的选择条件
4.5.1插入
INSERTINTOR(A1,A2,……An)VALUES(V1,V2,V3,……Vn)4.5.2删除
DELETEFROMRWHERE<选择条件>4.5.3修改
UPDATERSETA1=E1,A2=E2,……An=EnWHERE<选择条件>4.6定义关系模式
数据定义:(P98)4.6.1属性的数据类型1)
CHAR(n)2)
BIT(n)3)
INT4)
FLOAT5)
DATE4.6.2定义表
1)格式:CREATETABLE(A1〈数据类型〉,
A2〈数据类型〉,……
An<数据类型>);2)NOTNULL表示某个属性的分量值不能为空;UNIQUE表示对某个属性进行单值约束;DEFAULT用来指定某个属性的分量的默认值。4.6.3撤销表
格式:DROPTABLER4.6.4更改关系模式
格式:ALTERTABLER具体的更改操作4.6.5建立和撤销索引
索引:就是一种为关系中的给定属性提供存取路径的数据结构。CREATEINDEX〈索引名〉ON〈关系名(属性名)〉;DROPINDEX〈索引名〉;4.7视图的定义和查询
它们实际上并不存在,只是在逻辑上可以看作是一张表,我们称之为“视图”(view)。我们可以把视图当成是普通的关系一样予以建立,查询、修改或者删除。4.7.1定义视图
CREATEVIEW〈视图名〉AS〈子查询〉;事实上,数据库中只存放视图的定义,实际的数据仍然放在原基本表的物理存放位置上。视图不仅可以建立在一个基本表上,也可以建立在多个基本表上。也可以建立在另一个视图之上。4.7.2查询视图
4.7.3更新视图
4.7.4撤消视图
DROPVIEW<视图名>
第5章
查询优化和并发控制
选择运算尽早进行。2)
投影运算与选择运算同时进行。3)
将笛卡儿积与随后的选择运算合并为连接运算。4)
投影运算与其他运算同时进行。5)
寻找公共子表达式并将结果加以存储。6)
对文件进行预处理。5.2关系代数的等价变换
5.2.1变换规则
连接或笛卡儿积的交换律2)
连接或笛卡儿积的结合律3)
投影的串接律4)
选择的交换/串接律5)
选择与投影的交换/串接律6)
选择对笛卡儿积的分配律7)
投影对笛卡儿积的分配律8)
选择对并的分配律9)
投影对并的分配律10)
择对差的分配律5.2.2应用举例
P1055.3查询优化步骤
步骤:1)把查询转换成一种内部表示2)利用关系代数等价变换规则以及查询优化的一般策略,将语法树进行优化3)选择适当的低层存取路径4)生成一组查询计划,从中选择一个代价最小的5.4并发调度
并发调度:安排事务执行的次序称为调度;利用分时的方法同时处理多个事务,则称为事务的并发调度,也就是并发操作的调度。5.4.1事务
事务:是在数据库上的一个或多个操作的序列,它必须以原子的方式执行,也就是说,所有的操作要么都做,要么都不做。在SQL中我们不必给出任何专门的事务开如语句,但是必须明确地结束一个事务。1)
SQL语句COMMIT(提交)使事务成功地结束。2)
SQL语句ROLLBACK(退回)使事务不成功地终止。5.4.2数据不一致性
并发操作的不正确高度可能会带来三种数据不一致性:1)丢失修改;2)读“脏”数据;3)不可重复读;5.4.3可串行化调度
可串行化调度:当且仅当多个事务并发执行的结果与按某一次序串行执行其结果相同,则认为并发操作是正确的,并称这种调度策略为可串行化调度。5.5封锁管理
5.5.1封锁机制中的主要概念
封锁:指的是某事务在对某数据对象(如关系)进行操作以前,先请求系统对其加锁,成功加锁之后该事务就对该数据对象有了控制权,只有该事务对其进行解锁之后,其他的事务才能更新它。数据库管理系统提供的基本封锁类型:排它锁;共享锁。封锁对象的大小称为封锁的粒度。封锁粒度越大,并发控制的开锁越少;封锁粒度小了,并发控制的开销就要增加了。5.5.2封锁协议封锁协议:封锁是实现并发控制的主要技术。封锁分排它锁(X锁)和共享锁(S锁)两种类型。对X锁或S锁何时申请(加锁)、何时释放(解锁)均有约定的规则,称之为封锁协议。共有三级分锁协议可分别达到系统一致性的不同级别,依次解决不丢失修改、不读脏数据、可重复读等问题。1、
三级封锁协议1)
1级封锁协议2)
2级封锁协议3)
3级封锁协议2、
两段锁协议定义:把事务的执行过程分成申请封锁(加锁)阶段和释放封锁(解锁)阶段,这种规则称为两段锁协议。两段锁协议是保证并发调度可串行性的封锁协方。也就是说,凡遵守两段锁协议的任何调度,都是可串行化的调度。
6.1函数依赖
6.1.1函数依赖的定义:如果关系R中的两个元组在某个特定的属性集A上一致,则它们在某个其他特定属性B上也一致,我们就称B与A之间的关系称为函数依赖。具体的说,就是B函数依赖于A,或者A函数决定B。6.1.2关系的键码
键码:关系R中能函数决定该关系所有属性的最小属性集称为关系R的键码。即键码的任何真子集都不能函数决定该关系的所有属性。6.1.3超键码
6.1.4函数依赖规则
1.
分解/合并规则(P120)2.
平凡依赖规则函数依赖A1,A2,……An——>B1,B2,……Bm等价于A1,A2,……An——>C1,C2,……Ck,其中C是B的子集,但不在A中出现。我们称这个规则为“平凡依赖规则”。3.
传递规则如果A1,A2,……An——>B1,B2,……Bm和B1,B2,……Bm——>C1,C2,……Ck,在关系R中成立,则A1,A2,……An——>C1,C2,……Ck在R中成立。这个规则称为传递规则。6.1.5计算属性的封闭集
属性的封闭集:对于给定的函数依赖集S,属性集A函数决定的属性的集合就是属性集A在依赖集S下的封闭集。(例p122)6.2模式设计
6.2.1问题的提出
数据冗余2)
修改异常3)
删除异常4)
插入异常6.2.2问题的根源
1、
完全依赖与部分依赖2、
传递依赖6.2.3解决途径
所谓范式就是符合某一种级别的关系模式的集合。通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合。这一过程称为规范化。1、
第一范式(1NF):一个关系模式R的所有属性都是不可分的基本数据项。2、
第二范式(2NF):关系模式R属于第一范式,且每个非主属性都完全函数依赖于键码。3、
第三范式(3NF):关系模式R属于第一范式,且每个非主属性都不伟递领带于键码。4、
BC范式(BCNF):关系模式R属于第一范式,且每个属性都不传递依赖于键码。6.2.4分解的原则
无损连接当对关系模式R进行分解时,R的元组将分别在相应属性集进行投影而产生新的关系。如果对新的关系进行自然连接得到的元组的集合与原关系完全一致,则称为无损连接。2、
保持依赖当对关系模式R进行分解时,R的函数依赖集也将按相应的模式进行分解。如果分解后总的函数依赖集与原函数依赖集保持一致,则称为保持依赖。6.2.5分解的方法
模式分解的两个规则:1、
公共属性共享2、
部分依赖归子集;完全依赖随键码2、
基本依赖为基础,中间属性作桥梁3、
找违例自成一体,舍其右全集归一;若发现仍有违例,再回首如法炮制。6.2.6关系模式规范化小结
基本思路:从非主属性到主属性逐步消除决定因素不是键码的非平凡函数依赖,从而使每个决定因素都包含键码(而不是键码的一部分)。6.3多值依赖
6.3.1属性独立性带来的冗余
6.3.2多值依赖的定义
6.3.4分解成第四范式
第7章
数据库设计第7章
数据库设计
7.1概述
7.1.1数据库设计的任务
数据库的生命周期:一是数据库的设计阶段,二是数据库的实施和运行阶段。数据库设计的基本任务:根据一个单位的信息需求、处理需求和数据库的支撑环境(包括DBMS、操作系统和硬件),设计出数据模式(包括外模式、逻辑(概念)模式和内模式)以及典型的应用程序。数据库设计的两种不同的方法:一种是以信息需求为主,兼顾外理需求,这种称为面向数据的设计方法;另一种是以处理需求主主,兼顾信息需求,这种方法称为面向过程的设计方法。数据库设计的成果:一是数据模式,二是以数据库为基础的典型应用程序。7.1.2数据库设计的特点
反复性2)
试探性3)
分步进行7.1.3数据库设计的步骤(P143图7.1)
需求分析2、
概念设计3、
逻辑设计4、
物理设计7.2需求分析
设计一个数据库,首先必须确认数据库的用户和用途。由于数据库是一个单位的模拟,数据库设计者必须对一个单位的组织机构、各部门的联系、有关事物和活动以及描友谊赛它们的数据、信息流程、政策和制度、报表及其格式和有关的文档等有所了解。收集和分析这些资料的过程称为需求分析。
元数据
数据字典(P145)7.2.1应用领域的调查
两个阶段:第一阶段,对应用领域的组织结构、业务流程和数据流程进行调查,对现行系统的功能和所需信息有一个明确的认识;第二阶估,在第一阶段的基础上进行应用领域的分析,抽象出应用领域的逻辑模型,最后把逻辑模型用数据流图来表示。7.2.2定义信息与应用(P147)
定义数据库系统支持的信息的目的及步骤定义数据库系统支持的应用的目的及步骤7.2.3定义操作任务(DBIPO图)
一个应用包括一个或多个数据库操作任务。每个数据库操作任务可属于多个应用。划分数据库操作任务的规则如下:1,2,3,4(P148)7.2.4定义数据项(DD)
7.2.5预测未来的改变
7.3概念设计
概念设计的任务包括数据库概念模式设计和事务设计两个方面。其中事务设计的任务是,考察需求分析阶段提出的数据库操作任务,形成数据库事务的高级说明。数据库概念模式设计的任务是,以需求分析阶段所识别的数据项和应用领域的求来改变信息为基础,使用高级数据库模型建立数据库概念模式。
7.3.1概念设计的基本方法1、
集中式模式设计法2、
视图综合设计法7.3.2视图设计的基本策略1、
自顶向下2、
自底向上3、
由内向外7.3.3视图综合设计方法1、
局部概念模式设计2、
视图的集成7.4逻辑设计(定义解释p165)
7.4.1E/R图到关系模式的转换
实体集的转换2、
联系的转换1)
1:1联系2)
1:N联系3)
M:N联系7.4.2逻辑模式的规范化和优化
7.5物理设计
(P160)
数据库物理设计的任务是在数据库逻辑设计的基础上,为每个关系模式选择合适的存取方法和存储结构。最常用的存取方法是索引方法。在常用的连接属性和选择属性上建立索引,可显著提高查询效率。7.5.1影响物理设计的因素7.5.2选择存取方法7.5.3设计存储结构1)
减少访盘冲突,提高I/O的并行性2)
分散热点数据,均衡I/O负荷3)
保证关键数据的快速访问,缓解系统的瓶颈7.6数据库的实施、运行和维护7.6.1数据库的实施1、
建立实际数据库的结构2、
装入试验数据,调试应用程序3、
装入实际数据4、
进入试运行7.6.2数据库的运行和维护1、
数据库的转储和恢复2、
维持数据库的安全性与完整性3、
监测并改善数据库性能4、
数据库的重组和重构第八章
SQL系统环境
第八章
8.1嵌入式SQL8.1.1什么是嵌入式SQL交互式SQL:在独立使用SQL语言进行数据库操作时,这样的使用方法称为ISQL;嵌入式SQL;把SQL语言嵌入程序设计语方即宿主语言的数据库处理功能相结合,这样使用的SQL叫嵌入式SQL.8.1.2如何实现嵌入式SQL(1)
说明部分:C语言和SQL语言之间是通过共享变量来进行数据的传递a)
共享变量的定义在SQL语句中引用共享变量时,变量前加‘:’a)
系统定义的特殊变量SQLSTATE,用来让DBMS向宿语言程序报告SQL语句执行情况.(2)
执行部分1)
插入2)
修改3)
删除4)
查询1.
当查询的结果只有一个元组,可以用into赋值于共享变量.2.
否则,可用游标的查询方法.8.1.3使用游标的SQL编程1,定义P1702,四种语句:1}说明游标语句
EXECSQLDECLARE<游标名>CURSORFOR(查询语句)2)打开游标语句EXECSQLOPEN<游标名>当打开游标时,执行与游标相连系的SQL查询语句,游标执行指向第一个元组之前.3)推进语句
EXECSQLFETCH<游标名>INTO<变量表>向前推进游标,读取元组,赋值于变量4)关闭游标语句
EXECSQLCLOSE<游标名>例P171分析学生成绩的分布情况8.2有关事务的嵌入式SQL事务的原子性,要么都做,要么都不做例1,学生选课,编写一个函数ChooseCourse()来取得课程和余额的关系,若选课余额为0,则不能再被选,否则,余额减1P172COURSE(COURSENO,COURSENAME,TEACHERNAME,NUMLEFT)例2,p173银行帐户系统的转账问题解决事务问题的方法:明确结束事务.8.3SQL环境8.3.1数据库元素的层次结构SQL环境是由以DBMS为核心的软硬件系统组成的,在该环境中,基本表,视图等数据库元素将按层次结构组成数据库模式,目录和群集.P176图8.21,模式:
a)定义
b)说明一个模式的格式:CREATESCHEMA<模式名><元素说明>c)设为当前模式的格式:SETSCHEMA<模式名>d)撤消模式的格式:DROPSCHEMA<模式名>[CASCADE|RESTRICE]2,目录a)
定义b)
建立目录:3,群集:8.3.2客户程序和服务程序系统三个概念:1)连接:2)会话:3)模块8.3.3Client/server体系结构P1808.4数据库的完整性
实体完整性
引用完整性
用户定义的完整性8.4.1说明键码约束1)
两种方法说明键码primarykeyunique1)
在CREATETABLE语句中说明主键码有两种方法.a)
在关系模式中列出属性时说明某个属性为主键码b)
在关系模式的属性表之后别行说明
c)
说明键码的方法(虽不是主键码,但该属性取值唯一2)
SQL在键码的属性上建立素引来有效地实施键码约束Createuniqueindex<素引名>on关系名(属性名)8.4.2说明外键码约束1,外键码的含义:1)
引用另外一个关系的某个属性或属性集,而这属性或属性集正是该关系的主键码2)
说明为外键码的属性值必须是所引用的关系的某个相应属性集2,两种方法说明外键码1)
如果外键码是单一的,在属性名和类型之后加上REFERENCES<表>(<属性>)2)
若外键码是单一属性或属性集P1838.4.3说明检验约束1,基于属性的检验约束:限制属性分量的值:
两种方法:1)
在关系模式中定义说明对属性的约束2)
先说明域的约束,随后用有约束的域作为属性的数据类型1)
非空约束2,基于元组的检验约束:对单个关系中的元组给予某种限制8.4.4更新约束1,对约束的命名