《数据库系统06--设计数据完整性.优秀PPT.ppt》由会员分享,可在线阅读,更多相关《数据库系统06--设计数据完整性.优秀PPT.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第 6 讲讲 设计数据完整性设计数据完整性 一、一、关系数据库设计要点关系数据库设计要点 1 关系数据库设计概述关系数据库设计概述 2 规划关系数据库规划关系数据库 3 设计数据完整性概述设计数据完整性概述二、数据库表的规范化二、数据库表的规范化 1 概论概论 2 规范化的必要性规范化的必要性 3 到第一范式的转换到第一范式的转换 4 到其次范式的转换到其次范式的转换 5 到第三范式的转换到第三范式的转换 本本讲讲参考参考书书目:目:1 美美 Rob,P.Coonel,C.数据数据库库系系统设统设计计、实现实现与管理(第与管理(第5版)版).陈陈立立军军 等等译译.电电子工子工业业出版社,出
2、版社,2004.3 2 美美 Ramakrishnan,R.Gehrke,J.数据数据库库管理系管理系统统原理与原理与设计设计(第(第3版)版).周立柱周立柱 等等译译.北京:清北京:清华华高校出版社,高校出版社,2004.3 1 关系数据库设计概述关系数据库设计概述 DBMS 从产生直至发展到现在从产生直至发展到现在,出现了多出现了多种类型种类型.按其数据模型来分,主要有层次数据按其数据模型来分,主要有层次数据库、网状数据库和关系数据库库、网状数据库和关系数据库.前两者在六七前两者在六七十年头较为流行,然而他们表示数据之间的联十年头较为流行,然而他们表示数据之间的联系太过于困难,现在已经很少
3、运用,只是在讲系太过于困难,现在已经很少运用,只是在讲解数据库的时候才有所提及解数据库的时候才有所提及.关系数据库以关系的数学理论为基础,是关系数据库以关系的数学理论为基础,是数据库技术的一项重大突破数据库技术的一项重大突破.一、一、关系数据库设计要点关系数据库设计要点 关系数据库简洁严谨,二十多年来有了长关系数据库简洁严谨,二十多年来有了长足发展,现在已经成为事实上的标准,当今几足发展,现在已经成为事实上的标准,当今几乎全部的数据库产品都是基于关系数据库的乎全部的数据库产品都是基于关系数据库的.数据库设计是数据库应用的一个关键因素数据库设计是数据库应用的一个关键因素,设计结构合理、功能齐全的
4、数据库对于提高数设计结构合理、功能齐全的数据库对于提高数据库应用程序的开发效率和程序的性能都是非据库应用程序的开发效率和程序的性能都是非常重要的常重要的.数据库设计是指对于一个给定的应用环境数据库设计是指对于一个给定的应用环境,构造最优的数据模式,建立数据库,使其能够构造最优的数据模式,建立数据库,使其能够有效地存储数据记录,并能满足各种应用需求有效地存储数据记录,并能满足各种应用需求.对于一个数据密集型应用来说,数据库设对于一个数据密集型应用来说,数据库设计是它的一个核心部分,但对于大型的软件系计是它的一个核心部分,但对于大型的软件系统设计来说统设计来说,它只是其中一个部分它只是其中一个部分
5、.数据库设计的过程可以分为数据库设计的过程可以分为 6 步步.(1)需求分析需求分析 (2)概念数据库设计概念数据库设计 (3)逻辑数据库设计逻辑数据库设计 (4)模式的细化模式的细化 (5)物理数据库设计物理数据库设计 (6)应用与平安设计应用与平安设计 2 规划关系数据库规划关系数据库 进行数据库规划是全部数据库编程的第一步进行数据库规划是全部数据库编程的第一步,也是最重要的一步也是最重要的一步.首先,列出客户所关切的全部数据和建立这首先,列出客户所关切的全部数据和建立这个数据库的主要目的个数据库的主要目的.这可以通过收集各种相关这可以通过收集各种相关的数据报表和表格来完成的数据报表和表格
6、来完成.需求分析是数据库设需求分析是数据库设计的第一阶段,不断的调查与探讨,了解组织机计的第一阶段,不断的调查与探讨,了解组织机构的状况,了解部门的业务流程等系统需求,对构的状况,了解部门的业务流程等系统需求,对于设计好数据库是特别重要的于设计好数据库是特别重要的.然后,数据表规划是整个数据库设计中技巧然后,数据表规划是整个数据库设计中技巧性最强的一个步骤性最强的一个步骤.数据表要满足第三范式数据表要满足第三范式.规划数据库有以下三条基本原则:规划数据库有以下三条基本原则:数据库中的记录个数应当反映现实世界数据库中的记录个数应当反映现实世界对象的个数对象的个数.假如一个对象的实例在现实世界中假
7、如一个对象的实例在现实世界中存在,则在数据库中有且只有一条记录存在存在,则在数据库中有且只有一条记录存在.每行记录的字段应当表达现实世界对象每行记录的字段应当表达现实世界对象的属性的属性.现实世界对象之间的关系应当反映在数现实世界对象之间的关系应当反映在数据库记录之间的关系上据库记录之间的关系上.3 设计数据完整性概述设计数据完整性概述 关系数据库的目的是建立现实世界的模型关系数据库的目的是建立现实世界的模型.基于这一点基于这一点,用来实施数据完整性的规则和方法用来实施数据完整性的规则和方法无论对于理论和数据库开发的实践都很重要无论对于理论和数据库开发的实践都很重要.数据完整性是指存储在数据库
8、中的数据的正数据完整性是指存储在数据库中的数据的正确性和相容性确性和相容性.设计数据完整性的目的是为了防止数据库中设计数据完整性的目的是为了防止数据库中存在不符合语义的数据存在不符合语义的数据,防止错误信息的输入和防止错误信息的输入和输出输出.数据完整性可以分数据完整性可以分为为四四类类:实实体完整性体完整性 每个每个实实体都保持惟一性体都保持惟一性.值值域完整性域完整性 如何限制向表中如何限制向表中输输入入值值的范的范围围.引用完整性引用完整性(参照完整性参照完整性)处处理数据理数据时维护时维护表之表之间间数据的一数据的一样样性性.用用户户定定义义的完整性的完整性 体体现实际现实际运用的运用
9、的业务规则业务规则.实体完整性实体完整性 每一个实体都必需拥有一个主键或者其他的惟一标识列每一个实体都必需拥有一个主键或者其他的惟一标识列.要求:全部的主键项都是唯一的,并且主键的任何部分要求:全部的主键项都是唯一的,并且主键的任何部分都不能为空都不能为空.目的:保证每个实体有惟一的标识,确保外键值可以正目的:保证每个实体有惟一的标识,确保外键值可以正确地引用主键值确地引用主键值.例子:发货单没有重复的号码,号码也不能为空例子:发货单没有重复的号码,号码也不能为空.参照完整性参照完整性 要求:外键可能是空要求:外键可能是空-只要它不是它自己所在的表的主只要它不是它自己所在的表的主键的一部分键的
10、一部分-每个非每个非null外键值必需参照已经存在的主键值外键值必需参照已经存在的主键值.目的:不能有无效的项目的:不能有无效的项.例子:客户可以没有给定的代理商号码,但是不能有无例子:客户可以没有给定的代理商号码,但是不能有无效的代理商号码效的代理商号码.SQL Server供应的用来实施数据完整性的供应的用来实施数据完整性的途径主要是途径主要是:约束约束(constraint)标识列标识列(identity column)默认值默认值(default)规则规则(rule)触发器触发器(trigger)数据类型数据类型(data type)索引索引(index)存储过程存储过程(stored
11、 procedure)约束完整性 约束完整性是指数据的正确性和完备性.在用INSERT、DELETE、UPDATE 语句修改数据库内容时,数据的完整性可能会遭到破坏,有如下几种状况:-无效的数据被添加到数据库中,如某订单所指的产品不存在.-对数据库的修改不一样,如为某产品增加了订单,但却没有调整产品的库存信息.-将存在的数据修改为无效的数据.在在 SQL Server 中实现数据完整性的方法之中实现数据完整性的方法之一就是约束一就是约束.运用这种方法简洁且不简洁出错,运用这种方法简洁且不简洁出错,它把完整性的要求定义在表和列上它把完整性的要求定义在表和列上.所谓约束,是所谓约束,是 SQL S
12、erver 强制实行的应用强制实行的应用规则,它能够限制用户存放到表中的数据的格式规则,它能够限制用户存放到表中的数据的格式和范围和范围.约束是在约束是在CREATE TABLE、ALTER TABLE语句中,通过语句中,通过 CONSTRAINT 和和 DEFAULT实现实现.1 概论概论 好的数据库设计须要好的表结构好的数据库设计须要好的表结构.本节我们本节我们将学习如何评价和设计好的数据库表,限制数据将学习如何评价和设计好的数据库表,限制数据冗余,从而避开数据异样,这就是规范化冗余,从而避开数据异样,这就是规范化.为了识别和鉴赏好的表结构的特性,考察一为了识别和鉴赏好的表结构的特性,考察
13、一个不好的表结构是很有用的个不好的表结构是很有用的.利用这种方法,我利用这种方法,我们将学会如何设计好的表结构,如何修改已有的们将学会如何设计好的表结构,如何修改已有的不好的表结构不好的表结构.二、数据库表的规范化二、数据库表的规范化 通过规范化不仅可以消退数据异样,而且适通过规范化不仅可以消退数据异样,而且适当规范化的表结构事实上要比没有规范化的来得当规范化的表结构事实上要比没有规范化的来得简洁,它还能反映出一个组织的实际运行状况简洁,它还能反映出一个组织的实际运行状况.拥有好的关系数据库软件,并不足以避开拥有好的关系数据库软件,并不足以避开数据冗余数据冗余.即使在一个好的数据库设计中即使在
14、一个好的数据库设计中,也有也有可能生成不好的表结构可能生成不好的表结构.那么,如何识别不好的表结构,如何创建那么,如何识别不好的表结构,如何创建好的表结构呢?两个问题的答案都是基于规范好的表结构呢?两个问题的答案都是基于规范化的化的.规范化是给实体安排属性的过程规范化是给实体安排属性的过程.它能它能够削减但不能够消退数据冗余;相反,它通过够削减但不能够消退数据冗余;相反,它通过生成有限制的冗余来连接数据库表生成有限制的冗余来连接数据库表.规范化通过一系列称为范式的阶段来完成规范化通过一系列称为范式的阶段来完成.最前面的三个阶段分别叫做第一范式最前面的三个阶段分别叫做第一范式(1NF)、其次范式
15、其次范式(2NF)和第三范式和第三范式(3NF).从结构化从结构化的的观点来看,观点来看,2NF 比比 1NF 好,好,3NF 比比 2NF 好好.对于大多数的事物数据库设计,我们只要能规对于大多数的事物数据库设计,我们只要能规范到范到 3NF 就已经足够了就已经足够了.虽然规范化是数据库设计的一个重要组成虽然规范化是数据库设计的一个重要组成部分,但是并不是规范化级别越高越好部分,但是并不是规范化级别越高越好.通常通常,范式级别越高,产生制定输出所要求的连接就范式级别越高,产生制定输出所要求的连接就越多,系统对终端用户恳求的响应就越慢越多,系统对终端用户恳求的响应就越慢.我们考察某建筑公司的一
16、个简洁数据库行我们考察某建筑公司的一个简洁数据库行为为.该公司管理几个建筑项目,每个项目都有该公司管理几个建筑项目,每个项目都有它自己的项目号、项目名、员工等属性,每个它自己的项目号、项目名、员工等属性,每个员工有员工号、姓名和职位级别等属性员工有员工号、姓名和职位级别等属性.公司依据每个合同须要花费的小时数来向公司依据每个合同须要花费的小时数来向客户收费客户收费.每小时的酬劳由员工的职位确定每小时的酬劳由员工的职位确定.该应用周期性地生成信息报表该应用周期性地生成信息报表.由这个报由这个报表对应地生成一个表表对应地生成一个表.2 规范化的必要性规范化的必要性 这个表的结构不符合完整性的要求,
17、它也这个表的结构不符合完整性的要求,它也没有很好的处理数据没有很好的处理数据.项目号(项目号(PROJ_NUM)很明显是希望)很明显是希望作为一个主码,或者至少是主码的一部分,但作为一个主码,或者至少是主码的一部分,但是它包含空值是它包含空值.表的数据输入引起数据的不一样表的数据输入引起数据的不一样.如,如,Elect.Engineer 可能写成可能写成Elect.Eng,El.Eng,EE.该表中有数据冗余,会产生异样:该表中有数据冗余,会产生异样:更新异样更新异样:如修改如修改105号的号的 JOB_CLASS.插入异样,删除异样插入异样,删除异样.当把某员工安排到某项目时当把某员工安排到
18、某项目时,重复输入数据重复输入数据.消退组重复消退组重复 在作为主码的列中加入合适的项即可在作为主码的列中加入合适的项即可.主码应能恰当地、惟一地确定任何属主码应能恰当地、惟一地确定任何属性性值值 取主码为取主码为 PROJ_NUM 和和 EMP_NUM 的的组合组合.这样得到了符合第一范式的表这样得到了符合第一范式的表.3 到第一范式的转换到第一范式的转换PROJ_NUM PROJ_NAME EMP_NUM EMP_NAME JOB_CLASS CHG_HOUR HOUR部分依赖部分依赖部分依赖部分依赖传递依赖传递依赖 术语术语 1NF 描述了如下的表格式:描述了如下的表格式:定义了全部的码
19、属性定义了全部的码属性.表中没有重复组表中没有重复组.全部的属性都依靠于主码全部的属性都依靠于主码.全部的关系表都属于全部的关系表都属于 1NF.上图所示的第上图所示的第一范式的表结构的问题是它包含部分依靠一范式的表结构的问题是它包含部分依靠,也也就是说,基于部分主码的依靠就是说,基于部分主码的依靠.虽然有时为了提高性能须要运用部分依靠虽然有时为了提高性能须要运用部分依靠,但要谨慎运用但要谨慎运用.因为这样的表仍有数据冗余因为这样的表仍有数据冗余(由由每行记录都要求有数据副本而产生每行记录都要求有数据副本而产生),重复输重复输入入使效率很低,也会助长数据异样的产生使效率很低,也会助长数据异样的
20、产生.一个表属于其次范式是指:一个表属于其次范式是指:它属于它属于 1NF.它不包含部分依靠,即,没有属性只它不包含部分依靠,即,没有属性只依依赖于主码的一部分赖于主码的一部分.到其次范式的转换是,将原表分为三个表到其次范式的转换是,将原表分为三个表:PROJCT(PROJ_NUM,PROJ_NAME)EMPLOYEE(EMP_NUM,EMP_NAME,JOB_CLASS,CHG_HOUR)ASSIGN(PROJ_NUM,EMP_NUM,ASSIGN_HOUR)4 到其次范式的转换到其次范式的转换 将三个表再分出一个表,消退将三个表再分出一个表,消退传递传递依靠依靠:EMPLOYEE(EMP_
21、NUM,EMP_NAME,JOB_CLASS)JOB(JOB_CLASS,CHG_HOUR)表属于第三范式是指:表属于第三范式是指:它属于它属于 2NF.它不包含它不包含传递传递依靠依靠.消退了表消退了表结结构中的部分依靠和构中的部分依靠和传递传递依靠后依靠后,还还要集中改善数据要集中改善数据库库供供应应信息和增加关系特性信息和增加关系特性.5 到第三范式的转换到第三范式的转换 练习练习 写出写出 T-SQL 语句建立下表存放学生语句建立下表存放学生的信息的信息.表名为:表名为:student,含有列:含有列:name(char,10位位)、id(char,7位位)、sex(char,2位位)、birthday(datetime,8位位)、class(char,10位位)birth_place(varchar,50位位),设置学号(,设置学号(id)为主键约束并带有聚集索引为主键约束并带有聚集索引.