第1页共22页第1章OracleDatabase10g数据库基础本章学习目标:●掌握数据库基本概念。●掌握数据库设计的方法和步骤。●了解OracleDatabase10g数据库的概况。●了解OracleDatabase10g数据库的体系结构。关系数据库是当前信息管理系统中最常用的数据库。20世纪80年代以来,计算机厂商新推出的各种数据库管理系统的产品几乎都是关系数据库。其中,OracleDatabase10g是关系数据库,也是目前大型网络数据库中的主流数据库。1.1关系数据库1.1.1关系模型关系模型由三部分组成:数据结构、关系操作、关系的完整性。在介绍三个组成部分之前,先来了解关系模型的基本术语。1.关系模型的基本术语(1)关系模型:用二维表格结构来表示实体及实体间联系的模型称为“关系模型”(RelationalModel)。(2)属性和值域:在二维表中的列(字段、数据项)称为属性(Attribute),列值称为属性值,属性值的取值范围称为值域(Domain)。(3)关系模式:在二维表格中,行定义(记录的型)称为关系模式(Relationschema)。(4)元组与关系:在二维表中的行(记录的值),称为元组(Tuple),元组的集合称为关系,关系模式通常也称为关系。(5)关键字或码:在关系的属性中,能够用来惟一标识元组的属性(或属性组合)称为关键字或码(Key)。关系中的元组由关键字的值来惟一确定,并且关键字不能为空。例如,学生表中的学号就是关键字。(6)候选关键字或候选码:如果一个关系中,存在着多个属性(或属性的组合)都能用来惟一标识该关系的元组,这些属性或属性的组合都称为该关系的候选关键字或候选码(CandidateKey)。(7)主关键字或主码:在一个关系中的若干候选码中指定为关键字的属性(或属性组合)称为该关系的主关键码(PRIMARYKEY)或主码。(8)非主属性或非码属性:关系中不组成码的属性均为非主属性或非码属性(NonPrimaryAttribute)。第2页共22页(9)外部关键字或外键:当关系中的某个属性或属性组合虽不是该关系的关键字或只是关键字的一部分,但却是另一个关系的关键字时,称该属性或属性组合为这个关系的外部关键字或外键(ForeignKey)。(10)从表与主表:是指以外键相关联的两个表,以外键为主键的表称为主表(主键表),外键所在的表称为从表(外键表)。例如,学生(学号,姓名,出生日期,入学时间,系)与选课(学号,课程号,成绩)两个表,对于“选课表”,学号是外键,对于“学生表”,学号是主键。“学生表”为主表,“选课表”为从表。2.关系模型的数据结构关系模型的数据结构是一种二维表格结构,在关系模型中现实世界的实体与实体之间的联系均用二维表格来表示。如表1.1所示。表1.1关系模型数据结构学生表学号姓名性别出生日期系部名称入学时间060101001001张三男1987.12.30计算机2006-9-18060202002001郭韩男1987.09.07经济管理2006-9-18060401001001刘云女1986.11.12传播技术2005-9-143.关系操作关系模型中给出了关系操作的能力与特点。关系操作的特点是集合操作,即操作的对象和结果都是集合,这种操作称为一次一个集合的方式。关系操作的能力有选择操作(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Difference)等查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作。(1)数据查询。数据查询是将数据从关系数据库中取出并放入指定内存,放入指定内存的数据可以来自于一个关系,也可以来自于多个关系。(2)数据插入。数据插入是数据添加到指定关系中,形成关系中的元组。(3)数据删除。数据删除的基本单位是一个关系中的元组,是将指定关系中的指定元组删除。(4)数据修改。数据修改是在一个关系中修改指定的元组的指定属性。数据修改包含删除需要修改的元组和插入修改后的元组两部分操作。关系操作的能力可以用关系代数来表示。关系代数是一种抽象的查询语言,这些抽象的语言与具体的DBMS中实现语言并不完全一致。在实际的关系数据库中,采用一种介于关系代数和关系演算之间的语言SQL,它是关系数据库的标准语言。4.关系模型的数据完整性数据完整性是指关系模型中数据的正确性与一致性。关系模型允许定义的完整性约束有:实体完整性、域完整性、参照完整性和用户自定义的完整性约束。关系型数据库系统提供了对实体完整性、域完整性和参照完整性约束的自动支持,也就是在插入、修改、删除操作时,数据库系统自动保证数据的正确性与一致性。关系名属性(列)属性(列)和属性名关系模式关系元组主键(码)第3页共22页(1)实体完整性规则(EntityIntegrityRule)这条规则要求关系中的元组在组成主键的属性上不能为空。例如,学生表中的学号属性不能为空。(2)域完整性规则(DomainIntegrityRule)这条规则要求表中列的数据必须具有正确的数据类型、格式以及有效的数据范围。例如,选课表中的成绩列的数值不能小于0,也不能大于100。(3)参照完整性规则(ReferenceIntegrityRule)这条规则要求不能引用不存在的元组。例如,在学生选课表中的学号列不能引用学生表中没有的学号。(4)用户定义的完整性规则(User-DefinedIntegrityRule)用户自定义的完整性规则是应用领域需要遵守的约束条件,体现了具体应用领域的语义约束。1.1.2关系数据库规范化理论前面讨论了数据库系统的一些基本概念、关系模型的三个部分以及关系数据库的标准语言。那么,针对一个具体数据库应用问题,应该构造几个关系模式,每个关系由那些属性组成,即如何构造适合于它的数据模式,这是关系数据库逻辑设计的问题。为了使数据库设计的方法走向规范,1971年E.F.Codd提出了规范化理论,目前规范化理论的研究已经取得了很多的成果。关系数据理论就是指导产生一个具有确定的、好的数据库模式的理论体系。1.问题的提出首先,我们来看不规范设计的关系模式所存在的问题。例如,给出一组如下关系实例:学生关系:学生(学号,姓名,性别,出生日期,入学时间,籍贯,班级代码)课程关系:课程(课程号,课程名称,备注)选课关系:选课(学号,课程号,专业学校,专业代码,学年学期,课程性质,备注)可能有以下两种数据模式:①只有一个关系模式:学生—选课—课程(学号,姓名,性别,出生日期,入学时间,籍贯,班级代码,课程号,课程名称,专业学校,专业代码,学年学期,课程性质,备注)②用三个关系模式:学生,课程,选课。比较这两种设计方案。第一种设计可能有下述问题。●数据冗余:如果学生选多门课程时,则每选一门课程就必须存储一次学生信息的细节,当一门课程被多个同学选学时,也必须多次存储课程的细节,这样就有很多的数据冗余。●修改异常:由于数据冗余,当修改某些数据项(例如“姓名”)时,可能有一部分有关元组被修改,而另一部分元组却没有被修改。●插入异常:当需要增加一门新课程,而这门课程还没有被学生选学时,则该课程不能进入数据库中。因为在学生—选课—课程关系模式中,(学号,课程号)是主键,第4页共22页此时学号为空,数据库系统会根据实体完整性约束规则拒绝该元组的插入。●删除异常:如果某个学生的选课记录都被删除了,那么,此学生的细节信息也一起被删除了,这样我们就无法找到这个学生的信息了。第二种设计方案不存在上述问题。数据冗余消除了,插入、删除、修改异常消除了。即使学生没选任何课程,学生的细节信息也仍然保存在学生关系中;即使课程没有被任何学生选学,课程的细节信息也仍然保存在课程关系中。解决了冗余及操作异常问题,又出现另外一些问题,如果我们要查找选修语文课程的学生姓名,则需要进行三个关系的连接操作,这样代价很高。相比之下,学生—选课—课程关系直接投影、选择就可以完成,代价较低。如何找到一个好的数据库模式?如何判断是否消除了上述四种问题?这就是关系数据理论研究的问题。关系数据理论主要包括三个方面的内容:数据依赖,范式,模式设计方法,其中数据依赖起核心作用。2.数据依赖现实世界随着时间在不断地变化,因而从现实世界经过抽象而得到的关系模式的关系也会有所变化。但是,现实世界的许多已有事实限定了关系模式所有可能的关系必须满足一定的完整性约束条件。这些约束条件通过对属性取值范围的限定反映出来,我们称之为依赖于值域元素语义的限制,例如,学生出生日期为1986而入学时间也为1986,这显然是不合理的;这些约束条件通过对属性值之间的相互关联(主要体现在值的相等与否)反映出来,这类限制统称为数据依赖,而其中最重要的是函数依赖和多值依赖,它是数据模式设计的关键。关系模式应当刻画出这些完整性约束条件。(1)函数依赖。函数依赖普遍存在于现实生活中,比如描述一个学生的关系,学生(学号,姓名,系名),由于一个学号只对应一个学生,一个学生只在一个系学习,因而,当学号值确定之后,姓名和该学生所在的系名的值也就惟一的确定了,这样我们就称“学号”函数决定“姓名”和“系名”,或者说“姓名”和“系名”函数依赖于“学号”,记为:学号→姓名,学号→系名。函数依赖的定义:设R(U)是属性集U上的关系模式,X与Y是U的子集,若对于R(U)的任意一个当前值r,如果对r中的任意两个元组t和s,都有t[X]≡s[X],就必有t[Y]≡s[Y](即若它们在X上的属性值相等,在Y上的属性值也一定相等),则称“X函数决定Y”或“Y函数依赖与X”,记作:X→Y,并称X为决定因素。函数依赖和其它数据依赖一样,是语义范畴的概念,我们只能根据语义来确定一个函数依赖,而不能试图用数学来证明。(2)函数依赖的分类。关系数据库中函数依赖主要有如下几种:①平凡函数依赖和非平凡函数依赖设有关系模式R(U),X→Y是R的一个函数依赖。若对任何X、Y∈U,此函数依赖对R的任何一个当前值都成立,则称X→Y是一个平凡函数依赖。若X→Y,但Y∈X,则称X→Y是非平凡函数依赖,若不特别声明,都是讨论非平凡函数依赖。②完全函数依赖和部分函数依赖第5页共22页设有关系模式R(U),X→Y是R的一个函数依赖,且对于任何X′∈X,X′→Y都不成立,则称X→Y是一个完全函数依赖。反之,如果X′→Y成立,则称X→Y是一个部分函数依赖。③传递函数依赖设有关系模式R(U),X,Y,Z∈U,如果X→Y,Y→Z,且Y∈X,Y不函数决定X,有X→Z,则Z传递函数依赖于X。(3)多值依赖多值依赖普遍存在于现实生活中,比如学校中的某一门课程由多个教师讲授,他们使用同一套参考书,每个教师可以讲授多门课程,每种参考书可以供多门课程使用。关系模式“授课”如表1.2所示。表1.2授课表课程教师参考书物理杨靖康普通物理物理杨靖康物理习题集物理王丽普通物理物理王丽物理习题集数学杨靖康数学分析数学杨靖康微分方程数学王丽数学分析数学王丽微分方程在关系模型“授课”中,当物理课程增加一名讲课教师{马红}时,必须插入多个元组:{物理,马红,普通物理};{物理,马红,物理习题集}。同样,某一门课程是{数学}要去掉一本参考书{微分方程}时,则必须删除多个元组:{数学,杨靖康,微分方程};{数学,王丽,微分方程}。我们发现此表对数据的修改很不方便,数据的冗余也很明显。仔细考察这个关系模式,发现他们存在着多值依赖,也就是对于一个{物理,普通物理}有一组(教师)值{杨靖康,王丽},这组值仅仅决定于(课程)上的值,而与(参考书)的值没有关系。下面是称为多值依赖的数据依赖的定义:设R(U)是属性集U上的一个关系模式。X,Y,Z是U的一个子集,并且Z=U-X-Y。当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z的值无关,则关系模式R(U)中多值依赖X→→Y成立。3.关系模式的规范化在介绍了关系数据理论的一些基本概念之后,下面讨论如何根据