关系数据库标准语言SQL

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

12.3关系的完整性关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其个实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。一、实体完整性(EntityIntegrity)规则2.1实体完整性规则若属性A是基本关系R的主属性,则属性R不能取空值。例如在关系“研究生(导师,专业,研究生姓名)”中,研究生姓名属性为主码(假设研究生不会重名),则“研究生姓名”不能取空值。实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是主码整体不能取空值。例如学生选课关系“选修(学号,课程号,成绩)”中,“学号、课程号”为主码,则“学号”和“课程号”两个属性部不能取空值。对于实体完整性规则说明如下:(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如学生关系对应于学生的集合。(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。(3)相应地,关系模型中以主码作为唯一性标识。(4)主码中的属性即主属性不能取空值。所谓空值就是“不知道”2或“无意义”的值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。二、参照完整性(ReferentialIntegrity)现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的。这样就自然存在着关系与关系间的引用。例:1、学生实体和专业实体可以用下面的关系表示,其中主码用下划线表示:学生(学号,姓名,专业号,年龄)专业(专业号,专业名)这两个关系之间存在着属性的引用,即学生关系引用了专业关系的主码“专业号”。显然,学生关系中的“专业号”值必须是确实存在的专业的专业号,即专业关系中有该专业的记录。这也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值。例2学生、课程、学生与课程之间的多对多联系可以如下:学生(学号,姓名,性别,专业,年龄)课程(课程号,课程名,学分)选修(学号,课程号,成绩)3规则2.2参照完整性规则若属性(或属性组)F是基本关系是的外码它与基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:1.或者取空值(F的每个属性值均为空值):2.或者等于月中某个元组的主码值。例如,对于例1,学生关系中每个元组的“专业号”值:(1)空值,表示尚未给该学生分配专业;(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中。即被参照关系“专业”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。对于例2,按照参照完整性规则,“学号”和“课程号”属性也可以取两类值:空值或目标关系中已经存在的值。但由于“学号”和“课程号”是选修天系中的主属性,按照实体完整性规则,它们均不能取空值。所以选修关系中的“学号”和“课程号”属性实际上只能取相应被参照关系中已经存在的主码值。三、用户定义的完整性任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件,用户定义的完整性就是针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须满足的语义要4求。例如某个属性必须取唯一值、某些属性值之间应满足一种的函数关系、某个属性的取值范围在0—100之间等。关系模型应提供定义和检验这类完整性的机制,以使用统一的系统的方法处理它们,而不要由应用程序承担这一功能。第3章关系数据库标准语言SQL结构化查询语言SQL(StructuredQueryLanguage)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言。目前已成为关系数据库的标准语言。3.1SQL概述1.SQL的特点综合统一非关系模型(层次模型、网状模型)的数据语言一般部分为模式数据定义语言(简称模式DDL)、外模式数据定义语言(简称外模式DDL或子模式DDL)、与数据存储有关的描述语言(简称DSDL)及数据操纵语言(简称DML),分别用于定义模式、外模式、内模式和进行数据的存取与处置。当用户数据库投入运行后,如果需要修改模式,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库,十分麻烦。SQL语言集DDL、DML、DCL的于一体,包括定义关系模式、录入数据、建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列功能。(2)非过程化非关系数据模型的数据操纵语言是面向过程的语言,用其完成某5项请求,必须指定存取路径。而用SQL语言进行数据操作,只要提出“做什么”,而用户无需了解存取路径,用户只需提出“做什么”,而不必指明“怎么做”。存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。(3)面向集合的操作方式SQL语言采用集合操作方式,不仅查找结果可以是元组的集合。非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。例如查询所有平均成绩在80分以上的学生姓名,用户必须一条一条地把满足条件的学生记录找出来(通常要说明具体处理过程,即按照哪条路径,如何循环等)。而SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。(4)以同一种语法结构提供两种使用方式SQL语言可采用交互式和嵌入式两种使用方式。SQL语言既是交互式语言,又是嵌入式语言。作为交互式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的使用方式的做法,提供了极大的灵活性与方便性。6(5)语言简洁SQL语言功能极强,但由于设计巧妙,语言十分简授,完成核心功能只用了9个动词,如表所示。SQL语言接近英语口语,因此容易学习,容易使用。2.SQL语言的基本概念SQL语言支持关系数据库三级模式结构。外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一个存储文件中可有多个基本表。存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理文件结构是任意的。视图是从基本表或其他视图中导出的表,它不独立存储在数据库中,数据库只存放视图的定义,因此视图是一个虚表。7用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系,而存储文件对用户是透明的。下面将逐一介绍各SQL语句的功能和格式。为了突出基本概念和基本功能,忽略了许多语法细节。各个DBMS产品在实现标准SQL语言时也各有差别,一般都做了某种扩充。因此,具体使用某个DBMs产品时,还应参阅系统提供的有关手册。3.2数据定义关系数据库系统支持—级模式结构,其模式、外模式和内模式中的基本对象有表、视图和索引。因此SQL的数据定义功能包括定义表、定义视图和定义索引,如表3.2所示。视图是基于基本表的虚表,索引是依附于基本表的,因此SQL通常不提供修改视图定义和修改索引定义的操作。用户如果想修改视图定义或索引定义,只能先将它们删除掉,然后再重建。不过有些关系数据库产品如Oracle允许直接修改视图定义。本节只介绍如何定义基本表和索引,视图的概念及其定义方法将在以后专门讨论。1.定义基本表CREATETABLE表名8(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件]...)[,表级完整性约束条件];建表时可定义完整性约束条件,当用户操作表中数据时系统自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。定义表的各个属性时需要指明其数据类型及长度。不同的数据库系统支持为数据类型不完全相同,例如IBMDB2SQL主要文持以下等数据类型:例1建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。CREATETABLEStudent9(SnoCHAR(5)NOTNULLUNIQUE,SnameCHAR(20),SsexCHAR(1),SageINT,SdeptCHAR(15));列级完整性约束条件,Sno取值唯—,不许取空值2.修改基本表ALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP完整性约束名完整性约束名][MODIFY列名数据类型数据类型];ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定的完整性约束条件,MODIFY子句用于修改原有的列定义。例2:向Student表增加“入学时间”列,数据类型为日期型。ALTERTABLEStudentADDScomeDATE;不论基本表中原来是否已有数据,新增加的列一律为空值。例3将年龄的数据类型改为半字长整数。ALTERTABLEstudentMODIFYSageSMALLINT;修改原有的列定义有可能会破坏已有数据。例4删除学生姓名的唯一值的约束。ALTERTABLEStudentDropUNIQUE(Sname);3.删除基本表10DROPTABLE表名例5删除Student表DROPTABLEStudent基本表定义一旦删除,表中的数据、在此表上建立的索引都将自动被删除掉,而建立在此表上的视图虽仍然保留,但已无法引用。4.建立索引建立索引是加快查询速度的有效手段。用户可以根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。系统在存取数据时会自动选择合适的索引作为存取路径,用户不必也不能选择索引。CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名[次序][,列名[次序]]...);索引可以建在表的一列或多列上。可在每个列名后面指定索引值的排列次序。ASC表示升序,DESC表示降序,缺省值为ASC。UNIQUE表明建唯一性索引。表明此索引的每一个索引值只对应唯一的数据记录。CLUSTER表示建聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引。CREATECLUSTERINDEXStusnameONStudent(sname);将会在student表的sname(姓名)列上建立一个聚族索引,而且student表中的记录将按照sname值的升序存放。用户可以在最常查询的列上建立聚簇索引以提高查询效率。显然11在一个基本表上最多只能建立一个聚簇索引。建立聚族索引后,更新索引列数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。例6为学生.课程数据库中的Student,Couse,Sc三个表建立索引中Student表按学号升序建唯一索引,Couse按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATEUNIQUEINDEXStusnoONstudent(Sno);CREATEUNIQUEINDEXCoucnoONCouse(Cno);CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);5.删除索引DROPINDEX索引名;例7删除Student表的Stusname索引DROPINDEXStusname;索引一经建立,就由系统使用和维护它,不需用户干预。删除索引时,系统会同时从数据字典中删去有关该索引的描述。3.3查询SELECT[ALL|DIST

1 / 50
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功