数据库系统
根据考试大纲,本章要求考生掌握以下几个方面的知识点。
(1)数据库模型(概念模式、外模式、内模式)
(2)数据模型,ER图,规范化
(3)数据操作
(4)数据库语言
(5)数据库管理系统的功能和特征
(6)数据库的控制功能
(7)数据仓库和分布式数据库基础知识
从历年的考试情况来看,本章的考点主要集中在:E-R模型、关系代数、元组演算、规范化理论(键、范式、模式分解)、SQL语言等。
1. 数据库模式及ER模型
数据库是长期存储在计算机内的、有组织的、可共享的数据集合,数据库系统是指在计算机信息系统中引入数据库后的系统,一般由数据库、数据库管理系统(DataBaseManagement System,DBMS)、应用系统、数据库管理员(DataBaseAdministrator,DBA)和用户构成。数据库系统的结构可以有多种不同的层次或不同的角度,其中典型的是三级划分法,其中包括三级模式和两级映射。下面将就该主题,以及ER模型展开论述.。
1. 三级模式与两级映射
数据库系统由外模式、概念模式和内模式三级构成。其关系如图5-1所示。
从图5-1可以看出,整个数据库体系由数据库管理系统(DBMS)进行管理,其内容涉及底层的数据存储问题,顶层涉及与用户的交互,这种层次的划分,主要目标是使数据库体系内部耦合度更低,变得更为灵活。
外模式
也称为子模式或用户模式,它对应的是我们平时所用到的数据库视图。外模式用来描述用户(包括程序员和最终用户)看到或使用的那部分数据的逻辑结构,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。一个数据库可以有多个外模式,一个应用程序只能使用一个外模式。
概念模式
也称为模式或逻辑模式,它对应我们平时所用到的数据表。概念模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,用以描述现实世界中的实体及其性质与联系,定义记录、数据项、数据的完整性约束条件及记录之间的联系。概念模式通常还包含有访问控制、保密定义和完整性检查等方面的内容,以及概念/物理之间的映射。一个数据库只有一个概念模式。
内模式
对应于物理级数据库,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。内模式不同于物理层,它假设外存是一个无限的线性地址空间。内模式定义的是存储记录的类型、存储域的表示和存储记录的物理顺序,以及索引和存储路径等数据的存储组织。一个数据库只有一个内模式。
在数据库系统的三级模式中,模式是数据库的中心与关键;内模式依赖于模式,独立于外模式和存储设备;外模式面向具体的应用,独立于内模式和存储设备;应用程序依赖于外模式,独立于模式和内模式。
从图5-1可以看出,三级模式实际对应着数据库系统中的三个层次,这三个层次划分出来以后,为了达到“一个层次的变化不对其它两个层产生影响”的效果,提出了两级映射。两级映射分别是:外模式与概念模式之间的映射、概念模式与内模式之间的映射。
外模式与概念模式之间的映射:用于维护数据库的逻辑独立性。也就是说,有了这个映射,使得数据的逻辑结构改变时,应用程序不需要改变,只需要改变映射中的对应关系即可达到目的。
概念模式与内模式之间的映射:用于维护数据库的物理独立性。也就是说当数据的物理存储改变时,应用程序不需要改变。
2. ER模型
数据库系统是对现实世界中数据的一种抽象,正如在“数据库系统功能和特性”知识点中所描述的,首先我们将通过概念模型将现实世界抽象成为信息世界,然后再抽象成为基本数据模型。而最常使用的概念模型就是E-R模型,本知识点则主要围绕着这个重要概念阐述。
图5-2展示了一个简单的ER模型,我们通过该图进行ER模型的概念入门:
实体:客观存在并可相互区别的事物,可以是具体的人、事、物,也可以是抽象的概念或联系。图5-2中的“学生”与“课程”便是实体。
属性:实体所具有的某一特性称为属性,通常一个实体可以由多个属性来描述。图5-2中“学生”实体旁边的“学号”、“姓名”、“班级号”便是属性。
联系:实体内部的联系通常是指组成实体的各属性间的关系。图5-2中“选课”便是联系。
(1)ER模型实体联系类型
一对一联系(1:1):对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系。例:一个班级只有一个班主任,一个班主任也只在一个班级中任职。
一对多联系(1:n):对于实体集A中的每一个实体,实体集B中有n(n>0)个实体与之联系。
反之,实体集B中的每一个实体,实体集A中至多只有一个实体与之联系。例:一个班级中有许多学生,而每个学生只在一个班级中学习。
多对多联系(m:n):对于实体集A中的每一个实体,实体集B中有n(n>0)个实体与之联系。
反之,实体集B中的每一个实体,实体集A中有m(m>0)个实体与之联系。一门课程同时有许多学生选修,而一个学生也可以选修多门课程。如图5-2所示,该ER模型便属于m:n型。
(2)E-R模型的集成
在数据库的概念设计过程中,由于系统都存在一定的复杂度,一次性设计全局E-R图将存在较大风险,所以一般会先设计各子系统的局部E-R图,然进行集成。
但由于各子系统应用所面临的问题不同,且通常是由不同的设计人员进行局部视图设计,这就导致各个局部E-R图之间必定会存在许多不一致的问题,称之为冲突。因此,在合并E-R图时,不能简单地将各个局部E-R图画到一起,而是必须着力消除各个局部E-R图中的不一致,以形成一个能为全系统中所有用户共同理解和接受的统一的概念模型。各局部E-R图之间的冲突主要有三类,分别是属性冲突、命名冲突和结构冲突。
1)属性冲突。
属性冲突包括属性域冲突和属性取值冲突。属性冲突理论上好解决,只要换成相同的属性就可以了,但实际上需要各部门协商,解决起来并不简单。
2)命名冲突。
命名冲突包括同名异义和异名同义。处理命名冲突通常也像处理属性冲突一样,通过讨论和协商等行政手段加以解。
3)结构冲突。
结构冲突包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同。对于前者的解决办法是将属性变换为实体或实体变换为属性,使同一对象具有相同的抽象。对于后者的解决办法是使该实体的属性取各局部E-R图中属性的并集,再适当调整属性的次序。
(3)E-R模型转关系模式
E-R图向关系模式的转换属于数据库的逻辑设计阶段的工作,该阶段需要将E-R模型转换为某种DBMS能处理的关系模式,具体转换规则如下:
1)一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的主键就是关系的主键。
2)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的模式,则与该联系相连的各实体的主键和联系本身的属性均转换为关系的属性,每个实体的主键均是该关系的键属性;如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的主键和联系本身的属性。
3)一个1:n联系可以转换为一个独立的关系模式,也可以与任意n端对应的关系模式合并。如果转换为一个独立的模式,则与该联系相连的各实体的主键和联系本身的属性均转换为关系的属性,而关系的主键为n端实体的主键;如果与n端实体对应的关系模式合并,则需要在该关系模式的属性中加入1端关系模式的主键和联系本身的属性。
4)一个m:n联系转换为一个独立的关系模式,与该联系相连的各实体的主键以及联系本身的属性均转换为关系的属性,而关系的主键为各实体主键的组合。
5)三个以上实体间的一个多元联系可以转换为一个独立的关系模式,与该联系相连的各实体的主键和联系本身的属性均转换为关系的属性,而关系的主键为各实体主键的组合。
另外,还有三种情况是需要特别注意的:
1)多值属性的处理。
如果E-R图中某实体具有一个多值属性,则应该进行优化,把该属性提升为一个实体,通常称为弱实体;或者在转化为关系模式时,将实体的主键与多值属性单独构成一个关系模式。
2)派生属性的处理。
因为派生属性可由其他属性计算得到,因此,在转化成关系模式时,通常不转换派生属性。
3)在面向对象模型中,关系模式就对应类,关系模式的属性就对应类的属性。
练习
试题1
E-R模型向关系模型转换时,三个实体之间多对多的联系m:n:p应该转换为一个独立的关系模式,且该关系模式的关键字由__(1)__组成。
(1)A.多对多联系的属性 B.三个实体的关键字
C.任意一个实体的关键字 D.任意两个实体的关键字
试题2
在某企业的营销管理系统设计阶段,属性“员工”在考勤管理子系统中被称为“员工”,而在档案管理子系统中被称为“职工”,这类冲突称为__(2)__冲突。
(2)A.语义 B.结构 C.属性 D.命名
试题3
E-R图转换为关系模型时,对于实体E1与E2间的多对多联系,应该将__(3)__。
(3)A.E1的码加上联系上的属性并入E2
B.E1的码加上联系上的属性独立构成一个关系模式
C.E2的码加上联系上的属性独立构成一个关系模式
D.E1与E2码加上联系上的属性独立构成一个关系模式
答案
试题1分析
在E-R模型向关系模型转换时,如果是多对多的联系,那么这个联系需要转换为一个独立的关系模式,且该关系模式的属性由各实体的关键字和该联系自身的属性组成,而该关系模式的关键字(主键)由各实体的关键字组成。
试题1答案
(1)B
试题2分析
在本题中显然是存在命名冲突,同一个实体在同系统中存在不同的命名,这是不被允许的。
试题2答案
(2)D
试题3分析
本题主要考查E-R图转换为关系模式的规则。
在多对多联系转换为关系模式时,应该将两个实体分别转换为一个关系模式,并将其联系也转换为一个独立的关系模式,该关系模式的属性包括联系本身的属性即两实体的主键。因此本题的答案选D。
试题3答案
(3)D
2. 关系运算
推荐学习参考:参考
关系代数的基本运算主要有并、交、差、笛卡尔积、选择、投影、连接和除法运算。
(1)并。
计算两个关系在集合理论上的并集,即给出关系R和S(两者有相同元/列数),R∪S的元组包括R和S所有元组的集合,形式定义如下:
式中 t是元组变量(下同)。显然,R∪S=S∪R。
(2)差。
计算两个关系的区别的集合,即给出关系R和S(两者有相同元/列数),R-S的元组包括R中有而S中没有的元组的集合,形式定义如下:
(3)交。
计算两个关系集合理论上的交集,即给出关系R和S(两者有相同元/列数),R∩S的元组包括R和S相同元组的集合,形式定义如下:
显然,R∩S=R-(R-S)和R∩S=S-(S-R)成立。
(4)笛卡尔积。
计算两个关系的笛卡尔乘积,令R为有m元的关系,S为有n元的关系,则R×S是m+n元的元组的集合,其前m个元素来自R的一个元组,而后n个元素来自S的一个元组。形成定义如下:
若R有u个元组,S有v个元组,则R×S有u×v个元组。
(5)投影。
从一个关系中抽取指明的属性(列)。令R为一个包含属性A的关系,则
(6)选择。
从关系R中抽取出满足给定限制条件的记录,记作:
其中F表示选择条件,是一个逻辑表达式(逻辑运算符+算术表达式)。选择运算是从元组(行)的角度进行的运算。
(7)θ连接。
θ连接从两个关系的笛卡儿积中选取属性之间满足一定条件的元组,记作:
其中A和B分别为R和S上元数相等且可比的属性组。θ为“=”的连接,称为等值连接,记作:
如果两个关系中进行比较的分量必须是相同的属性组,并且在结果中将重复的属性去掉,则称为自然连接,记作:
(8)除。
设有关系R(X,Y)与关系S(Z),Y和Z具有相同的属性个数,且对应属性出自相同域。关系R(X,Y)÷S(Z)所得的商关系是关系R在属性X上投影的一个子集,该子集和S(Z)的笛卡尔积必须包含在R(X,Y)中,记为R÷S,其具体计算公式为:
例如,有关系R与关系S如表5-1和表5-2所示。
则R÷S的求解过程为:首先,按除运算定义要求,确定X,Y,Z属性集合。Y是关系R中的属性集合,Z是S中全部属性的集合,即Z={U3,U4},由于Y=Z,因此,Y={U3,U4},X={U1,U2}。也就是说,R÷S结果集包含属性U1和U2;然后,将关系R的U1、U2(共有<a,b>、<c,a>两个元组)与关系S作笛卡尔积操作,结果如表5-3所示。
通过检查表5-3,可以发现元组<a,b>与S(Z)的笛卡尔积被包含在R(X,Y)中,而元组<c,a>与S(Z)的笛卡尔积有一个元组未被包含在R(X,Y)中,所以,结果集中只有元组<a,b>。
3. 元组演算
在元组演算中,元组演算表达式简称为元组表达式,其一般形式为{t|P(t)},其中,t是元组变量,表示一个元数固定的元组;P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表达式。{t|P(t)}表示满足公式P的所有元组t的集合。
在元组表达式中,公式由原子公式组成,原子公式有下列两种形式:
(1)R(s),其中R是关系名,s是元组变量。其含义是“s是关系R的一个元组”。
(2)s[i]θu[j],其中s和u是元组变量,θ是算术比较运算符,s[i]和u[j]分别是s的第i个分量和u的第j个分量。原子公式s[i]θu[j]表示“元组s的第i个分量与元组u的第j个分量之间满足θ运算”。例如,“t[2]<u[3]”表示元组t的第2个分量小于元组u的第3个分量。这个原子公式的一种简化形式是s[i]θa或aθu[j],其中a为常量。例如,“t[4]=3”表示t的第4个分量等于3。
在一个公式中,如果元组变量未用存在量词“ ”或全称量词“ ”等符号定义,那么称为自由元组变量,否则称为约束元组变量。公式的递归定义如下。
在元组演算的公式中,有下列四个等价的转换规则:
试题1
若对关系R(A,B,C,D)进行π1.3(R)运算,则该关系运算与__(1)等价,表示(2)__。
(1)A.πA=1,C=3(R)B.πA=1∧C=3(R)
C.πA,C(R)D.πA=1∨C=3(R)
(2)A.属性A和C的值分别等于1和3的元组为结果集
B.属性A和C的值分别等于1和3的两列为结果集
C.对R关系进行A=1、C=3的投影运算
D.对R关系进行属性A和C的投影运算
试题2
若关系R、S如图5-3所示,则R与S自然连接后的属性列数和元组个数分别为__(3);π1,4(σ3=6(R×S))(4)__。
(3)A.4和3 B.4和6 C.6和3 D.6和6
(4)A.πA,D(σC=D(R×S))B.πA,R.D(σS.C=R.D(R×S))
C.πA,R.D(σR.C=S.D(R×S))D.πR.A,R.D(σS.C=S.D(R×S))
答案
试题1分析
本题主要考查关系运算。
投影运算是从一个关系里面抽取指明的属性(列)组成一个新的关系,这种运算是一种对列进行操作的运算。本题中π1.3(R)的含义就是从关系R中,选取第1列(A)和第3列(C)组成一个新的关系模式,因此第1空选C,而2空选D。
试题1答案
(1)C(2)D
试题2分析
本题考查数据库的关系运算,是常考的知识点。
自然连接是一种等值连接但并不是每一个等值连接都是自然连接,若R与S无公共属性,则R∞S=R×S。另外,R∞R等于R本身。
图5-3中,R有4个属性,S有2个属性且与R中的相同,所以进行自然连接后,会有4列,记录会有3条。所以第(3)空要选择A答案。
又因为式子π1,4(σ3=6(R×S))是将R和S先进行笛卡儿积,然后再选取和投影。所以第(4)空正确的答案是C选项。
试题2答案
(3)A(4)C
4. 规范化理论
不同的人对于相同的东西可以建立不同的模型,如何衡量模型建立的好坏?换而言之,按照什么原则建立模型?
这个原则就是规范化理论。
1. 规范化理论的作用
前面已经介绍了什么是规范化理论,那么在数据库设计中,规范化理论有什么作用,解决了什么问题呢?下面我们通过一个实例来分析这个问题。
设有一个关系模式R(SNAME,CNAME,TNAMETADDRESS),其属性分别表示学生姓名、选修的课程名、任课教师姓名和任课教师地址。仔细分析一下,就会发现这个模式存在下列存储异常的问题:
(1)数据冗余:
如果某门课程有100个学生选修,那么在R的关系中就要出现100个元组,这门课程的任课教师姓名和地址也随之重复出现100次。
(2)修改异常:
由于上述冗余问题,当需要修改这个教师的地址时,就要修改100个元组中的地址值,否则就会出现地址值不一致的现象。
(3)插入异常:
如果不知道听课学生名单,这个教师的任课情况和家庭地址就无法进入数据库;否则就要在学生姓名处插入空值。
(4)删除异常:
如果某门课程的任课教师要更改,那么原来任课教师的地址将随之丢失。因此,关系模式R虽然只有四个属性,但却是性能很差的模式。产生这些异常的原因与关系模式属性值之间的联系直接有关。在模式R中,学生与课程有直接联系,教师与课程有直接联系,而教师与学生无直接联系,这就产生了模式R的存储异常。如果将R分解成下列两个关系模式:R1(SNAME,CNAME)和R2(CNAME,TNAME,TADDRESS),则能消除上述的存储异常现象。
2. 函数依赖
函数依赖是数据库的一种约束,决定了关系模式属于哪种范式。为了理解方面,下面我们先介绍函数依赖的有关概念。
设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。
例如,记录职工信息的结构如下:
职工工号(EMP_NO)
职工姓名(EMP_NMAE)
所在部门(DEPT)。
我们说EMP_NO函数决定EMP_NMAE和DEPT,或者说EMP_NMAE,DEPT函数依赖于EMP_NO,记为:EMP_NO→EMP_NMAE,EMP_NO→DEPT。
(1)完全依赖
x->y,并且x的任何真子集都不发决定y,那么y对于x完全函数依赖
例如:(学号+课程号)->成绩,学号或者课程号都无法单独决定成绩
如果不是组合函数,那么x->y一定是完全函数依赖
(2)部分函数依赖
x->y,但x的其中一个真子集都可以决定y,那么y对x部分函数依赖
例如:(学号+身份证号)->姓名,学号或者身份证号都可以单独确定姓名
(3)传递依赖
x->y,y->z
(4)属性闭包计算【决定不了的键一定是候选键】
主属性是指候选键包含的属性那就是主属性
决定不了的键一定是候选键
(5)规范步骤
3.键【超键、候选键、主键、外键】
超键
:在关系模式中,能唯一标识元组的属性集称为超键。
候选键
:如果一个属性集能唯一标识元组,且又不含有多余属性。
主键
:关系模式中用户正在使用的候选键称为主键。
外键
:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。
例如,记录职工信息的结构如下:
职工工号(EMP_NO)
职工身份证号(EMP_CARDID)
职工姓名(EMP_NMAE)
职工性别(EMP_SEX)
所在部门编号(DEPT_NO)。
在此关系中:
(1)EMP_NO和EMP_NMAE的组合是超键。
理由:EMP_NO和EMP_NMAE的组合能唯一标识元组的属性。
补充说明:其实只需要EMP_NO就可以唯一标识元组的属性,所以EMP_NO是本关系的候选键,也可以是本关系的主键。
(2)EMP_NO和EMP_CARDID是候选键。
补充说明:一个关系的候选键可以有多个。
(3)EMP_NO或EMP_CARDID可选作本关系的主键。
补充说明:一个关系的候选键有多个,但主键只能有一个。通常在候选键中选一个作为主键。
(4)DEPT_NO为本关系相对于部门关系的外键。
理由:DEPT_NO在本关系中不是主键,而在部门关系中是主键,所以它是本关系的外键。
补充说明:外键的作用是进行连接操作。例如现在要查找某个职工所在的部门名称,我们就需要用到外键来与部门关系进行连接,连接之后可以得到职工所在部门的名称。
4.图示法求候选键【入度为0】
求关系模式的候选键是进行范式界定的基础,也是系统分析员应该掌握的基本技能。使用候选键的定义“如果一个属性集能唯一标识元组,且又不含有多余属性。”来求解一个简单关系模式的候选键尚能应对,但面对复杂一些的关系模式,这种方法就不管用了。在此,引入一种求候选键的快捷方法,即图示法。
使用图示法求候选键,主要有三个步骤:
(1)将关系的函数依赖关系,用“有向图”的方式表示。
(2)找出入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键。
(3)若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并到入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键。
例如,给定关系R(A1,A2,A3,A4)上的函数依赖集F={A1→A2,A3→A2,A2→A3,A2→A4},现在要求R的候选关键字。
第一步,需要针对函数依赖集画出有向图,如图5-4所示。
第二步,从该图中找出入度为0的结点
,本图中入度为0的结点只有1个,即A1。通过尝试,可以发现从A1出发可以遍历有向图中的所有结点,所以本关系模式的候选键为A1。
5. 范式
在数据库设计过程中,往往遇到数据冗余、修改异常、插入异常和删除异常等,为了设计一个好的数据库,人们定义了一些好的关系模式标准,称它们为规范的关系模式(简称范式,NF)。目前共定义了多个范式,分别为1NF、2NF、3NF、BCNF、4NF和5NF。但实际应用中,一般只要达到3NF。
如果有X→U在关系模式R(U)上成立,并且不存在X的任一真子集X′使X′→U成立,那么称X是R的一个候选键。也就是X值惟一决定关系中的元组。在R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都有X′→Y不成立,则称Y对X完全函数依赖。若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖(注意:此处的X是一个属性集)。
例如,如图5-5所示:X1X2→Y,又有X1→Y,则Y部分函数依赖于X1X2。
在R(U)中,如果X→Y(Y不是X的真子集),且Y→X不成立,Y→Z,则称Z对X传递函数依赖,如图5-6所示。
有了上述的函数依赖概念之后,我们再介绍范式的概念。
(1)第一范式1NF
第一范式(1NF)
:在关系模式R中,当且仅当所有域只包含原子值,即每个分量都是不可再分的数据项,则称实体E是第一范式。本书中所引用的关系模式,一般都达到了第一范式的要求。
例如,图5-7所示的教师职称情况关系表就不满足1NF。
原因在于该关系模式中的“高级职称人数”不是一个原子属性,若将其拆分为“教授”和“副教授”两个属性,则满足1NF。满足1NF的关系模型会有许多重复值,并且增加了修改其数据时引起疏漏的可能性。为了消除这种数据冗余和避免更新数据的遗漏,我们需要更加规范的第二范式
(2NF)。
(2)第二范式2NF
第二范式(2NF)
:当且仅当实体E是第一范式(1NF),且每一个非键属性完全依赖主键(没有不完全依赖)时,则称实体E是第二范式。
非键属性完全依赖又称部分函数依赖。
例如,有选课关系模式SC(Sno,Cno,Grade,Credit),其中:(Sno,Cno)→Grade,Cno→Credit。
由此可知SC的主键为:(Sno,Cno)。这样(Sno,Cno)→Credit就被称为Credit对主键(Sno,Cno)的部分函数依赖,即Credit属性只需要主键的一部分Cno即可确定。所以本关系模式不符合2NF,只是1NF。若要将该关系模式转化为2NF,可以将关系模式拆分为:SC1(Sno,Cno,Grade)和SC2(Cno,Credit)。
拆分前的SC与拆分后的SC1与SC2如图5-8所示,从该分解可以发现Credit在SC中有大量数据重复,而分解之后,解决了该问题。
(3)第三范式3NF
第三范式(3NF):当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖于码时,则称实体E是第三范式。
例如,学生关系Sudent(Sno,Sname,Dno,Dname,Location)各属性分别代表学号,姓名,所在系,系名称,系地址。其数据如表所示,从关系模式中各属性之间的联系可以判断出本关系模式的函数依赖有:Sno→Sname,Sno→Dno,Sno→Dname,Sno→Location,Dno→Dname,Dno→Location。显然,Sno为主键。在函数依赖中有:Sno→Dno→Dname与Sno→Dno→Location。这便是传递函数依赖。由于Dname与Location为非主属性,同时传递依赖于码,所以本关系模式不满足3NF。若要满足3NF,需要将关系模式拆分为:Sudent(Sno,Sname,Dno)和Department(Dno,Dname,Location)。
(4)BC范式BCNF
BCNF:如果关系模型R∈1NF,且R中每一个函数依赖关系中的决定因素都包含码,则R是满足BC范式的关系,记作R BCNF。
按此定义,消除了任何属性对码的传递依赖与部分依赖即为BCNF。但要判断任何属性是否对码存在传递依赖并不是一件容易的事情。
例如,有关系模式P(C,S,T,R),根据语义有函数依赖F={C→T,ST→R,TR→C},现在需要判断该关系模式是否满足BCNF。
此时我们需要分析其是否存在传递依赖。根据之前的图示法求候选键的方法,我们可以先画出相应的函数依赖图。
对该图进行分析,可以得知本关系模式的候选键有:(S,T)和(S,C),所以主属性为:S、T、C,非主属性为:R。但此时由于属性之间的联系错综复杂,所以要界定关系模式是否存在传递函数依赖并不容易。为了准确的界定某关系模式是否为BCNF,我们需要引入另外的一些判别方法。
由于有C→T,而C不包含候选键,所以本关系模式不满足BCNF。根据各范式的定义,各级范式这间存在如下关系:
6. 关系模式分解
如果某关系模式存在存储异常等问题,则可通过分解该关系模式来解决问题。将一个关系模式分解成几个子关系模式,需要考虑的是该分解是否保持函数依赖,是否是无损联接。
(1)无损连接分解
在理解无损连接分解前,我们需要明确一个概念:什么叫有损,什么又是无损?
答案很简单:有损——分解后不能还原;无损——分解后可以还原。
有了这个概念基础之后,理解无损连接分解就容易了。其定义如下:设R是一个关系模式,F是R上的一个函数依赖集。R分解成数据库模式δ={R1,…,RK}。如果对R中每个满足F的关系r都有下式成立:
则称分解δ相对于F是无损联接分解,否则称为损失联接分解。
要根据上述定义来判断一个分解是否是无损联接,这是一件很困难的事情,所以常常有两种方法用来解决这个问题。
方法一:公式法。
优点:速度快。
缺点:只能应用于一分为二的情况,一个关系模式要分解为三个关系模式就用不上了。
判定定理:设ρ={R1,R2}是R的一个分解,F是R上的函数依赖集,那么分解ρ相对于F是无损联
接分解的充要条件是(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1)。要注意的是,这两个条件只要有任意一个条件成立就可以了。
方法二:表格法。
优点:速度慢。
缺点:适用于所有形式的模式分解。
对于表格法,由于其方法复杂,所以在此用一个例题进行讲解。
例:
设关系模式R(U,F),其中R上的属性集U={A,B,C,D,E},R上的函数依赖集F={A→B,DE→B,CB→E,E→A,B→D}。分别判断:p1={R1(AC),R2(ED),R3(AB)}、p2={R1,(ABC),R2(ED),R3(ACE)}是否为无损连接?
首先可以利用之前讲到的图示法求出本题的候选键,求得关系R有三个候选键:BC、EC,AC。
接下来是判断模式分解过程中的无损连接的问题。这个问题相对来说比较复杂。需要列表来进行分析。
对p1={R1(AC),R2(ED),R3(AB)}构造初始的判定表如表5-4所示。
由于A→B,属性A的第1行和第3行相同,可以将第1行b12改为a2;又由于B→D,属性B的第1行和第3行相同,所以需要将属性D第1行b14和第3行b34,改为同一符号,即取行号值最小的b14。修改后的判定表如表5-5所示。
由于A→B,属性A的第1行和第3行相同,可以将第3行b32改为a2;E→A,属性E的第2行和第3行相同,可以将属性A第2行b21改为al;AC→E,属性E的第2行和第3行相同,可以将属性E第1行b15改为a5;B→D,属性B的第1行和第3行相同,所以需要将属性D第1行b14和第3行b34,改为同一符号,即取行号值最小的b14。E→D,属性E的第1~3行相同,可以将属性D第1行b14和第3行b34改为a4。修改后的判定表如表5-7所示。
由于上表第一行全为a,故分解无损。
(2)保持函数依赖分解
设数据库模式δ={R1,…,RK}是关系模式R的一个分解,F是R上的函数依赖集,δ中每个模式Ri上的函数依赖集是Fi。如果{F1,F2,…,Fk}与F是等价的(即相互逻辑蕴涵),则称分解δ保持函数依赖。如果分解不能保持函数依赖,则δ的实例上的值就可能有违反函数依赖的现象。
练习
试题1
给定关系模式R<U,F>,U={A,B,C},F={AB→C,C→B}。关系R__(1),且分别有(2)__。
(1)A.只有1个候选关键字AC B.只有1个候选关键字AB
C.有2个候选关键字AC和BC D.有2个候选关键字AC和AB
(2)A.1个非主属性和2个主属性B.2个非主属性和1个主属性
C.0个非主属性和3个主属性D.3个非主属性和O个主属性
试题2
设有学生实体Students(学号,姓名,性别,年龄,家庭住址,家庭成员,关系,联系电话),其中“家庭住址”记录了邮编、省、市、街道信息;“家庭成员,关系,联系电话”分别记录了学生亲属的姓名、与学生的关系以及联系电话。
学生实体Students中的“家庭住址”是一个__(3)属性;为使数据库模式设计更合理,对于关系模式Students(4)__。
(3)A.简单 B.多值 C.复合 D.派生
(4)A.可以不作任何处理,因为该关系模式达到了3NF
B.只允许记录一个亲属的姓名、与学生的关系以及联系电话的信息
C.需要对关系模式Students增加若干组家庭成员、关系及联系电话字段
D.应该将家庭成员、关系及联系电话加上学生号,设计成为一个独立的实体
试题3
建立一个供应商、零件数据库。其中“供应商”表S(Sno,Sname,Zip,City)分别表示:供应商代码、供应商名、供应商邮编、供应商所在城市,其函数依赖为:Sno→(Sname,Zip,City),Zip→City。“供应商”表S属于__(5)__。
(5)A.1NFB.2NFC.3NFD.BCNF
答案
试题1分析
本题主要考查函数依赖的基础知识。
关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何真子集都不能再标识,则称该属性组为候选码。
但这里大家要注意,如果一个关系有多个不同的主码时,那么这些主码组合在一起就是候选码,也就是说一个关系的主码只能选一个,而候选码可以有多个,这就好选总统一样,候选人可以多个,但最终的总统只能有一个,当然也有些地方的候选人就只有一个,候选码也一样,也有可能只有一个,在这种情况下,候选码就是主码。
主属性和非主属性是互补的,一个关系模式中的属性不是主属性就是非主属性。组成候选码的属性就是主属性,其它的就是非主属性,所以要判断关系模式中的属性是主属性还是非主属性,首先要求解出其候选码。
在本题中,从题目给出的函数依赖关系我们可以看出,AB能推导出C,即能推导出所有的属性;而C能推导出B,同样,AC也能推导出所有的属性,因此AB与AC都是该关系的候选码。所以该关系中的属性都是主属性,没有非主属性。
试题1答案
(1)D(2)C
试题2分析
在本题中,由于题目告诉我们“家庭住址”记录了邮编、省、市、街道信息,那么家庭家庭住址属性可以再分,因此它是一个复合属性。派生属性是指通过其他属性可以计算获得结果的属性。为使数据库模式设计更合理,我们可以将家庭成员、关系及联系电话加上学生号,设计成为一个独立的实体,这里大家要注意一定要加上学号,因为学号唯一标识一名学生。
试题2答案
(3)C(4)D
试题3分析
这是一道考查数据库范式的题目。表S中的每一个属性都是不可再分的,所以该关系表是符合第一范式的;并且每一个非主属性完全函数依赖于码Sno,所以它又符合第二范式;那是不是达到第三范式呢?如果是,则每一个非主属性既不部分依赖于码也不传递依赖于码,而事实上,Zip→City,表S中存在传递依赖。所以表S最高属于2NF。
试题3答案
(5)B
3. SQL语言
结构化查询语言SQL是关系数据库的标准语言,它是集DDL(数据定义)、DML(数据操纵)和数据控制功能(授权、完整性规则和事务控制语句)于一体的数据库语言。
1.数据定义语言
SQL的DDL主要是包括SQL模式、基本表及视图的定义和撤销的操作。包括以下几种,如表5-8所示。
创建基本表的语法格式如下:
CREATETABLE<表名>
(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]…
[,<表级完整性约束条件>]);
修改基本表的语法格式如下:
ALTERTABLE<表名>
[ADD<新列名><数据类型>[列级完整性约束条件]]
[DROP<表级完整性约束条件>]
[MODIFY<列名><数据类型>];
2.数据操纵语言
数据操纵语言可以分为数据查询和数据更新(插入、删除、更新)两大类操作。其中由SELECT语句实现的数据查询是核心操作,也是历年考试中最重要的考点。其语法如下:
SELECT[ALL|DISINCT]<目标列表达式>[,<目标列表达式>]…
FROM <表或视图名>[,<表或视图名>]…
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达式>]]
[ORDERBY<列名2>[ASC|DESC]];
下面,我们将针对以下几个示例关系模式进行阐述。
student(Sno,Sname,Ssex,Sage,Sdept):学生(学号,姓名,性别,年龄、所在系)
course(Cno,Cname,Cpno,Ccredit):课程(课程号,课程名,基础课号,学分)
SC(Sno,Cno,Grade):学生选修表(学号,课程号,成绩)
单表查询:即只涉及一个表的查询(如表5-9所示)。
除此之外,我们还可以对查询结果进行以下处理(如表5-10所示)。
联接查询:即同时涉及两个以上的表的查询。
它是关系数据库中最主要的查询,它包括等值联接、自然联接、非等值联接、自身联接、外联
接和复合条件联接查询等几大类,如表5-11所示。
从上表中,我们可以发现在SQL与关系代数表达式的转换中,有这样几个规律:SELECT后面的<列名>一般体现为投影运算;FROM后面列出了关系模式,WHERE子句的等值部分通常是转为“自然联接”、“笛卡尔积”等运算;而非等值比较则通常是转为“选择”运算。
集合查询:SELECT语句的查询结果是元组(记录)的集合,所以多个SELCET语句的结果可以进行集合操作。SQL语言提供的集合操作有并操作UNION、交操作INTERSECT和差操作MINUS。数据更新操作(如表5-12所示)
3.权限赋予
GRANT{ALL[PRIVILEGES]}
|权限 [(列名 [,...n])][,...n]
[ON[类名 ::]安全对象 ]TO安全主体 [,...n]
[WITHGRANTOPTION][AS安全主体]
例如:
GRANTCREATEDATABASE,CREATETABLETOMary,John
本语句的作用是给用户Mary和John赋予创建数据库与创建表的权限。
练习
试题1
若有关系R(A,B,C,D)和S(C,D,E),则与表达式π3,4,7(σ4<5(R×S))等价的SQL语句如下:
SELECT__(1)__FROM (2)WHERE(3);
(1)A.A,B,C,D,E B.C,D,E
C.R.A,R.B,R.C,R.D,S.E D.R.C,R.D,S.E
(2)A.R B.S C.R,S D.RS
(3)A.D<C B.R.D<S.C C.R.D<R.C D.S.D<R.C
试题2
将Students表的插入权限赋予用户UserA,并允许其将该权限授予他人,应使用的SQL语句为:GRANT__(4)TABLEStudentsTOUserA(5)__;
(4)A.UPDATE B.UPDATEON C.INSERT D.INSERTON
(5)A.FORALL B.PUBLIC
C.WITHCHECKOPTION D.WITHGRANTOPTION
试题3
某销售公司数据库的零件关系P(零件号,零件名称,供应商,供应商所在地,库存量),函数依赖集F={零件号→零件名称,(零件号,供应商)→库存量,供应商→供应商所在地)。零件关系模式P属于__(6)。
查询各种零件的平均库存量、最多库存量与最少库存量之间差值的SQL语句如下:SELECT零件号,零件名称,(7),
FROM P(8)__;
(6)A.1NF B.2NF C.3NF D. 4NF
(7)A.AVG(库存量)AS平均库存量,MAX(库存量)-MIN(库存量)AS差值
B.平均库存量ASAVG(库存量),差值ASMAX(库存量)-MIN(库存量)
C.AVG库存量AS平均库存量,MAX库存量-MIN库存量AS差值
D.平均库存量ASAVG库存量,差值ASMAX库存量-MIN库存量
(8)A.ORDERBY供应商 B.ORDERBY零件号
C.GROUPBY供应商 D.GROUPBY零件号
答案
试题1分析
R×S表示关系R与关系S的笛卡尔积,其结果是一个具有n(n的值由关系R与S的元组个数共同决定)行7列元素的二维表,σ4<5(R×S)是选取表中第4列(R.D)元素值小于第5列(S.C)元素值的记录,然后对这个结果进行投影操作,即选取出第3(R.C)、4(R.D)、7(S.E)列组成一个新表。
因此第1空的结果应该为R.C,R.D,S.E,而第2空是从关系表R和S中进行查找,所以应该为R,S。查找的条件为R.D元素值小于S.C元素值,即R.D<S.C。
试题1答案
(1)D(2)C(3)B
试题2分析
赋予用户权限命令的简单格式可以概括为:GRANT权限ON数据库对象TO用户 WITH GRANTOPTION。而WITHGRANTOPTION是可选项,表示用户可以将其权限通过GRANT语句授权给其它用户。因此本题的正确答案应分别是INSERTON和WITHGRANTOPTION。
试题2答案
(4)D (5)D
试题3分析
要求一个关系模式属于第几范式,一个很重要的步骤就是求出该关系模式的主键,在本题中,根据函数依赖集F,我们不难知道,零件关系P的主键为(零件号,供应商),因为从这两个属性出发可以推导出所有其它属性。在求出主键后,我们再看是否存在部分依赖,很显然零件号→零件名称是部分依赖,因此该关系模式不满足2NF,而只满足1NF。
对于第(7)空,根据题目要求,是要显示各种零件的平均库存量以及最多库存量与最少库存量之间差值,求平均库存量可以用函数AVG,而求最多库存量和最小库存量分别用函数MAX和MIN。AS是取别名的意思,因此本题答案选A。
根据题目意思,是要显示各零件的平均库存量以及最多库存量与最少库存量之间差值,那么这里就需要按零件的种类对查询的结果进行分组,因此第(8)空应该填GROUPBY零件号。
试题3答案
(6)A(7)A(8)D