第 6章 数据库设计
6.1 关系数据模型的规范化
6.2 数据库设计关系与关系模式
关系是一张二维表,它是所涉及属性的笛卡尔积的一个子集。从笛卡尔积中选取哪些元组构成该关系,通常是由现实世界赋予该关系的元组语义来确定的。
关系模式是对关系的描述,为了能够清楚地刻划出一个关系,它需要由五部分组成,
即应该是一个五元组:
R(U,D,DOM,F)
其中,R为关系名,U为组成该关系的属性名集合,D为属性组 U中属性所来自的域,
DOM为属性向域的映象集合,F为属性间数据的依赖关系集合。
例:有如下关系,如下表:
上述关系可以构成两个域:
姓名:{嘉琦,王干....}
专业:{计算机,金融...}
由于导师和研究生出自同一个域,姓名,,
所以要取不同的属性名,用DOM表示,即:
DOM(导师)=DOM(研究生)=姓名
关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,关系是动态的,不同时刻关系模式中的关系可能会有所不同,但它们都必须满足关系模式中数据依赖关系集合 F所指定的完整性约束条件。
由于在关系模式 R(U,D,DOM,F)中,
影响数据库模式设计的主要是 U和 F,而 D和
DOM对数据库模式设计的影响不大,所以,
为了方便讨论,本章将关系模式简化为一个三元组,即:
R(U,F)
6.1 关系数据模型的规范化
6.1.1 数据依赖
6.1.2 规范数据模型要解决的问题返回数据依赖
数据依赖是数据库模式设计的关键,数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
在关系模式中,属性间数据的依赖关系集合 F实际上就是描述关系的元组语义,用以限定组成关系的各个元组必须满足的完整性约束条件。在实际中,这些约束或者通过对属性取值范围的限定,
或者通过对属性值间的相互关连 (主要体现于值的相等与否 )反映出来。属性值间的相互关连就是所谓的数据依赖,
返回
6.1.2 规范数据模型要解决的问题
函数依赖普遍地存在于现实生活中。
例:描述一个学生的关系,可以有 学号 (SNO)、
姓名 (SNAME)、所在系 (DEPT)等几个属性。
由于一个学号只对应一个学生,一个学生只在一个系。因而当,学号,值确定之后,姓名及其所在系的值也就被唯一地确定了。
属性间的这种依赖关系类似于数学中的函数。因此说 SNO函数决定 SNAME和 DEPT
或者说 SNAME和 DEPT函数依赖于 SNO
记做 SNO→SNAME,SNO→DEPT 。
建立一个描述学校的数据库,该数据库涉及的对象包括学生的学号 (SNO)、所在系 (DEPT)、系主任姓名
(MNAME)、课程名 (CNAME)和成绩 (GRADE)。假设学校的数据库模式由一个单一的关系模式 S 构成,则该关系模式的属性集合为:
U={ SNO,DEPT,MNAME,CNAME,GRADE}
由常识可知:
①一个系有若干学生,但一个学生只属于一个系;
②一个系只有一名主任;
③一个学生可以选修多门课程,每门课程有若干学生选修;
④每个学生所学的每门课程都有一个成绩。
从上述事实可以得到属性组 U上的一组函数依赖 F:
F={ SNO→DEPT,DEPT→MNAME,(SNO,
CNAME)→GRADE }
码,KEY=(SNO,CNAME)
对上述只考虑函数依赖这一数据依赖,所得到的描述学生的关系模式,存在如下问题:
① 插入异常 (insertion anomalies)。当学生刚入学时,还没有选课,因此无法确定属性 CNAME的值,码 (SNO,CNAME)
存在空值,根据实体完整性规则,插入无法执行。
②删除异常 (deletion anomalies)。如果某个系的学生全部毕业了,在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
③数据冗余太大。比如,每一个系主任的姓名重复出现,
重复次数与该系所有学生的所有课程成绩出现次数相同。
这不仅浪费大量的存储空间,而且当更新数据库中的数据时,系统要付出很大的代价来维护数据库的完整性。并且存在数据不一致的隐患。
鉴于存在以上种种问题,可以说关系模式 S 不是一个好的模式。一个,好,的模式应当不会发生插入异常、删除异常、数据冗余应尽可能少。 返回
6.2 数据库设计
6.2.1 数据库设计的方法和步骤
6.2.2 需求分析
6.2.3 概念结构设计
6.2.4 逻辑结构设计
6.2.5 数据库物理设计
6.2.6 数据库的实施、运行与维护返回
6.2.1 数据库设计的方法
由于信息结构复杂,应用环境多样,在相当长的一段时期内数据库设计主要采用手工试凑法。使用这种方法与设计人员的经验和水平有直接关系,数据库设计成为一种技艺而不是工程技术,缺乏科学理论和工程方法的支持,工程的质量难以保证,常常是数据库运行一段时间后又不同程度地发现各种问题,增加了系统维护的代价。
十余年来,人们努力探索,提出了各种数据库设计方法,
这些方法运用软件工程的思想和方法,提出了各种设计准则和规程,都属于规范设计法。
规范设计法中比较著名的有新奥尔良( New Orleans)
方法。它将数据库设计分为四个阶段:需求分析(分析用户要求)、概念设计(信息分析和定义)、逻辑设计
(设计实现)和物理设计(物理数据库设计)。
6.2.1 数据库设计的步骤需求分析阶段
进行数据库设计首先必须准确了解与分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,是最困难、最耗费时间的一步。需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。
概念结构设计阶段
概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS的概念模型。
逻辑结构设计阶段
逻辑结构设计是将概念结构转换为某个
DBMS所支持的数据模型,并对其进行优化。
数据库物理设计阶段
数据库物理设计是为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
数据库实施阶段
在数据库实施阶段,设计人员运用 DBMS
提供的数据语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
数据库运行和维护阶段
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。
数据库设计各阶段的设计描述返回
6.2.2 需求分析
需求分析的任务 是通过详细调查现实世界要处理的对象(组织、部门、企业等),
充分了解原系统(手工系统或计算机系统)
工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
调查的重点是,数据,和,处理,,通过调查、收集与分析,获得用户对数据库的要求:
① 信息要求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
②处理要求。指用户要完成什么处理功能,
对处理的响应时间有什么要求,处理方式是批处理还是联机处理。
③安全性与完整性要求。
调查用户需求的具体步骤是
① 调查组织机构情况。包括了解该组织的部门组成情况、各部门的职责等,为分析信息流程做准备。
②调查各部门的业务活动情况。包括了解各个部门输入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么,这是调查的重点。
③在熟悉了业务活动的基础上,协助用户明确对新系统的各种要求,包括信息要求、处理要求、完全性与完整性要求,这是调查的又一个重点。
④确定新系统的边界。对前面调查的结果进行初步分析,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成。
调查了解了用户的需求以后,还需要进一步分析和表达用户的需求。在众多的分析方法中结构化分析方法( Structured Ana1ysis,简称 SA方法)是一种简单实用的方法。 SA方法从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。
最高层次抽象的系统概貌,要反映更详细的内容,
可将处理功能分解为若干子功能,每个子功能还可以继续分解,直到把系统工作过程表示清楚为止。
在处理功能逐步分解的同时,它们所用的数据也逐级分解,形成若干层次的数据流图。
需求分析的过程数据字典
数据字典在数据库设计中占有很重要的地位。数据流图表达了数据和处理的关系,数据字典则是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。
数据字典通常包括数据项、数据结构、数据流、
数据存储和处理过程五个部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构,数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
数据项
数据项是不可再分的数据单位。对数据项的描述通常包括以下内容:
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
其中,取值范围,,,与其他数据项的逻辑关系,
(例如该数据项等于另几个数据项的和,该数据项值等于另一数据项的值等)定义了数据的完整性约束条件,是设计数据检验功能的依据。
处理过程
处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息,通常包括以下内容:
处理过程描述={处理过程名,说明,
输入:{数据流},输出:{数据流},
处理:{简要说明}}
数据结构
数据结构反映了数据之间的组合关系。
一个数据结构可以由若干个数据项组成,
也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。对数据结构的描述通常包括以下内容:
数据结构描述={数据结构名,含义说明,组成:,数据项或数据结构,}
数据流
数据流是数据结构在系统内传输的路径。
对数据流的描述通常包括以下内容:
数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
数据存储
数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。它可以是手工文档或手工凭单,也可以是计算机文档。对数据存储的描述通常包括以下内容:
数据存储描述={数据存储名,说明,编号,
输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}
返回
6.2.3 概念结构设计
概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。描述概念模型的主要工具是 E-R
模型。
概念结构设计的方法通常有四种方法自顶向下法
自顶向下法是首先定义全局概念结构的框架,然后逐步细化,
自底向上法
自底向上法是首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构,
逐步扩张法
逐步扩张法是首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构混合策略法
混合策略法是将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
数据抽象、局部视图设计视图的集成
D F D
DD
分 E - R 图总 E - R 图需求分析返回用户征求意见直至满意逻辑结构设计数据抽象
分类。 定义某一类概念作为现实世界中一组对象的类型。
这些对象具有某些共同的特性和行为。在 E-R模型中,
实体型就是这种抽象。例如在学校环境中,张英是学生,
表示张英是学生中的一员,具有学生们共同的特性和行为:在某个班学习某种专业,选修某些课程。 学生张英 李兴 刘勇 赵斌

