《第3章 关系数据库规划和设计.pptx》由会员分享,可在线阅读,更多相关《第3章 关系数据库规划和设计.pptx(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3章章 关系数据库规划和设计关系数据库规划和设计 3.1 3.1 关系数据库理论关系数据库理论 3.2 3.2 数据库设计数据库设计 3.3 3.3 关系数据库标准语言关系数据库标准语言SQLSQL 3.4 3.4 数据库保护数据库保护 3.5 3.5 数据库新技术数据库新技术3.1 关系数据库理论3.1.1 函数依赖3.1.2 范式3.1.3 数据依赖的公理系统3.1.4 关系模式的规范化3.1.1 函数依赖1函数依赖定义定义3.1 设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R(U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的
2、属性值不同,则称X函数确定Y或Y函数依赖于X,记作XY。3.1.1 函数依赖(1)函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。(2)函数依赖是语义范畴的概念,只能根据数据的语义来确定函数依赖。例如,“姓名所在系”这个函数依赖只有在没有同名人的条件下成立。如果存在名字相同的人,则“所在系”就不再函数依赖于“姓名”了。(3)XY,但Y X,则称XY是非平凡函数依赖。XY,但Y X,则称XY是平凡函数依赖。若不特别声明,总是讨论非平凡函数依赖。(4)若XY,则X称为这个函数依赖的决定属性集。(5)若XY,并且YX,则记为XY。(6)若Y不函数
3、依赖于X,则记为X Y。3.1.1 函数依赖2完全函数依赖与部分函数依赖定义定义3.2 在关系模式R(U)中,如果XY,并且对于X的任何一个真子集X,都有X Y,则称Y完全函数依赖于X,记作X Y。若XY,但Y不完全函数依赖于X,称Y部分函数依赖于X,记作X Y。例如,在选课关系SC(学号S#,课程号C#,成绩G)中,学生的成绩由学号和课程号共同决定,代表该学生的一次选课,所以函数依赖为:(S#,C#)G,但是单独由学号不能决定一门课的成绩,单独由课程号也不能决定某个学生的成绩,即S#G、C#G,所以(S#,C#)G。3.1.1 函数依赖3传递函数依赖定义定义3.3 在关系模式R(U)中,如果
4、XY(Y X),Y X,YZ,则称Z传递函数依赖于X,记作X Z。例如,在关系SD(学号S#,所在系SDEPT,系主任姓名MNAME)中,学号决定学生所在系,即S#SDEPT,学生所在系决定系主任姓名SDEPTMNAME,则S#NAME。3.1.1 函数依赖4码定义定义3.4 设K为关系模式RU,F中的属性或属性组合。若K U,则称K为R的一个候选码(Candidate Key)。若关系模式有多个候选码,则选定其中的一个作为主码(Primary Key)。3.1.1 函数依赖 学生关系STUDENT(学号SNO,姓名SNAME,性别SSEX,年龄SAGE,所在系SDEPT)的主码是学号SNO,
5、SNO U。选课关系SC(学号S#,课程号C#,成绩G)的主码是(S#,C#),(S#,C#)(S#,C#,G),即(S#,C#)U。包含在任何一个候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性或非码属性。SC(学号S#,课程号C#,成绩G)的主码是(S#,C#),主属性是主码的各个属性,即S#、C#,非主属性是G。3.1.2 范式范式是符合某一种级别的关系模式的集合。范式的概念最早是由E.F.Codd提出的。目前,在关系数据库规范中建立了一个范式系列:1NF、2NF、3NF、BCNF、4NF和5NF。通常把某一关系模式R为第n范式简记为RnNF。3.1.2 范式11NF定义
6、定义3.5 如果一个关系模式的所有属性都是不可分的基本数据项,则R1NF。任何一个关系模式都是1NF,不满足第一范式的数据库模式不能称为关系数据库。满足第一范式的关系模式不一定是一个好的关系模式。关系模式SLC(学号SNO,学生所在系SDEPT,学生住处SLOC,课程号CNO,成绩GRADE),满足第一范式,每个属性都不可分。3.1.2 范式SLC的码是(SNO,CNO),函数依赖有:(SNO,CNO)GRADE,SNOSDEPT,(SNO,CNO)SDEPT,SNOSLOC,(SNO,CNO)SLOC,SDEPTSLOC。3.1.2 范式SLC关系模式存在的问题如下:(1)插入异常插入异常。
7、如果有一位新生的信息要插入到SLC中,由于该生还没有选课,课程号CNO为空,所以无法插入。(2)删除异常删除异常。假定SLC中已有某个学生的选课记录,现在该学生要休学,这时需要将该生的选课记录都删除,由于课程号CNO是主属性,不能为空,所以删掉选课信息也就将整个元组都删除了,即把学生的信息也删掉了。从而删除了不应该删除的信息,造成了删除异常。(3)更新异常更新异常。假设某学生要转系,这样学生所在系SDEPT、学生住处SLOC都要发生变化,如果该生选修N门课,对应关系中N个元组,学生信息发生变化导致N个元组都要发生变化,导致修改复杂,即更新异常。(4)冗余度大冗余度大。假设某学生选了10门课,那
8、么学生的SDEPT和SLOC就要重复存储10次,导致数据冗余。3.1.2 范式22NF定义定义3.6 若关系模式R1NF,并且每一个非主属性都完全函数依赖于R的码,则R2NF。2NF不允许关系模式的属性之间有这样的函数依赖:XY,其中X是码的真子集,Y是非主属性。显然,码只包含一个属性的关系模式,如果属于1NF,那么它一定属于2NF。3.1.2 范式关系模式SLC的码是(SNO,CNO),主属性是SNO和CNO,非主属性是SDEPT、SLOC、GRADE。分析SLC的函数依赖,可以看到:(SNO,CNO)SDEPT(SNO,CNO)SLOC存在非主属性对码的部分函数依赖,不满足第二范式的要求,
9、所以SLC只能达到1NF。解决的办法是把关系模式SLC分解成为两个关系模式:SC(SNO,CNO,GRADE)和SL(SNO,SDEPT,SLOC)。分解后的两个关系模式不存在非主属性对码的部分函数依赖,都达到了2NF,即SC2NF,SL2NF。3.1.2 范式33NF定义定义3.7 如果关系模式RU,F中不存在候选码X、属性组Y以及非主属性Z(Z Y),使得XY(Y X),YZ成立,则R3NF。若R3NF,则R的每一个非主属性既不部分函数依赖于候选码,也不传递函数依赖于候选码。显然,如果R3NF,则R也是2NF。研究分解后的关系模式SL(SNO,SDEPT,SLOC),SL的码是SNO,主属
10、性是SNO,非主属性是SDEPT和SLOC,存在非主属性SLOC对主属性SNO的传递函数依赖,所以达不到3NF的要求,可以将SL分解为:SD(SNO,SDEPT)DL(SDEPT,SLOC)分解后的SD和DL不再存在传递函数依赖,所以SD3NF,DL3NF。3.1.2 范式4BCNFBCNF(Boyce Codd Normal Form,鲍依斯科得范式)是由Boyce和Codd共同提出的,比上述的3NF又进了一步,通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。定义定义3.8设关系模式RU,F1NF。若XY且Y X时X必含有码,则RU,F BCNF。也就是说,关系模式RU,F中,若
11、每一个决定因素都包含码,则RU,FBCNF。由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:(1)所有非主属性对每一个码都是完全函数依赖。(2)所有主属性对每一个不包含它的码是完全函数依赖。(3)没有任何属性完全函数依赖于非码的任何一组属性。3.1.2 范式2NF、3NF分别消除了非主属性对码的部分函数依赖和传递函数依赖,而BCNF在3NF的基础上消除了主属性对码的部分函数依赖,因此如果RBCNF,则R3NF,反之则不成立。假设有系别管理关系DEPT(系别D,教研室R,教师数C,系主任M),其中C表示教研室中的教师数。一个系里只有一个主任,可以有多个教研室。这个数据库表中存在如下函
12、数依赖:(D,R)(M,C),(M,R)(D,C)所以,(D,R)和(M,R)都是DEPT的候选关键字,表中的唯一非关键字为C,它是符合3NF的。但是,由于存在如下函数依赖:DM,MD3.1.2 范式即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:(1)插入异常插入异常。当没有提供教研室的信息时,无法插入此系及主任的信息。(2)更新异常更新异常。如果系更换了主任,则表中此系的所有行的主任列都要修改,造成修改操作的复杂化。(3)删除异常删除异常。如果要删除某系所有教研室的信息,则系别和主任的信息也将被删除,造成删除异常。解决的办法是把DEPT关系表分解为下面两个
13、关系表:系别管理DEPT(D,M)和教研室管理 REAC(D,R,C)。这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。3.1.2 范式5多值依赖(Multivalued Dependency,MVD)研究下面的关系模式Teaching(课程C,教员T,参考书B),一门课程可以由多个教员讲授,使用相同的一套参考书。一个教员可以讲授多门课程。一本参考书可以供多门课程使用。表3-1所示的示例数据表示了C、T、B之间的关系。表3-1 Teaching 表课程C 教员T参考书B物理物理物理物理数学数学数学数学李勇李勇王军王军李勇李勇张平张平普通物理学光学物理普通物理学光学物理高
14、等数学微分方程高等数学微分方程3.1.2 范式关系模式Teaching具有唯一候选码(C,T,B),即全码。因而TeachingBCNF。但是当某一课程(如物理)增加一名讲课教员,如李兰时,由于存在多本参考书,所以必须插入多个元组:(物理,李兰,普通物理学)、(物理,李兰,光学原理)、(物理,李兰,物理习题集)。同样,要去掉一门课,也需要删除多个元组。在这个例子中,存在着称为多值依赖的数据依赖。3.1.2 范式定义定义3.9 设R(U)是属性集U上的一个关系模式。X、Y、Z是U的子集,并且Z=UXY。关系模式R中多值依赖XY成立,当且仅当对于R的任一关系r,给定的一对(x,z)值,有一组y的值
15、,这组值仅仅决定于x值而与z值无关。在上述的关系模式Teaching中,T多值依赖于C,即CT。即对于一个(物理,光学物理)有一组T值(李勇,王军),这组值仅仅决定于课程C上的值,即物理。这就是多值依赖。若XY,而Z=,即Z为空,则称 XY为平凡的多值依赖;反之即为非平凡的多值依赖。3.1.2 范式多值依赖的主要性质如下:(1)多值依赖具有对称性。即若XY,则XZ,其中Z=UXY。(2)多值依赖的传递性。即若XY,YZ,则XZY。(3)函数依赖可以看作是多值依赖的特殊情况。即若XY,则XY。这是因为当XY时,对X的每一个值x,Y有一个确定的值y与之对应,所以XY。(4)若XY,XZ,则XYZ。
16、(5)若XY,XZ,则XYZ。(6)若XY,XZ,则XYZ,XZY。3.1.2 范式 64NF多值依赖对关系模式会产生怎样的影响呢?研究下面的关系模式R=仓库(W),保管员(S),商品(C),假定每个仓库有若干保管员、若干商品,每个保管员保管所在仓库的所有商品,每种商品被所在仓库的所有保管员保管。可以看出,对于此关系模式上的实例r,满足WS及WC,即某仓库Wi中有n个保管员及m种商品,则W属性值为Wi的元组在数据库表中必有mn个,这样r中的数据冗余仍是十分可观的。为了进一步减少冗余,引入划分更为细致、限制条件更加严格的范式,即4NF。3.1.2 范式 定义定义3.10 关系模式RU,F1NF,
17、如果对于R的每个非平凡多值依赖XY(YX),X都含有码,则R4NF。4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。因为根据定义,对于每一个非平凡的多值依赖XY,X都含有候选码,于是就有XY,所以4NF所允许的非平凡的多值依赖实际上是函数依赖。Teaching(C,T,B)不满足4NF的要求,因为存在非平凡的多值依赖CT,且C不是候选码。把Teaching分解为CT(C,T)、CB(C,B)两个关系模式,则它们均是4NF。由此可见,4NF是在BCNF的基础上消除了非平凡且非函数依赖的多值依赖。如果一个关系模式是4NF,则它必为BCNF。3.1.2 范式7关系模式的规范化规
18、范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即“一事一地”的模式设计原则。通过对关系模式进行规范化,可以逐步消除数据依赖中不合适的部分,使关系模式达到更高的规范化程度。关系模式的规范化过程是通过对关系模式的分解来实现的,即把低一级的关系模式分解为若干个高一级的关系模式。关系模式的规范化过程可以用图3-1所示来概括。消除主属性对码的部分和传递函数依赖消除决定因素对码的非平凡函数依赖1NF2NF3NFBCNF4NF消除非主属性对码的部分函数依赖消除非主属性对码的传递函数依赖消除非平凡且非函数依赖的多值依赖 图3-1 规范化过程3.1.3 数据依赖的公
19、理系统1Armstrong公理系统公理系统定义定义3.11对于满足一组函数依赖F的关系模式R,其任何一个关系r,若函数依赖XY都成立,则称F逻辑蕴含XY。为了求得给定关系模式的码,首先要从一组函数依赖中求得其蕴含的函数依赖。而对于已知的函数依赖集F,要判断XY是否为F所蕴含,就需要使用Armstrong公理系统。Armstrong公理系统是1974年首先由Armstrong提出来的,这组公理系统是一套推理规则,是模式分解算法的理论基础。3.1.3 数据依赖的公理系统 Armstrong公理系统对关系模式RU,F来说有以下推理规则:A1.自反律(平凡函数依赖)自反律(平凡函数依赖):若Y X U
20、,则XY为F所蕴含。A2.增广律增广律:若XY为F所蕴含,且Z U,则XZYZ为F所蕴含。A3.传递律传递律:若XY及YZ为F所蕴含,则XZ为F所蕴含。根据A1、A2、A3这3条推理规则可以得到下面3条很有用的导出规则:1.合并规则合并规则:由XY,XZ,有XYZ(由A2、A3导出)。2.伪传递规则伪传递规则:由XY,WYZ,有XWZ(由A2、A3导出)。3.分解规则分解规则:由XY及Z Y,有XZ(由A1、A3导出)。3.1.3 数据依赖的公理系统 根据合并规则和分解规则,得到下面的引理:引理3.1 XA1 A2Ak成立的充分必要条件是XAi成立(i=l,2,k)。定义3.12 设F为属性集
21、U上的一组函数依赖,X U,XF+=A|XA能由F根据Armstrong公理导出,XF+称为属性集X关于函数依赖集F的闭包。引理3.2 设F为属性集U上的一组函数依赖,X、Y U,XY能由F根据Armstrong公理导出的充分必要条件是Y XF+。于是,判定XY是否能由F根据Armstrong公理导出的问题,就转化为求出XF+,判定Y是否为XF+的子集的问题。这个问题可以使用算法3.1解决。3.1.3 数据依赖的公理系统 2求解函数依赖集的闭包算法3.1 求属性集X(X U)关于U上的函数依赖集F的闭包XF+。输入:X,F。输出:XF+。步骤:(1)令X(0)=X,i=0;(2)求B,这里B=
22、A|(V)(W)(VWFV X(i)AW);(3)X(i+1)=BX(i);(4)判断X(i+1)=X(i);(5)若相等或X(i+1)=U,则X(i+1)就是XF+,算法终止;(6)若否,则i=i+l,返回第(2)步。3.1.3 数据依赖的公理系统【例3-1】已知关系模式RU,F,其中U=A,B,C,D,E,F=ABC,BD,CE,ECB,ACB,求(AB)F+。解:设X(0)=AB(1)计算X(1):逐一扫描F集合中各个函数依赖,找左部为A、B或AB的函数依赖,得到两个:ABC,BD。于是,X(1=ABCD=ABCD。(2)因为X(0)X(1),所以再找出左部为ABCD的子集的那些函数依赖
23、,又得到ABC,BD,CE,ACB。于是,X(2)=X(1)BCDE=ABCDE。(3)因为X(2)=U,算法终止。得到结果:(AB)F+=ABCDE。根据以上的定理及算法,可以根据关系模式的函数依赖集判断关系模式的码,从而判断关系模式的规范化程度,即判断关系模式达到第几范式。3.1.3 数据依赖的公理系统【例3-2】关系模式RU,F,U=A,B,C,D,E,函数依赖集F=ABCE,EAB,CD,试问R最高属于第几范式?(1)求函数依赖集中决定因素是否为候选码,即求ABF+、EF+、CF+。得到:ABF+=U、EF+=U,求AF+和BF+,判断是否为U,AF+U,BF+U,所以AB和E是候选码
24、。(2)由候选码判断主属性为A、B、E,非主属性为C和D。(3)判断非主属性对候选码有没有部分函数依赖。候选码E只有一个属性,不可分,所以不必判断。判断候选码AB,决定因素中没有A或B,所以不存在非主属性对候选码的部分函数依赖,达到2NF。(4)判断非主属性对候选码有没有传递函数依赖。在函数依赖集中有ABCE、CD,所以ABC、CD,存在非主属性D对候选码AB的传递函数依赖,只能达到2NF。得到结论:关系模式R只能达到第二范式。3.1.3 数据依赖的公理系统3最小依赖集从蕴含的概念出发,又引出了最小依赖集的概念。每一个函数依赖集F均等价于一个极小函数依赖集Fm,此Fm称为F的最小依赖集。求得最
25、小函数依赖集是模式分解的基础。下面就给出求F的最小依赖集的算法。算法3.2 分3步对F进行“极小化处理”,找出F的一个最小依赖集。(1)逐一检查F中各函数依赖FDi:XY。若Y=A1A2Ak,k2,则用XAj|j=1,2,k来取代XY。(2)逐一检查F中各函数依赖FDi:XA,令G=FXA,若AXG+,则从F中去掉此函数依赖。(3)逐一取出F中各函数依赖FDi:XA,设X=B1B2Bm,逐一考察Bi(i=l,2,m),若A(XBi)F+,则以XBi取代X。最后剩下的F就一定是极小依赖集。3.1.3 数据依赖的公理系统【例3-3】F=ABC,BD,CE,ECB,ACB,求其极小函数依赖集。第一步
26、:先分解右端,F不变。F=ABC,BD,CE,ECB,ACB第二步:(1)去掉ABC,得到G=BD,CE,ECB,ACB,求ABG+,ABG+中不包含C,不可以去掉ABC。F不变。(2)去掉BD,得到G=ABC,CE,ECB,ACB,求BG+,BG+中不包含D,不可以去掉BD。F不变。(3)去掉CE,得到G=ABC,BD,ECB,ACB,求CG+,CG+中不包含E,不可以去掉CE。F不变。(4)去掉ECB,得到G=ABC,BD,CE,ACB,求ECG+,ECG+中不包含B,不可以去掉ECB。F不变。(5)去掉ACB,得到G=ABC,BD,CE,ECB,求ACG+,ACG+中包含B,可以去掉AC
27、B。F=G=ABC,BD,CE,ECB。3.1.3 数据依赖的公理系统第三步:(1)判断ABC:求AF+=A,不包含C,不能去掉B。求BF+=BD,不包含C,不能去掉A。(2)判断ECB:求EF+=E,不包含B,不能去掉C。求CF+=BCDE,包含B,可以去掉E。F变为F=ABC,BD,CE,CB 最终得到的就是F的最小函数依赖集。注意:F的最小函数依赖集不一定是唯一的,它与对各函数依赖FDi及XA中X各属性的处理顺序有关。3.1.4 关系模式的规范化1规范化的原则(1)分解具有无损连接性。设关系模式RU,F被分解为若干个关系模式R1(U1,F1),R2(U2,F2),Rn(Un,Fn)(其中
28、U=U1U2Un,且不存在Ui Uj,Ri为R在Ui上的投影),若R与R1,R2,Rn自然连接的结果相等,则称关系模式R的这个分解具有无损连接性。(2)分解保持函数依赖。设关系模式RU,F被分解为若干个关系模式R1(U1,F1),R2(U2,F2),Rn(Un,Fn)(其中U=U1U2Un,且不存在Ui Uj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的。如果一个分解具有无损连接性,则它能够保证不丢失信息。如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。3.1.4 关系模式的规范
29、化2规范化的方法算法算法3.3 达到3NF保持函数依赖的分解方法。设关系模式RU,F,达到3NF保持函数依赖的分解步骤如下:(1)求F的最小函数依赖集,令F=Fmin。(2)如果U中某些属性不出现在F中,将这些属性组成一个关系模式,从R中分离出去。(3)对F中每一个XiAi,都构成一个关系模式Ri=XiAi。如果F中有XA1,XAn(左部决定因素相同),则以X,A1,A2,An构成一个关系模式输出。【例3-4】关系模式R的最小函数依赖集F=BG,CEB,CA,CEG,BD,CD,将该关系模式分解为3NF且保持函数依赖。对BG,BD,得到R1:U1(BDG),F1=BG,BD对CEB,CEG,得
30、到R2:U2(BCEG),F2=CEB,CEG对CA,CD,得到R3:U3(ACD),F3=CA,CD3.1.4 关系模式的规范化算法算法3.4达到3NF保持函数依赖和无损连接性的分解。(1)按照达到3NF保持函数依赖的分解将R分解为R1,R2,Rn。(2)选取R的主码,将主码与函数依赖相关的属性组成一个关系Rn+1。(3)如果Rn+1就是R1,R2,Rn中的一个,将它们合并,否则加入分解后的关系模式。【例3-5】关系模式R的最小函数依赖集F=BG,CEB,CA,CEG,BD,CD,求达到3NF保持函数依赖和无损连接性的分解。R1:U1(BDG),F1=BG,BDR2:U2(BCEG),F2=
31、CEB,CEGR3:U3(ACD),F3=CA,CDR的码是CE,与CE相关的函数依赖是CEB,CEG。形成R4:U4(BCEG),因为R4和R2相等,所以合并R4和R2。R分解为R1,R2和R3。3.1.4 关系模式的规范化算法算法3.5达到BCNF保持无损连接性的分解。设关系模式RU,F,令=R,如果中所有关系模式都达到BCNF,则结束;否则在中选择不是BCNF的关系模式S,在S中必存在XA,X不包含S的码,也不包含A。此时用S1和S2代替S,S1(XA),S2(S中的属性集A)。【例3-6】关系模式RU,F,U=A,B,C,D,E,最小函数依赖集F=ABC,BD,DE,码是AB。将R分解
32、为BCNF且保持无损连接。(1)DE的决定因素不是R的码,将R分解为R1(DE),R2(ABCD),F1=DE,F2=ABC,BD。(2)考虑R2中,BD的决定因素不是R2的码,将R2分解为R2(BD),R3(ABC)。(3)最终R分解为R1(DE),R2(BD),R3(ABC)。3.2 数据库设计3.2.1 数据库设计的任务与内容3.2.2 数据库的设计方法3.2.3 数据库设计的步骤3.2.1 数据库设计的任务与内容数据库设计的任务是在DBMS的支持下,按照应用的要求,为某一部门或组织设计一个结构合理、使用方便、效率较高的数据库及其应用系统。数据库设计应包含两方面的内容:一是结构设计,也就
33、是设计数据库框架或数据库结构;二是行为设计,即设计应用程序、事务处理等。设计数据库应用系统,首先应进行结构设计。一方面,数据库结构设计得是否合理,直接影响到系统中各个处理过程的性能和质量。另一方面,结构特性又不能与行为特性分离。静态的结构特性的设计与动态的行为特性的设计分离,会导致数据与程序不易结合,增加数据库设计的复杂性。3.2.2 数据库的设计方法目前常用的各种数据库设计方法大部分属于规范设计法,即都是运用软件工程的思想与方法,根据数据库设计的特点,提出了各种设计准则与设计规范。这种工程化的规范设计方法也是在目前技术条件下设计数据库的最实用方法。在规范设计中,数据库设计的核心与关键是逻辑数
34、据库设计和物理数据库设计。逻辑数据库设计是根据用户要求和特定数据库管理系统的具体特点,以数据库设计理论为依据,设计数据库的全局逻辑结构和每个用户的局部逻辑结构。物理数据库设计是在逻辑结构确定之后,设计数据库的存储结构及其他实现细节。3.2.2 数据库的设计方法规范设计在具体使用中又可以分为两类:手工设计和计算机辅助数据库设计。按规范设计法的工程原则与步骤手工设计数据库,其工作量较大,设计者的经验与知识在很大程度上决定了数据库设计的质量。计算机辅助数据库设计可以减轻数据库设计的工作强度,加快数据库设计速度,提高数据库设计质量。但目前计算机辅助数据库设计还只是在数据库设计的某些过程中模拟某一规范设
35、计方法,并以人的知识或经验为主导,通过人机交互实现设计中的某些部分。3.2.3 数据库设计的步骤通过分析、比较与综合各种常用的数据库规范设计方法,可将据库设计分为6个阶段,如图3-2所示。图3-2 数据库设计的步骤需求分析概念结构设计逻辑结构设计数据库物理设计数据库实施数据库运行和维护3.2.3 数据库设计的步骤1需求分析进行数据库设计首先必须准确了解和分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,是最困难、最耗费时间的一步。需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。2概念结构设计 准确抽象出现实世界的需求后,
36、下一步应该考虑如何实现用户的这些需求。由于数据库逻辑结构依赖于具体的DBMS,直接设计数据库的逻辑结构会增加设计人员对不同数据库管理系统的数据库模式的理解负担,因此在将现实世界的需求转化为机器世界的模型之前,要先以一种独立于具体数据库管理系统的逻辑描述方法来描述数据库的逻辑结构,即设计数据库的概念结构。概念结构设计是整个数据库设计的关键。3.2.3 数据库设计的步骤3逻辑结构设计 逻辑结构设计是将抽象的概念结构转换为所选用的DBMS支持的数据模型,并对其进行优化。4数据库物理设计数据库物理设计是为逻辑数据模型选取一个最适合应用环境的物理结构,包括存储结构和存取方法。5数据库实施在数据库实施阶段
37、,设计人员运用DBMS提供的数据语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制并调试应用程序,组织数据入库,并进行试运行。6数据库运行和维护数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。3.2.3 数据库设计的步骤在数据库设计过程中必须注意以下几个问题:(1)数据库设计过程中要注意充分调动用户的积极性。用户的积极参与是数据库设计成功的关键因素之一。用户最了解自己的业务和需求,用户的积极配合能够缩短需求分析的进程,帮助设计人员尽快熟悉业务,更加准确地抽象出用户的需求,减少反复,也使设计出的系统与用户的最初设想更为符合。同时用
38、户参与意见,双方共同对设计结果承担责任,也可以减少数据库设计的风险。(2)应用环境的改变、新技术的出现等都会导致应用需求的变化,因此设计人员在设计数据库时必须充分考虑到系统的可扩充性,使设计易于变动。一个设计优良的数据库系统应该具有一定的可伸缩性,应用环境的改变和新需求的出现一般不会推翻原设计,不会对现有的应用程序和数据造成大的影响,而只是在原设计基础上做一些扩充即可满足新的要求。(3)系统的可扩充性最终都是有一定限度的。当应用环境或应用需求发生巨大变化时,原设计方案可能终将无法再进行扩充,必须推倒重来,这时就会开始一个新的数据库设计的生命周期。但在设计新数据库应用的过程中,必须充分考虑到已有
39、应用,尽量使用户能够平稳地从旧系统迁移到新系统3.3 关系数据库标准语言SQLSQL(Structured Query Language,结构化查询语言)是1974年由Boyce和Chamberlin提出的。19751979年IBM公司San Jose Research Laboratory研制的关系数据库管理系统的原型系统System R实现了这种语言。经各公司的不断修改、扩充和完善,SQL语言最终发展成为关系数据库的标准语言。1986年10月由美国国家标准局(ANSI)公布将SQL作为关系数据库语言的美国标准,1987年国际标准化组织(ISO)也通过了这一标准。自SQL成为国际标准语言以后
40、,各个数据库厂家纷纷推出各自支持的SQL软件或与SQL兼容的接口软件。SQL成为国际标准,对数据库以外的领域也产生了很大影响,有不少软件产品将SQL语言的数据查询功能与图形功能、软件工程工具、软件开发工具、人工智能程序结合起来。SQL已成为关系数据库领域中一个主流语言。3.3 关系数据库标准语言SQLSQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体。它是一个综合的、通用的、功能极强,同时又简洁易学的语言。其主要特点包括以下几个方面。1综合统一2高度非过程化3面向集合的操作方式4用同一种语法结构提供两种使用方式5语言简洁,易学易用3.4 数据库保护3.4.1 安全性3.4.2 完整性
41、3.4.3 并发控制3.4.4 数据库恢复3.4.1 安全性1数据库的安全性数据库的安全性是指保护数据库,防止因用户非法使用数据库造成的数据泄露、更改或破坏。数据库的一大特点是数据可以共享,但数据共享必然带来数据库的安全性问题。因此,数据库系统中的数据共享不能是无条件的共享,而必须是在DBMS统一严格的控制之下,只允许有合法使用权限的用户访问允许他存取的数据。数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一。2安全性控制的一般方法在数据库中用于安全性控制的方法主要有用户标识和鉴定、存取控制、定义视图、审计和数据加密等。3.4.2 完整性1数据库的完整性数据库的完整性是指数据的正确
42、性和相容性。例如,学生的性别只能是男或女;学生的姓名是字母或汉字;学号必须唯一等。数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的。2安全性与完整性的区别 数据的完整性与安全性是数据库保护的两个不同的方面。安全性是防止用户非法使用数据库,包括恶意破坏数据和越权存取数据。完整性则是防止合法用户使用数据库时向数据库中加入不符合语义的数据。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不符合语义的数据。3.4.2 完整性3数据库的完整性约束条件和完整性控制机制为维护数据库的完整性,DBMS必须提供一种机制来检查数据库中的数据,
43、看其是否满足语义规定的条件。这些加在数据库数据之上的语义约束条件称为数据库的完整性约束条件,它们作为模式的一部分存入数据库中。而DBMS中检查数据是否满足完整性条件的机制称为完整性控制机制。(1)数据库的完整性约束条件。)数据库的完整性约束条件。完整性约束条件作用的对象可以有列级、元组级和关系级3种精度。完整性约束条件涉及的这3种对象,其状态可以是静态的,也可以是动态的。其中对静态对象的约束是反映数据库状态合理性的约束,这是最重要的一类完整性约束。对动态对象的约束是反映数据库状态变迁的约束。3.4.2 完整性(2)完整性控制机制。)完整性控制机制。DBMS的完整性控制机制具有3个方面的功能:定
44、义功能,即提供定义完整性约束条件的机制。检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。操作功能,如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。3.4.3 并发控制数据库是一个共享资源,可以供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间将处于闲置状态。为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并
45、发存取同一数据的情况,若对并发操作不加控制就可能会存取不正确的数据,破坏数据库的一致性。因此数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一。3.4.3 并发控制1事务事务是数据库的逻辑工作单位,它是用户定义的一组操作序列,这些操作要么都做,要么都不做。在关系数据库中,一个事务可以是一组SQL语句、一条SQL语句或整个程序。通常情况下,一个应用程序包括多个事务。原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)是事务的4个特性,通常称为事务的ACID特性。(1)原子性原子性
46、。事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。这就是事务的原子性。(2)一致性一致性。事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。(3)隔离性隔离性。对并发执行而言,一个事务的执行不能被其他事务干扰。一个事务内部的操作及使用的数据对其他并发事务是隔离的,同时并发执行的各个事务之间也不能互相干扰。(4)持续性持续性。一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。3.4.3 并发控制2并发操作带来的数据不一致性对并发操作如果不进行合适的控制,可能会导致数据库中数据的不一致性。并发操作带来的数据不一致性问题包括3类:丢失修改、不可重复读和读“
47、脏”数据。(1)丢失修改(Lost Update)。丢失修改是指事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。一个最常见的例子是飞机订票系统中的订票操作。该系统中的一个活动序列如下:甲售票员读出某航班的机票余额A,设A=16。乙售票员读出同一航班的机票余额A,也为16。甲售票点卖出一张机票,修改机票余额A=A-1,A=15,把A写回数据库。乙售票点也卖出一张机票,修改机票余额A=A-1,A=15,把A写回数据库。结果明明卖出两张机票,数据库中机票余额却只减少了l。3.4.3 并发控制2)不可重复读(Non-repeatable Re
48、ad)。不可重复读是指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次的读取结果。根据操作的不同,通常有三类不可重复读的类型。当有事务1读取某一数据后:事务2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。事务2删除了其中部分记录,当事务1再次读取数据时,发现某些记录神秘地消失了。事务2插入了一些记录,当事务1再次按相同条件读取数据时,发现多了一些记录。其中,后两种不可重复读有时也称为幻影现象(Phantom Row)。(3)读“脏”数据(Dirty Read)。读“脏”数据是指事务l修改某一数据,并将其写回磁盘,事务2读取同一数据后,事务1由于某种原因被撤销,这时事务
49、1已修改过的数据恢复原值,事务2读到的数据就与数据库中的数据不一致,是不正确的数据,称为“脏”数据。3.4.3 并发控制3并发控制所谓并发控制就是要用正确的方式调度并发操作,避免造成数据的不一致性,使一个用户事务的执行不受其他事务的干扰。4并发控制的主要方法并发控制的主要方法是采用封锁机制。封锁就是事务T在对某个数据对象(如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。3.4.4 数据库恢复1恢复的原理数据库恢复主要是利用存储在系统其他地方的冗余数据来重建或修复数据库中已经被破坏或已经不正确的那
50、部分数据。恢复的基本原理虽然简单,但实现的技术却相当复杂。一般一个大型数据库产品,恢复子系统的代码要占全部代码的10以上。3.4.4 数据库恢复2恢复的实现技术恢复就是利用存储在系统其他地方的冗余数据来重建或修复数据库中被破坏的或不正确的数据。因此数据库的恢复包括以下两步:(1)建立冗余数据。建立冗余数据最常用的技术是数据转储和登录日志文件。通常在一个数据库系统中,这两种方法是一起使用的。数据转储。数据转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。一旦系统发生介质故障,数据库遭到破坏,可以将后备副本重新装入,把数据库恢复起来。登录日