全国计算机登记考试三级数据库技术Word格式文档下载.docx

上传人:b****6 文档编号:21801135 上传时间:2023-02-01 格式:DOCX 页数:28 大小:57.92KB
下载 相关 举报
全国计算机登记考试三级数据库技术Word格式文档下载.docx_第1页
第1页 / 共28页
全国计算机登记考试三级数据库技术Word格式文档下载.docx_第2页
第2页 / 共28页
全国计算机登记考试三级数据库技术Word格式文档下载.docx_第3页
第3页 / 共28页
全国计算机登记考试三级数据库技术Word格式文档下载.docx_第4页
第4页 / 共28页
全国计算机登记考试三级数据库技术Word格式文档下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

全国计算机登记考试三级数据库技术Word格式文档下载.docx

《全国计算机登记考试三级数据库技术Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《全国计算机登记考试三级数据库技术Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。

全国计算机登记考试三级数据库技术Word格式文档下载.docx

用户如果想修改视图定义或索引定义,只能先将它们删除掉,然后再重建。

(一)基本表

1.创建基本表

SQL语言使用CREATETABLE语句创建基本表,其一般格式如下:

CREATETABLE〈表名〉(〈列名〉〈数据类型〉[列级完整性约束][,〈列名〉〈数据类型〉[列级完整性约束]…][,〈表级完整性约束〉][其他参数]);

2.修改基本表

随着应用环境和应用需求的变化,有时需要修改已建立好的基本表,包括增加新列、增加新的完整性约束条件、修改原有的定义或删除已有的完整性约束条件等。

SQL语言用ALTERTABLE语句修改基本表,其一般格式为:

ALTERTABLE〈表名〉[ADD〈新列名〉〈数据类型〉[完整性约束]][DROP〈完整性约束名〉][MODIFY〈列名〉〈数据类型〉];

其中,〈表名〉为指定需要修改的基本表名,ADD子句用于增加新列和新的完整性约束,DROP子句用于删除指定的完整性约束,MODIFY子句用于修改原有的列定义。

3.删除基本表

当某个基本表不再需要时,可以使用SQL语句DROPTABLE进行删除,其一般格式为:

DROPTABLE〈表名〉;

(二)索引

1.创建索引

在SQL语言中,创建索引使用CREATEINDEX语句,其一般格式为:

CREATE[UNIQUE][CLUSTER]INDEX〈索引名〉ON〈表名〉(〈列名〉[顺序][,〈列名〉[顺序]]…);

2.删除索引

索引一经建立,就由系统使用和维护它,不需用户干预。

创建索引是为了减少查询操作的时间,但如果数据增、删频繁,系统会花费许多时间来维护索引。

这时,可以删除一些不必要的索引。

在SQL语言中,删除索引使用DROPINDEX语句,其一般格式为:

DROPINDEX〈索引名〉;

三、SQL的数据操纵

(一)SQL的查询语句

数据库查询是数据库操作的核心。

SQL语言提供了SELECT语句进行数据库的查询,该语句的一般格式是:

SELECT[ALL|DISTINCT]<

目标列表达式>

[,<

]…FROM〈基本表(或视图)〉[,〈基本表(或视图)〉]…[WHERE<

条件表达式>

][GROUPBY<

列名1>

[HAVING<

内部函数表达式>

]][ORDERBY<

列名2>

[ASC|DESC]];

1.简单查询

简单查询仅涉及数据库中的一个表。

(1)查询表中的若干列。

(2)查询经过计算的值。

(3)消除取值重复的行。

(4)条件查询。

通过WHERE子句实现条件查询,WHERE子句常用的查询条件如下表所示。

WHERE子句常用的查询条件

查询条件 

 

 

谓词

比较=,>

,<

,≥,≤,!

=,<

>

,!

<

;

NOT+上述比较运算符

确定范围BETWEENAND,NOTBETWEENAND

确定集合IN,NOTIN

字符匹配LIKE,NOTLIKE

空值ISNULL,ISNOTNULL

多重条件AND,OR

WHERE子句中还可使用BETWEEN进行查询。

(5)利用LIKE的查询。

(6)涉及空值NULL的查询。

(7)对查询结果排序。

(8)使用集函数。

SQL提供的集函数主要有:

COUNT([DISTINCT|ALL]*)统计元组个数

COUNT([DISTINCT|ALL]<

列名>

)统计一列中值的个数

SUM([DISTINCT|ALL]<

)计算一列值的总和(此列必须是数值型)