数据抽象
聚集。 定义某一类型的组成成分。它抽象了对象内部类型和成分之间的语义。在 E-R
模型中若干属性的聚集组成了实体型,就是这种抽象 学生学号 姓名 专业 班级实体型属性数据抽象
概括。 定义类型之间的一种子集联系。它抽象了类型之间的,is subset of”的语义。
例如学生是一个实体型,本科生、研究生也是实体型。本科生、研究生均是学生的子集。把学生称为超类,本科生、研究生称为学生的子类。
学生本科生 研究生超类子类设计 E-R图
概念结构设计的第一步就是利用上面介绍的抽象机制对需求分析阶段收集到的数据进行分类、组织(聚集),形成实体、
实体的属性,标识实体的码,确定实体之间的联系类型( 1,1,1,n,m,n),设计
E-R图。
设计步骤
① 选择局部应用,根据某个系统的具体情况,
在多层的数据流图中选择一个适当层次的数据流图,作为设计分 E-R图的出发点。让这组图中每一部分对应一个局部应用,即可以这一层次的数据流图为出发点,设计分 E-R图。
②逐一设计分 E-R图,选择好局部应用之后,
就要对每个局部应用逐一设计分 E-R图,亦称局部 E-R图。
视图的集成各子局部视图即分 E-R图设计好以后,
需要对它们进行合并,集成为一个整体的数据概念结构,即将所有的分 E-R图综合成一个系统的总 E-R图。一般说来,视图集成可以有两种方式:
多个分 E-R图一次集成
逐步集成,用累加的方式一次集成两个分 E-
R图合并分 E-R图,生成初步 E-R图
各个局部应用所面向的问题不同,且通常是由不同的设计人员进行局部视图设计,这就导致各个分 E-R图之间必定会存在许多不一致的地方,
称之为冲突。因此合并分 E-R图时并不能简单地将各个分 E-R图画到一起,而是必须着力消除各个分 E-R图中的不一致,以形成一个能为全系统中所有用户共同理解和接受的统一的概念模型。
各分 E-R图之间的冲突主要有三类:
属性冲突、命名冲突和结构冲突 。
返回
6.2.4 逻辑结构设计
概念结构是独立于任何一种数据模型的信息结构,是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。但为了能够用某一 DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。
设计逻辑结构的三步骤
设计逻辑结构时一般要分三步进行。首先是将概念结构转化为一般的关系、网状、
层次模型,其次是将转化来的关系、网状、
层次模型向特定 DBMS支持下的数据模型转换,最后是对数据模型进行优化。
设计过程
E-R 图向关系数据模型的转换
E-R 图向关系模式的转换要解决的问题是如何将实体和实体间的联系转换为关系模式,
如何确定这些关系模式的属性和码。
转换一般原则
① 一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。
②一个 1,n联系可以转换为一个独立的关系模式,
也可以与 n端对应的关系模式合。
③一个 m,n联系转换为一个关系模式。
例如,选修,联系是一个 m,n联系,可以将它转换为如下关系模式中 学号与课程号 为关系的组合码,选修(学号,课程号,成绩)
④ 一个 1,1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模合并。
⑤三个或三个以上实体间的一个多元联系转换为一个关系模式。
例如,“讲授,联系是一个三元联系,可以将它转换为如下关系模式:
讲授 (课程号,职工号,书号 )
⑥ 同一实体集的实体间的联系,也可按上述 1,1,1,n和 m,n三种情况分别处理。
⑦具有相同码的关系模式可合并。
数据模型的优化
数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该适当地修改、调整数据模型的结构,这就是数据模型的优化。
①确定数据依赖。
②对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
③按照数据依赖的理论对关系模式逐一进行分析
④对关系模式进行必要的分解或合并设计用户模式
① 使用更符合用户习惯的别名
②针对不同级别的用户定义不同的外模式,
以满足系统对安全性的要求。
③简化用户对系统的使用返回
6.2.5 数据库物理设计数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程,就是数据库的物理设计。
数据库的物理设计通常分为两步:
·确定数据库的物理结构;
·对物理结构进行评价,评价的重点是时间和空间效率。
返回
6.2.6 数据库的实施、运行与维护
对数据库的物理设计初步评价完成后就可以开始建立数据库了。数据库实施主要包括以下工作:
·用 DDL定义数据库结构
·组织数据入库
·编制与调试应用程序
·数据库试运行返回