《关系数据库系统理论基础.ppt》由会员分享,可在线阅读,更多相关《关系数据库系统理论基础.ppt(51页珍藏版)》请在三一办公上搜索。
1、2023/11/11,第2章 关系数据库系统理论基础,本章要点,关系模型关系数据结构及形式化定义关系的完整性约束关系代数关系数据库标准语言SQL关系的规范化,2023/11/11,关系模型是建立在数学概念上的,与层次模型、网状模型相比,关系模型是一种最重要的数据模型。它主要由关系数据结构、关系操作集合、关系完整性约束三部分组成。实际上,关系模型可以理解为用二维表格结构来表示实体及实体之间联系的模型,表格的列表示关系的属性,表格的行表示关系中的元组。关系数据模型的常用操作有选择(select)、投影(project)、连接(join)、除(divide)、并(union)、交(intersect
2、ion)、差(difference)等查询(query)操作,另外还有增加(insert)、删除(delete)、修改(update)操作。关系操作的特点是集合操作方式,即操作的对象和结果都是集合。,2.1关系模型概述,2023/11/11,关系数据语言是一种高度的非过程化的语言,用户不必知道具体的操作路径,存取路径的选择由DBMS的优化机制完成。主要包括关系代数语言、关系演算语言和SQL语言(关系数据库的标准语言)。关系模型允许定义三类完整性约束:实体完整性、参照完整性和用户定义的完整性。实体完整性和参照完整性是关系模型必须满足的完整性约束条件。用户定义的完整性是应用领域需要遵循的约束条件。
3、,2023/11/11,2.2关系数据结构及形式化定义,2.2.1 关系的数学定义(1)域(Domain)定义2.1 域是一组具有相同数据类型的值集合。例如:1,3,5,7,整数等都可以是域。域中数据的个数称为域的基数。域被命名后用如下方法表示:D1=王丽丽,张亭,李中,表示姓名的集合,基数是3;D2=英语系,中文系,表示系别的集合,基数是2。(2)笛卡尔积(Cartesian Product)定义2.2 给定一组域D1,D2,Di,Dn(可以有相同的域),则笛卡尔积定义为:,2023/11/11,D1D2DiDn=(d1,d2,di,dn)diDi,i=1,2,nD1D2=(王丽丽,英语系)
4、,(王丽丽,中文系),(张亭,英语系),(张亭,中文系),(李中,英语系),(李中,中文系)其中每个(d1,d2,di,dn)叫做元组,元组中的每一个值di叫做分量,di必须是Di中的一个值。显然,笛卡尔积的基数就是构成该积所有域的基数累乘积,若Di(i=1,2,n)为有限集合,其基数为mi(i=1,2,n),则D1D2DiDn笛卡尔积的基数M为:该笛卡尔积的基数是M=m1m2=32=6,即该笛卡尔积共有6个元组,它可组成一张二维表,如表2-1所示。,2023/11/11,表2-1 D1,D2的笛卡尔积(3)关系(Relation)定义2.3 笛卡尔积D1D2DiDn的子集R称作在域D1,D2
5、,Dn上的关系,记作:R(D1,D2,Di,Dn)其中:R为关系名,n为关系的度或目(Degree),Di是域组中的第i个域名。当n=1 时,称该关系为单元关系;,2023/11/11,当n=2 时,称该关系为二元关系;以此类推,关系中有n个域,称该关系为n元关系。下面是关系中涉及到的一些相关概念:(1)属性(Attribute):列的名字。(2)候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidate Key)。(3)主码:若一个关系有多个候选码,则选定其中的一个为主码(Primary Key)。(4)主属性:主码的诸属性为主属性(Prime Attri
6、bute)。(5)非码属性:不包含在任何候选码中的属性称为非码属性。(6)全码:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)。,2023/11/11,一般来说,一个关系取自笛卡尔积的子集才有意义。例如表2-2所示:表2-2 D1,D2的笛卡尔积中构造的关系(4)关系的三种类型 基本关系(基本表或基表):实际存在的表,它是实际存储数据的逻辑表示。查询表:查询结果对应的表。视图表:有基本表或其他视图导出的表,是虚表,不对应实际存储的数据。,2023/11/11,2.2.2 关系的性质 关系是一种规范化了的二维表中行的集合。为了使相应的数据操作简化,在关系模型中对关系进行了
7、限制,因此关系具有以下六条性质:(1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。(2)关系中的任意两个元组不能相同。(3)关系中不同的列来自相同的域,每一列中有不同的属性名。(4)关系中列的顺序可以任意互换,不会改变关系的意义。(5)行的次序和列的次序一样,也可以任意交换。(6)关系中每一个分量都必须是不可分的数据项,元组分量具有原子性。,2023/11/11,关系模式 定义2.4 对关系结构的描述称为关系模式。关系模式可以形式化地表示为:R(U,D,dom,F),其中:R:关系名。U:组成该关系的属性名集合。D:属性的域。dom:属性向域的映象集合。属性向域的映象常常直接说
8、明为属性的类型、长度。dom(教师)=dom(学生)=人 F:属性间数据的依赖关系集合。关系模式指出了关系由哪些属性组成。关系模式是静态的、稳定的,而关系是动态的、不断变化的,它是关系模式在某一时刻的状态和内容。关系模式是型,关系是值。,2023/11/11,一般地,从两个方面描述一个关系:首先,关系模式必须指出它由哪些属性构成,这些属性来自哪个域,以及属性与域之间的映象关系。其次,关系通常由赋予它的元组语义来确定。一组关系模式的集合构成了关系数据库模式。关系数据库模式即为关系数据库的型,关系数据库的值即为关系模式在某一时刻对应的关系的集合。,2023/11/11,2.3 关系的完整性,关系的
9、完整性有三类:实体完整性、参照完整性和用户定义的完整性。在阐述各类完整性之前,首先介绍几个术语。候选键(Candidate Key)若关系中的某一属性组的值能惟一地标识一个元组,则称该属性组为候选键。主键(Primary Key)若一个关系中有多个候选键,则选定一个为主键。主属性(Primary Attribute)主键的属性称为主属性。外键(Foreign Key)设F是基本关系R的一个或一组属性,但不是R的键(主键或候选键),如果F与基本关系S的主键K相对应,则称F是R的外键,并称R为参照关系,S为被参照关系。,2023/11/11,2.3.1 实体完整性(Entity Integrity
10、)实体完整性规则是指若属性A是基本关系R的主属性,则属性A不能取空值。实体完整性规则规定基本关系的所有主属性都不能取空值(Null),而不仅是主码整体不能取空值。空值就是不知道或无意义。例2.1 有如下关系模式:学生(学号,姓名,性别,年龄,籍贯)学号属性为主码,不能取空值。必修课(学号,课程号,成绩)学号,课程号为主码,都不能取空值。若属性(或属性组)F 是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为如下两种取值之一:(1)取空值(F的每个属性值均为空值);(2)等于S中某个元组的主码值。,2023/11/11,例2
11、.2 有如下关系模式:学生(学号,姓名,性别,院系号,年龄)院系(院系号,专业名)院系号属性是学生关系的外码,院系关系是被参照关系,学生关系为参照关系。例2.3 有如下关系模式:学生(学号,姓名,性别,院系号,年龄)课程(课程号,课程名,学分)选修(学号,课程号,成绩)学号,课程号属性是必修关系的外码。学生关系和课程关系均为被参照关系,必修关系为参照关系。例2.4有如下关系模式:学生(学号,姓名,性别,院系号,年龄,班长)班长属性与本身的主码学号属性相对应,因此班长是外码。学生关系既是参照关系又是被参照关系。,2023/11/11,2.3.2 用户定义完整性 用户定义的完整性就是用户按照实际的
12、数据库应用系统运行环境要求,针对某一具体关系数据库的约束条件。例如某个属性成绩的取值范围必须在0100之间。用户定义完整性反映某一具体应用所涉及的数据必须满足的语义要求。,2023/11/11,2.4 关系代数,关系代数的基本有两类:一类是传统的集合运算,另一类是专门的关系运算。其运算符包括四类:集合运算符(、-、)、专门的关系运算符(、)、算术比较符(、)和逻辑运算符(、)。2.4.1 传统的集合运算 传统的集合运算包括并、交、差、广义笛卡尔积四种运算。当集合运算并、交、差用于关系时,要求参与运算的两个关系必须时相容的,即两个关系的度数一致,并且关系属性的性质必须一致。,2023/11/11
13、,设R和S均为n目关系。(1)并(union)是将两个关系中的所有元组构成新的关系,并运算的结果中必须消除重复值。关系R和S的并记作:RS=t|tRtS 其结果仍为n目关系,由属于R或属于S的元组组成。(2)差(difference)运算结果是由属于一个关系并且不属于另一个关系的元组构成的新关系,就是从一个关系中减去另一个关系。关系R与S的差记作:R-S=t|tRt?S 其结果关系仍为n目关系,由属于R而不属于S的所有元组组成。,2023/11/11,(3)交(intersection)将两个关系中的公共元组构成新的关系。关系R与S的交记作:RS=t|tRtS 其结果关系仍为n目关系,由既属于
14、R又属于S的元组组成。(4)广义笛卡尔积(extended cartesian product)n目关系R与m目关系S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R与关系S的广义笛卡尔积有k1k2个元组。记作:RS=trts|trRtsS,2023/11/11,2.4.2 专门的关系运算 专门的关系运算包括:选择、投影、连接、除,为了叙述上的方便,首先引入几个记号。设关系模式R(A1,A2,An)(1)tAi表示元组t中相应于属性Ai的一个分量。(2)若A=Ai1,Ai2,Ain,其中Ai1,A
15、i2,Ain是 A1,A2,An中的一部分,则A称为属性列或域列。tA=(tAi1,tAi2,tAin)表示t在属性列A上诸分量的集合。A 则表示A1,A2,An中去掉Ai1,Ai2,Ain后剩余的属性组。(3)R为n目关系,S为m关系。trR,tsS,tr ts称为元组的连接。它是一个n+m列元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。(4)给定一个关系R(X,Z),X和Z为属性组。定义当tX=x时,x在R中的象集为:Zx=tZ|tR,tX=x,它表示R中属性组X上值为x的诸元组的集合。,2023/11/11,下面介绍关系运算的定义:(1)选择(Selection)是按
16、照给定条件从指定的关系中挑选出满足条件的元组构成新的关系。或者说,选择运算的结果是一个表的行的子集。它是在关系R中选择满足给定条件的诸元组。记作F(R)=t|t tRF(t)=真,其中F为逻辑表达式。选择运算实际上是从关系R中选取逻辑表达式F为真的元组。这是从行的角度进行的运算。(2)投影(projection)是从指定的关系中挑选出某些属性构成新的关系。或者说,选择运算的结果是一个表的列的子集。关系R上的投影是从R中选择出若干属性列组成新的关系。记作:A(R)=tA|tR,其中A为R中的属性列。投影操作是从列的角度进行的运算。投影的结果将取消由于取消了某些列而产生的重复元组。,2023/11
17、/11,(3)连接(join)连接也称为连接,是将两个和多个关系连接在一起,形成一个新的关系。连接运算是按照给定条件,把满足条件的各关系的所有元组,按照一切可能组合成新的关系。或者说,连接运算的结果是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作:R S=trts|trRtsS trA tsB 两种重要的连接:等值连接、自然连接。等值连接:为=的连接运算为等值连接。它是从关系R与关系S的广义笛卡尔积中选取A、B属性值相等的那些元组,即:R S=trts|trRtsS trA=tsB 自然连接:当连接的两关系有相同的属性名时,称这种连接为自然连接,它是一种特殊的等值连接。它要求两个关系
18、中进行比较的分量必须是相同的属性组。并且在结果中把重复的属性列去掉。即若R和S具有相同的属性组B,则自然连接可记作:R S=trts|trRtsS trA=tsB,2023/11/11,(4)除 给定关系R(X,Y)和 S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:RS=trX|trRy(S)Yx,其中Yx为x在R中的象集,x=trX。,2023/11/11,2.5关系数据库标准语言SQL,2.5.1
19、 SQL语言基本知识(1)SQL的特点 SQL语言是一种关系数据库语言,它综合统一、功能强大、简捷易学,是目前的国际标准数据库语言。SQL语言主要具有如下特点:综合统一 SQL语言提供数据的定义、查询、更新和控制等功能,集数据定义语言DDL,数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一。功能强大、能够完成各种数据库操作。,2023/11/11,高度非过程化 用户无需了解存取路径,存取路径的选择及SQL语句的操作过程由系统自动完成。面向集合的操作方式 SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。以同
20、一种语法结构提供两种使用方式,一种是自含式语言,以独立交互式使用,另一种是嵌入式语言,主要嵌入到其他高级语言中使用。不是一个应用程序开发语言,只提供对数据库的操作能力,不能完成屏幕控制、菜单管理、报表生成等功能。书写简单、易学易用。,2023/11/11,(2)SQL语言的组成数据定义语言(Data Definition Language,DDL)创建、修改或删除数据库中各种对象,包括数据库、表、视图以及索引等。数据操纵语言(Data Manipulation Language,DML)对已经存在的数据库进行记录的插入、删除、修改等操作,可以分成数据查询和数据更新两大类。数据控制语言(Data
21、 Control Language,DCL)用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视,包括对表和视图的授权,完整性规则的描述,并发控制,事务控制等。,2023/11/11,(3)SQL数据库体系结构及基本概念 SQL语言支持关系数据库三级模式结构。外模式对应于视图(VIEW)和部分基本表(Base Table),模式对应于基本表,内模式对应于存储文件。基本表是独立存在的表,SQL中一个关系对应一个基本表。一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,在数
22、据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。用户可以在视图上再定义视图。,2023/11/11,2.5.2 数据定义命令定义基本表使用SQL语言定义基本表的语句格式是:CREATE TABLE(列级完整性约束条件,列级完整性约束条件,);需要注意的是,在实际操作中,建表的同时还会定义与该表有关的完整性约束条件,如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。,2023/11/11,例2.16 建立一个学生信息表Studentinfo,它由学号Snumber、姓名Sname、性别Ssex
23、、生日Sbirthday、所在院系Sdepartment五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。2.5.2.2 修改基本表使用SQL语言修改基本表的语句格式是:ALTER TABLE ADD 完整性约束 DROP MODIFY;:指要修改的基本表。ADD子句:增加新列和新的完整性约束条件。DROP:删除指定的完整性约束体条件。MODIFY:用于修改原有列的定义。,create table Studentinfo(Snumber char(8)not null,Sname char(8)not null,sex char(2)not null,Sbirthday date
24、time,Sdepartment char(12);,2023/11/11,删除基本表 使用SQL语言删除基本表的语句格式是:DROP TABLE 2.5.2.4 建立索引 索引是对数据库表中一个或多个列的值进行排序的结构。可以利用索引快速访问数据库表中的信息。使用SQL语言建立索引的语句格式是:CREATE UNIQUE CLUSTER INDEXON(,);:将要建立索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔。次序:指定索引值的排列次序,可选ASC(升序)或DESC(降序),缺升值为ASC。UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。,202
25、3/11/11,CLUSTER:表示要建立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。在一个基本表上只能建立一个聚簇索引。2.5.2.5 删除索引 建立索引是为了提高查询速度,但随着索引的增多,数据更新时,系统会花费很多时间来维护索引,因此,可以及时删除不必要的索引。使用SQL语言删除索引的语句格式是:DROP INDEX 注意:该命令不能删除由CREATE TABLE或者ALTER TABLE命令创建的主键和唯一性约束索引,也不能删除系统表中的索引。,2023/11/11,2.5.3 数据查询语言 数据库查询是数据库的核心操作。SQL提供了功能强大的SE
26、LECT语句,通过查询到做可以得到所需要的信息。SELECT语句的格式为:SELECT ALL|DISTINCT,FROM,表名或视图名 WHERE GROUP BYHAVINGORDER BY ASC|DESC;单表查询 连接查询连接查询包括:等值连接、自然连接、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询。,2023/11/11,(1)等值与非等值连接查询 连接查询中用来连接两个表的条件称为连接条件或连接谓词。格式:.(2)自身连接 一个表与其自己进行连接,称为表的自身连接。(3)外连接 在通常的连接操作中,都是把满足条件的元组作为结果输出。有时需要把不满足条件的元组输出,采
27、用外连接的方法。在外连接中,参与连接的表有主从之分,运算时以主表中的每一行去匹配从表中的数据行。符合连接条件的数据将直接作为结果返回,对那些不符合条件的数据,将被填上NULL值后和主表中对应数据行组合作为结果数据返回。外连接分为左外连接和右外连接两种,主表在左边称为左外连接,主表在右边称为右外连接。表示的方法为,在连接谓词的某一边加上*号,如果*号出现在连接条件的左边为左外连接,否则为右外连接。,2023/11/11,(4)复合条件连接 WHERE子句中可以有多个连接条件,称为复合条件连接。嵌套查询 SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块,一个查询块嵌套在另一个
28、查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。例如:select XMingfrom XShengwhere XHao inselect XHaofrom XKewhere KChHao=2;,2023/11/11,上层的查询块称为外层查询(父查询)。下层的查询块称为内层查询(子查询)。需要注意的是子查询的select语句中不能使用order by子句,order by子句只能用于对最终查询结果的排序。嵌套查询的求解方法为由里(内层查询)向外(外层查询)进行处理。子查询的结果用于建立其父查询的查找条件。带有IN谓词的子查询。带有比较运算符的子查询 带有ANY或ALL谓词的
29、子查询 ANY:表示某个值。ALL:表示“所有值”。集合查询 可以将多个select语句的结果进行集合操作。集合查询主要包括:并UNION,交INTERSECT,差MINUS操作。其中交、差操作不能直接完成,可用其他的方法来实现。,2023/11/11,2.5.4 数据更新语言 SQL语言的更新操作包括插入数据、修改数据和删除数据三条语句。插入数据(1)插入单个元组格式:INSERT INTO(,)VALUES(,);功能:将新元组插入指定的表中。属性列与常量一一对应,没出现的属性列将取空值。注意:在表定义时说明了NOT NULL的属性列不能取空值。(2)插入子查询结果 格式:INSERT I
30、NTO(,)子查询;,2023/11/11,修改数据格式:UPDATE SET=,=WHERE;功能:修改指定表中满足WHERE子句条件的元组。SET子句用于修改新值。省略WHERE子句,表示修改所有元组。(1)修改某一个元组的值。(2)修改多个元组的值(3)带子查询的修改语句删除数据格式:DELETE FROM WHERE;功能:删除指定表中满足条件的元组,如果省略WHERE子句,表示删除全部元组。注意DELETE语句删除表中的数据,不删除表的定义。,2023/11/11,(1)删除某一个元组的值(2)删除多个元组的值(3)带子查询的删除语句2.5.5 视图 视图是关系数据库系统提供给以多种
31、角度观察数据库中数据的重要机制,它就象一个窗口,透过它可以看到数据库中用户感兴趣的数据及其变化。2.5.5.1 视图的特点(1)视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表,因此视图是逻辑表,不是物理存在的表;(2)数据库执行CREATE VIEW语句的结果只是把视图的定义存入数据字典,并不执行SELECT语句,只是在对视图查询时,才按视图的定义从基本表中将数据查出。;(3)一个基本表可以建立多个视图,一个视图也可以在多个表上建立;,2023/11/11,(4)视图拥有表的几乎所有操作,一经定义,就可以和基本表一样被查询、被删除;(5)基本表中的数据发生变化,从视图中
32、查询出的数据也随之改变;(6)视图中的数据是从现有的一个或多个表中提取出来的,可以屏蔽表中的某些信息,有利于数据库的安全性;(7)视图在数据库中是作为查询来保存的,当引用一个查询时,DBMS就执行这个查询,然后将查询结果作为视图来用;(8)有利于应用程序的独立性、数据一致性;(9)可以在视图上再定义视图,但对视图的更新操作则有一定的限制。,2023/11/11,2.5.5.2 视图的定义(1)视图的建立 建立视图的语句格式:CREATE VIEW(,)AS WITH CHECK OPTION;子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。W
33、ITH CHECK OPTION子句是为了防止用户通过视图对数据进行更新(UPDATE)、插入(INSERT)、删除(DELETE)操作时,对不属于视图范围内的基本表数据进行误操作。加上该子句后,当对视图上的数据进行更新、插入或删除时,DBMS会检查视图中定义 的条件,若不满足视图定义中的谓词条件(即子查询中的条件表达式),则拒绝执行。,2023/11/11,组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略,表示该视图由子查询中SELECT子句目标列的诸字段组成。下列三种情况下,必须明确指定组成视图的所有列名:一是某个目标列不是单存的属性名,而是集函数或列表达式;二是多表连
34、接时选出了几个同名列作为视图的字段;三是需要在视图中为某个列启用新的更合适的名字。行列子集视图:若一个视图是从单个基本表导出的,并且只是去掉了某些行和某些列,但保留了码,我们称这类视图为行列子集视图。Jsj_ Studentinfo视图就是一个行列子集视图。可以在多个基本表上建立视图。,2023/11/11,(2)视图的删除 删除视图语句格式:DROP VIEW;视图删除后视图的定义将从数据字典中删除。但是,由该视图导出的其他视图的定义仍在数据字典中,不过已失效,也需要一一删除。例2.71 删除上例建立的视图Jsj_ Studentinfo。DROP VIEW Jsj_ Studentinfo
35、;例2.72 删除视图Jsj_s1。DROP VIEW Jsj_s1;注意视图Jsj_s2已失效,应同时删除。,2023/11/11,2.5.5.3 视图的数据操作(1)查询视图 当视图被定义之后,就可以象对基本表一样对视图进行查询了。(2)视图消解 数据库管理系统执行对视图的查询时,首先对视图或基本表等进行检查是否存在,如果存在,就从数据字典中取出视图的定义,然后把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后在执行修正后的查询。这一转换过程称为视图消解(View Resolution)。(3)更新视图 更新视图指通过视图插入、删除、修改数据。由于视图是不实际存储数据的
36、虚表,因此对视图的更新,最终是通过转换为对基本表的更新进行的。,2023/11/11,2.5.5.4 视图的作用 视图定义在基本表之上,对视图的操作最终还是会转换成对底层基本表的操作,但是我们之所以会引入视图,因为合理使用视图能够带来许多好处。(1)视图能够简化用户的操作(2)视图使用户能以多种角度看待同一数据(3)视图对重构数据库提供了一定程度的逻辑独立性(4)视图能够对机密数据提供安全保护2.5.6 数据控制(1)授权,2023/11/11,SQL通过GRANT语句向用户授予操作权限,GRANT语句的格式为:GRANT,ON TO,WITH GRANT OPTION;此授权语句将某作用在指
37、定操作对象上的操作权限,授予指定的用户。(2)收回权限 SQL通过REVOKE语句向用户授予操作权限,REVOKE语句的格式为:REVOKE,ON FROM,;说明:权限由DBA或其他授权者收回,当涉及多个用户传播权限时,收回上级用户某权限的同时也收回所有下级的该权限。,2023/11/11,2.6 关系规范化理论,2.6.1 问题的提出 不合理的关系模式到底存在什么问题,下面举一个实例讨论一下:首先给出一个关系模式SCD(学号,姓名,系号,系主任,课程号,成绩),具体问题描述如下:(1)一个系有若干名学生,但一名学生只属于一个系;(2)一个系只有一名系主任(正职);(3)一名学生可以选修多门
38、课程,每门课程有若干学生选修;(4)每名学生学习一门课程有一个成绩。,2023/11/11,在对数据库操作的时候,会出现以下问题:(1)插入异常(2)删除异常(3)冗余太大 由于该关系模式存在如上毛病,因此它是一个不好的关系模式。一个好的关系模式应该不会产生插入异常和删除异常、冗余度应尽可能的小。该关系模式之所以会产生上述问题,是因为这个关系模式中的函数依赖存在某些不好的性质。如果把它改造一下,分成三个关系模式:(学号,姓名,年龄,性别,系号)学号为主键;(系号,系主任)系号为主键;(学号,课程号,成绩)(学号,课程号)为主键。就不会产生上述问题。如何改造一个不好的关系模式,使之成为一个好的,
39、合理的关系模式,就是下面要讨论的问题关系规范化。,2023/11/11,关系的规范化(1)函数依赖 定义.5 设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作:X?Y。注意函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。X?Y,但Y X则称X?Y是非平凡的函数依赖。本节若不特别说明,讨论的都是非平凡的函数依赖。X?Y,但YX则称X?Y非平凡的函数依赖。若X?Y,则X叫做决定因素(Determinant)。若
40、X?Y,Y?X,则记作X?Y。若X不函数依赖于Y,则记作X Y。定义2.6 在R(U)中,如果X?Y,并且对于X的任何一个子集X,都有X Y,则称Y对X完全函数依赖,记作:X Y,2023/11/11,若X?Y,但Y不完全依赖于X,则称Y对X部分函数依赖,记作:X Y 定义2.7 在R(U)中,如果X?Y,(Y X),Y X,Y?Z,则称Z对X传递函数依赖。条件Y X保证传递函数依赖,如果Y?X,则 X?Y,实际上是X直接决定Z,是直接函数依赖而不是传递函数依赖。(2)码 定义2.8 设K为R中的属性或属性组合,若K?U,则K为R的候选码。若候选码多于一个,则选定其中的一个为主码。包含在任何一
41、个候选码中的属性,叫做主属性。不包含在任何码中的属性称为非主属性或非码属性。整个属性组是码,称为全码。,2023/11/11,定义2.9关系模式R中属性或属性组X并R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign Key),也称外码。(3)范式(Normal Form)一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。第一范式(1NF)定义2.10 对于给定的关系R,如果R中每个属性都是不可再分的,则称关系R属于第一范式,记作:R1NF。第二范式(2NF)定义2.11 若R1NF,且每一个非主属性完全依赖于码,则为第二范式
42、,记作R2NF。第三范式(3NF)定义2.12 若R2NF,且每一个非主属性既不部分依赖于码,也不传递依赖于码,则称R为第三范式,记作R3NF。BCNF,2023/11/11,定义2.13 关系模式R1NF。若X?Y且Y X时X必含有码,即关系模式R中,若每一个决定因素都包含码,则R为BCNF,记作RBCNF。由BCNF的定义可得到结论,一个满足BCNF的关系模式必有:所有非主属性对每一个码都是完全函数依赖;所有的主属性对每一个不包含它的码,也是完全函数依赖;没有任何属性完全函数依赖于非码的任何一组属性。关系规范化需要把握的基本原则是尽可能的一个关系描述一个实体或者一个联系。若一个关系中出现了
43、描述多个实体的情况,那么根据规范化理论,将实体进行分离,即用投影的方法对关系模式进行分解。前面所讲的例题都遵循了这个原则。,2023/11/11,关系规范化的步骤可以分为如下几步:(1)对1NF关系进行投影,消除原关系中非主属性对码的部分函数依赖,将其转换为若干个2NF关系。(2)对2NF关系进行投影,消除原关系中非主属性对码的传递函数依赖,将其转换为若干个3NF关系。(3)对3NF关系进行投影,消除原关系中主属性对码的部分函数依赖和传递函数依赖,即为使决定因素都包含候选码,将其转换为若干个BCNF关系。前面介绍的都是建立在函数依赖的基础上,除此之外关系规范化理论还有建立在多值依赖基础上的4NF、5NF等范式,有兴趣的读者可以查阅相关的资料。,