AVG([DISTINCT|ALL]<

)计算一列值的平均值(此列必须是数值型)

MAX([DISTINCT|ALL]<

)求一列值中的最大值

MIN([DISTINCT|ALL]<

)求一列值中的最小值

如果指定DISTINCT短语,表示计算时取消指定列中的重复值。

(9)对查询结果分组。

GROUPBY子句将查询结果表按某一列或多列值分组,值相等的为一组。

2.连接查询

若查询同时涉及两个以上的表,则称之为连接查询。

连接查询是关系数据库最主要的查询,包括等值连接、自然连接、非等值连接、自身连接、外连接和复合连接查询。

(1)等值与非等值连接查询。

连接查询中连接条件的一般格式为:

[<

表名1>

.]〈列名1〉〈比较运算符〉[〈表名2〉.]〈列名2〉其中,比较运算符有:

、=、>

、<

、>

=、<

=、!

=。

连接谓词还可以采用下面形式:

.]〈列名1〉BETWEEN[〈表名2〉.]〈列名2〉AND[〈表名2〉.]〈列名3〉当连接运算符为“=”时,称为等值连接。

使用其他运算符称为非等值连接。

连接谓词中的列名称为连接字符。

连接条件中的各连接字段类型必须是可比的。

(2)自身连接。

一个表与其本身进行连接。

(3)外连接。

外连接的表示方法:

在连接谓词的某一边加上符号*(有的数据库系统中用+),它可以和另一边的表中所有不满足连接条件的元组进行连接。

如果外连接符在连接条件的右边,称为右外连接,如果外连接符出现在连接条件的左边,则称为左外连接。

(4)复合条件连接。

复合条件连接指WHERE子句有多个连接条件。

3.嵌套查询

嵌套查询亦称子查询。

嵌套查询是指一个SELECT-FROM-WHERE查询块可以嵌入在另一个查询块之中。

SQL中允许多层嵌套。

每个子查询在上一级查询处理之前求解,即嵌套查询是由里向外处理的,这样外层查询可以利用内层查询的结果。

查询涉及多个关系时用嵌套查询逐次求解层次分明,容易理解与容易书写,具有结构化程序设计的优点。

(1)由谓词IN引导的子查询。

在嵌套查询中,最常用的是谓词IN。

(2)谓词是比较运算符的子查询。

若能确切知道内层查询返回的是单值,则可以用比较运算符。

(3)由[NOT]EXISITS谓词引导的子查询。

EXISTS代表存在量词,若内层查询结果非空,则外层查询的WHERE后面的条件为真,否则为假。

一般地,要使EXISTS为真,当且仅当其后的SELECT语句查询结果非空。

由[NOT]EXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。

(4)集合查询。

多个SELECT语句的结果可进行集合操作。

集合操作中用得最多的是并操作UNION。

(二)SQL的修改语句

SQL的修改语句包括更新、删除和插入三类语句。

1.更新(UPDATE)

更新操作语句的一般格式为:

UPDATE<

表名>

SET<

=<

表达式>

]…[WHERE谓词];

更新指定表中满足谓词的元组,把这些元组按SET子句中的表达式修改相应字段上的值。

2.删除(DELETE)

删除语句的一般格式为

ELETEFROM表名[

WHERE谓词];

从指定表中删除满足谓词的那些记录,没有WHERE子句时表示删去此表中的全部记录,但此表的定义仍在数据字典中。

DELETE语句删除的是表中的数据,而不是关于表的定义。

3.插入(INSERT)

插入语句的一般格式有两种:

(1)插入一个元组

INSERTINTO表名[(字段名[,字段名]…)]VALUES(常量[,常量]…);

(2)插入子查询结果

INSERTINTO表名[字段名[,字段名]…)]子查询;

第一种格式把一个新记录插入指定的表中;

第二种格式把子查询的结果插入指定的表中。

若表中有些字段在插入语句中没有出现,则这些字段上的值取空值NULL。

当然在表定义中说明了NOTNULL的字段在插入时不能取NULL。

若插入语句中没有指出字段名,则新记录必须在每个字段上均有值。

四、视图

视图是关系数据库提供给用户以多种角度观察数据库中数据的重要机制。

视图是从一个或几个基本表(或其他视图)导出的表,它与基本表不同,是一个虚表。

数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。

因此若基本表中的数据发生变化,从视图中查询得出的数据也就随之改变了。

视图一经定义,就可以和基本表一样被查询和删除,也可以在一个视图之上再定义新的视图,但对视图的修改(插入、删除、更新)操作则有一定的限制。

(一)定义视图

其一般格式为:

CREATEVIEW<

视图名>

[(<

]…])]A1.创建视图

SQL语言用CREATEVIEW命令创建视图,S<

子查询>

[WITHCHECKOPTION];

其中:

子查询通常是不含有ORDERBY子句和DISTNCT短语的任意的SELECT语句。

可选择项WITHCHECKOPTION表示当对视图进行UPDATE、INSERT和DELETE操作时,保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

如果CREATEVIEW语句仅指定了视图名,省略了组成视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。

但在下列3种情况下必须明确指定组成视图的所有列名:

(1)其中某个目标列不是单纯的属性名,而是集合函数或列表达式。

(2)多表连接时选出了几个同名列作为视图的字段。

(3)需要在视图中为某个列启用新的更合适的名字(重新命名列名)。

需要说明的是,组成视图的属性列名必须依照上面的原则,或者全部省略或者全部指定。

2.删除视图

视图创建好后,若导出此视图的基本表被删除了,该视图将失效,但一般不会被自动删除。

删除视图通常需要显式地使用DROPVIEW语句进行。

该语句的格式为ROPVIEW<

一个视图被删除后,由该视图导出的其他视图也将失效,用户应该使用DROPVIEW语句将它们一一删除。

(二)查询视图

通过视图进行查询,首先要进行有效性检查,检查查询涉及的表、视图等是否在数据库中存在,如果存在,则从数据字典中取出查询涉及的视图的定义,把定义中的子查询和用户对视图的查询结合起来,转换成对基本表的查询,然后再执行这个经过修正的查询。

视图的消解(viewresolution):

把对视图的查询转换为对基本表的查询的过程称为视图的消解。

(三)修改视图

修改视图包括插入(INSERT)、删除(DELETE)和更新(UPDATE)三类操作。

由于视图是虚表,因此对视图的更新,最终要转换为对基本表的更新。

为防止用户通过视图对数据进行插入、删除和更新时,无意或故意操作不属于视图范围内的基本表数据,可在定义视图时加上WITHCHECKOPTION子句,这样在视图上进行修改数据时DBMS会进一步检查视图定义中的条件,若不满足条件,则拒绝执行该操作。

(四)视图的作用

合适地定义和合理地使用视图的优点有:

(1)视图能够简化用户的操作视图机制使用户可以将注意力集中在他所关心的数据上。

如果这些数据不是直接来自基本表,则可以通过定义视图,使用户眼中的数据库结构简单、清晰,并且可以简化用户的数据查询操作。

例如,对于那些经常要通过计算或要从若干张表连接来获得数据的查询,可将这类查询定义为一个视图,然后就可容易地对该视图进行操作。

(2)视图使用户能以多种角度观察同一数据视图机制能使不同的用户以不同的方式观察同一数据,当许多不同种类的用户使用同一个数据库时,这种灵活性是非常重要的。

(3)视图对重构数据库提供了一定程度的逻辑独立性数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有关系增加新的字段等,用户和用户程序不会受影响。

在关系数据库中,数据库的重构造往往是不可避免的。

(4)视图能够对机密数据提供安全保护有了视图机制,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,使机密数据不出现在不应看到这些数据的用户视图上,这样就由视图的机制自动提供了对机密数据的安全保护功能。

例如,student表涉及3个系的学生数据,可以在其上定3个视图,每个视图只包含1个系的学生数据,并只允许每个系的学生查询自己所在系的学生视图。

五、SQL的数据控制语句

(一)授予权限

SQL语言用GRANT语句向用户授予数据访问的权限,GRANT语句的一般格式为:

GRANT<

权限>

]…

[ON<

对象类型>

对象名>

TO<

用户>

]…[WITHGRANTOPTION];

其语义为:

将对指定操作对象的指定操作权限授予指定的用户。

对不同类型的操作对象有不同的操作权限,常见的操作权限如下表所示。

不同对象类型允许的操作权限

对象对象类型 

操作权限

属性列 

TABLESELECT,INSERT,UPDATE,DELETE,ALLPRIVILEGES

视图TABLESELECT,INSERT,UPDATE,DELETE,ALLPRIVILEGES

基本表TABLE 

SELECT,INSERT,UPDATE,DELETE,ALTER,INDEX,ALLPRIVILEGES

数据库DATABASE 

CREATETABLE

(二)收回权限

授予的权限可以由DBA或其他授权者用REVOKE语句收回,REVOKE语句的一般格式为:

REVOKE<

FROM<

]…;

六、嵌入式SQL

SQL语言可以作为独立语言在终端交互式下使用,在这种方式下使用的SQL语言是面向集合的描述性语言,是非过程性的,即大多数语句都是独立执行,与上下文无关的。

SQL语言还可以嵌入到某种高级语言中使用,利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。

这种方式下使用的SQL语言称为嵌入式SQL(EmbeddedSQL),能嵌入SQL的高级语言称为主语言或宿主语言。

把SQL嵌入主语言使用时必须解决3个问题:

(1)区分SQL语句与主语言语句

(2)数据库工作单元和程序工作单元之间的通信

(3)一个SQL语句原则上可产生或处理一组记录,而主语言一次只能处理一个记录,为此必须协调两种处理方式。

这是用游标(cursor)来解决的。

第七章

一、什么是“不好”的关系模式

关系模式有如下“毛病”:

(1)数据冗余。

(2)更新异常(不一致性的危险)。

(3)插入异常。

如果某供应者没有供应任何货物,则我们无法记录他的名称和地址。

(4)删除异常。

如果一个供应者供应的所有货物都被删除,则我们无可奈何地丢失了该供应者的名称和地址。

二、函数依赖

(一)函数依赖的定义

设R(A1,A2,…,An)是一个关系模式,X和Y是{A1,A2,…,An}的子集,若只要关系r是关系模式R的可能取值,则r中不可能有两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数决定Y”,或“Y函数依赖于X,记作X→Y。

注意,函数依赖X→Y的定义要求关系模式R的任何可能的r都能满足上述条件。

(二)函数依赖的逻辑蕴含

设R〈U,F〉是一个关系模式,X,Y是U中属性组,若在R〈U,F〉的任何一个满足F函数依赖的关系r上,都有函数依赖X→Y成立,则称F逻辑蕴含X→Y。

(三)码

设K为关系模式R<

U,F>

中的属性或属性组,若K→U在F+中,而找不到K的任何一个真子集K′,能使K′→U在F+中,则称K为关系模式R的候选码。

当候选码多于一个时,选定其中一个做主码。

包含在任何一个候选码中的属性叫做主属性。

不包含在任何候选码中的属性叫做非主属性。

最简单的情况,单个属性是码。

最极端的情况,整个属性组是码,称做全码。

(四)函数依赖的公理系统

设F是属性组U上的一组函数依赖,于是有如下推理规则:

增广律:

若X→Y为F所逻辑蕴含,且Z〈U,则XZ→YZ为F所逻辑蕴含。

传递律:

若X→Y及Y→Z为F所逻辑蕴含,则X→Z为F所逻辑蕴含。

注意:

由自反律所得到的函数依赖均是平凡的函数依赖,事实上自反律的应用只依赖于U,不依赖于F。

根据Armstrong公理系统的3条推理规则可以得到下面3条很有用的推理规则:

(1)合并规则:

由X→Y,X→Z,有X→YZ。

(2)伪传递规则:

由X→Y,WY→Z,有XW→Z。

三、1NF、2NF、3NF、BCNF

(一)第一范式(1NF)及进一步规范化

关系模式需要满足一定的条件,不同程度的条件称做不同的范式。

最低要求的条件是元组的每个分量必须是不可分的数据项,这叫做第一范式,简称1NF,是最基本的规范化,在第一范式的基础上进一步增加一些条件,则为第二范式。

以此类推,还有第三范式,Boyce-Codd范式,等等。

函数依赖X→Y不仅给出了对关系的值的限制,而且给出了数据库中应该存储的某种联系:

从X的值应该知道与之联系的惟一Y值。

若X不含码,则有麻烦了。

码是一个元组区别于其他元组的依据,同时也是一个元组赖以存在的条件。

在一个关系中,不可能存在两个不同的元组在码属性上取值相同,也不可能存在码或码的一部分为空值的元组。

若某关系模式的属性间有函数依赖X→Y,而X又不包含码,那么在具有相同X值的所有元组中,某个特定的Y值就会重复出现,这是数据冗余,随之而来的是更新异常问题;

某个X值与某个特定的Y值相联系,这是数据库中应存储的信息,但由于X不含码,这种X与Y相联系的信息可能因为码或码的一部分为空值而不能作为一个合法的元组在数据库中存在,这是插入异常或删除异常问题。

第二范式、第三范式和Boyce-Codd范式就是不同程度地限制关系模式中X不包含码的函数依赖X→Y的存在。

(二)第二范式(2NF)

若关系模式R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。

2NF就是不允许关系模式的属性之间有这样的函数依赖X→Y,其中X是码的真子集,Y是非主属性。

即不允许有非主属性对码的部分函数依赖。

(三)第三范式(3NF)

若关系模式R∈2NF,且每一个非主属性都不传递依赖于码,则R∈3NF。

3NF就是不允许关系模式的属性之间有这样的非平凡函数依赖X→Y,其中X不包含码,Y是非主属性。

X不包含码有两种情况,一种情况X是码的真子集,这是2NF不允许的,另一种情况X不是码的真子集,这是3NF不允许的。

(四)Boyce-Codd范式(BCNF)

若关系模式R∈1NF,且对于每一个非平凡的函数依赖X→Y,都有X包含码,则R∈BCNF。

BCNF是3NF的进一步规范化,即限制条件更严格。

3NF不允许有X不包含码,Y是非主属性的非平凡函数依赖X→Y。

BCNF则不管Y是主属性还是非主属性,只要X不包含码,就不允许有X→Y这样的非平凡函数依赖。

因此,若R∈BCNF,则必然R∈3NF。

然而,BCNF又是概念上更加简单的一种范式,判断一个关系模式是否属于BCNF,只要考察每个非平凡函数依赖X→Y的决定因素X是否包含码就行了。

1NF,2NF,3NF,BCNF的相互关系是:

BCNF’3NF’2NF’1NF在函数依赖的范畴内,BCNF达到了最高的规范化程度。

四、多值依赖和4NF

多值依赖

多值依赖的定义是:

设R是属性集U上的一个关系模式,X、Y是U的子集,Z=U-X-Y。

若在R的任一关系r中,只要存在元组t,s,使得tX=sX,就必然存在元组w,v∈r(w,v可以与s,t相同),使得w[X]=ν[X]=t[X]=s[X],而w[Y]=t[Y],w[Z]=s[Z];

ν[Y]=s[Y],ν[Z]=t[Z],则称Y多值依赖于X,记做X→→Y。

若X→→Y,而Z=φ,则称X→→Y为平凡的多值依赖。

在关系模式WSC中,存在多值依赖W→→S。

多值依赖具有以下性质:

(1)若X→→Y,则X→→Z,其中,Z=U-X-Y,即多值依赖具有对称性。

(2)若X→Y,则X→→Y,即函数依赖可以看作多值依赖的特殊情况。

因为当X→Y时,对于X的每一个值x,都有Y的一个确定值y与之对应。

(3)若X→→Y在R(U)上成立,且Y′’Y,我们不能断言X→→Y′在R(U)上成立。

这也是因为多值依赖的定义中涉及了U中除X,Y之外的其余属性Z,考虑X→→Y′是否成立时涉及的其余属性Z′=U-X-Y′比确定X→→Y成立时涉及的其余属性Z=U-X-Y包含的属性列多,因此X→→Y′不一定成立。

五、关系模式的分解

(一)模式分解的等价标准

规范化过程中将一个关系模式分解为若干个关系模式,应该保证分解后产生的模式与原来的模式等价。

常用的等价标准有要求分解是具有无损连接性的和要求分解是保持函数依赖的两种。

将一个关系模式R〈U,F〉分解为若干个关系模式R1〈U1,F1>

,R2〈U2,F2〉,…,Rm〈Un,Fn>

(其中,U=U1∪U2∪…∪Un,Fi为F在Ui上的投影),这意味着相应地将存在一个二维表r中的数据分散到若干个二维表r1,r2,…,rn中去(其中ri是r在属性组Ui上的投影)。

我们当然希望这样的分解不丢失信息,也就是说,希望能通过对关系r1,r2,…,rn的自然连接运算重新得到关系r中的所有信息。

设关系模式R〈U,F〉分解为关系模式R1〈U1,F1〉,R2〈U2,F2〉,…Rn〈Un,Fn〉,若F+=(F1∪F2∪…∪Fn)+,即F所逻辑蕴含的函数依赖一定也由分解得到的各个关系模式中的函数依赖所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的。

(二)关于模式分解的几个事实

(1)分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。

具有

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1