第3章
关系数据库设计
3.1 关系数据库设计过程
数据库设计是开发一个好的数据库应用系统的基础,它的基本任务是根据用户的需求,以及数据库的支撑环境(包括DBMS、操作系统和硬件),设计出数据模式(包括外模式、模式和内模式)以及典型的应用程序。
在数据库的设计过程中,不同的人员会参与到数据库设计的不同阶段。比如,用户和数据库管理员主要参与需求分析和数据库的运行维护;应用开发人员在系统实施阶段参与进来,负责编制程序和准备软硬件环境;而系统分析人员、数据库设计人员可能需要自始至终地参与数据库设计。需要注意的是,在数据库设计过程中必须充分调动用户的积极性。另外,应用环境的改变、新技术的出现等都会导致应用需求的变化,因此设计人员在设计数据库时必须充分考虑系统的可扩充性,使设计灵活、易于修改。
数据库设计是软件工程的一部分,主要包括6个阶段:需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、数据库物理设计阶段、数据库实施阶段、数据库运行和维护阶段。
作为一种主流的数据库,关系数据库设计的目标是生成一组关系模式,使得既可以方便地获取信息,又不必存储不必要的冗余信息。关系数据库的设计过程同样也包括上述6个阶段,如图3-1所示,其核心是概念数据建模,将概念模型转为关系模型并进行规范化处理。具体来说就是将E-R图转换为关系模式,以及对关系模式进行规范化。比如,构造出来的关系模式是否适合所针对的具体问题,应该构造几个关系模式,每个关系模式由哪些属性构成等,这些都是关系数据库设计过程中要解决的核心问题。
3.2 需求分析
需求分析是整个设计阶段最困难、最耗时的阶段,它是在数据库建立的必要性和可行性分析研究的基础上进行的。通常的工作包括详细调查现实世界要处理的对象,如组织、部门、企业等,调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等。在该阶段需要准确了解、分析用户的需求,形成需求分析说明书。用户需求主要包括以下三方面:
1)信息需求,用户要从数据库获得的信息内容。
2)处理需求,即完成什么处理功能及处理方式。
3)安全性和完整性要求,在定义信息需求和处理需求的同时,必须要确定安全性要求、完整性约束条件等。
需求分析的3个主要步骤是:需求信息的收集、分析整理和评审。评审是将需求分析结果再次提交给用户,获得用户的认可,以避免重大疏漏和错误。
在了解用户需求后,要进一步描述和分析用户的需求,通常采用结构化分析(Structured Analysis,SA)方法自顶向下、逐层分解。SA方法的基本思想是“分解”和“抽象”。分解是指将大问题分解为若干个小问题,将系统的复杂性降低到可以掌握的程度,然后再逐一解决这些小问题。抽象是指分解可以分层进行,即先考虑问题最本质的属性,暂时略去细节,以后再逐层添加细节,直至涉及最具体的内容。
SA的描述方法有分层的数据流图、数据字典、描述加工逻辑的结构化语言、判定表及判定树等。一般使用判定表或判定树来描述处理逻辑,使用数据字典来描述数据。
数据流图(Data Flow Diagram,DFD)是常用的结构化分析工具之一,也是描述系统工作流程的一种图形表示法,主要用来描述系统的数据流向和对数据的处理功能。数据流图包括以下几个主要元素:
1)带箭头的直线,表示数据流,是数据在系统内传播的路径。
2)矩形框,表示数据来源或输出。
3)圆形或椭圆,表示对数据的加工处理。
4)非闭合矩形、单线或双线,表示需要存储的数据。
画分层数据流图的方法是“先全局后局部,先整体后细节,先抽象后具体”。通常将这种分层的DFD分为顶层、中间层、底层。具体步骤如下:
1)先确定系统范围,画出顶层的DFD。
2)逐层分解顶层DFD,获得若干中间层DFD。
3)画出底层的DFD。
图3-2给出了一个教务管理系统中排课子系统的顶层数据流图的例子。
数据字典是对系统中数据的详细描述,是对数据流图的进一步补充,是下一步概要设计的必要输入。它用于对数据库数据描述的集中管理,并为DBA提供有关的报告。数据字典的内容主要有:数据项、数据结构、数据流、数据存储、加工处理过程。其中,数据项是最基本也是最重要的内容,所谓数据项就是不可再分的数据单位,如学号、课程号、成绩等。对数据项的描述主要包括:数据项名、含义说明、别名、类型、长度、取值范围、取值含义等。
3.3 概念结构设计
概念结构设计是整个数据库设计的关键阶段。通过对用户需求的综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。常用E-R模型来描述概念模型。
在概念结构设计阶段,设计人员仅从用户角度看待数据及其处理要求和约束,并产生一个反映用户观点的概念模式。概念结构设计主要分为3个步骤:数据抽象,设计出局部概念模式;将局部概念模式合并成全局概念模式;最后进行评审,以确认该阶段的任务是否完成,有无疏漏和错误。
设计概念结构通常有以下4类方法:
1)自顶向下:首先定义全局概念结构的框架,然后逐步细化。
2)自底向上:首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构。
3)逐步扩张:首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至形成总体概念结构。
4)混合策略:将自顶向下和自底向上相结合,使用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略设计的各局部概念结构。
通常采用自顶向下需求分析、自底向上设计概念结构。概念结构设计的特点如下:
1)能真实、充分地反映现实世界中实体间的联系。
2)概念模式是各种基本数据模型的共同基础,易于向关系、网状、层次等各种数据模型转换。
3)设计复杂程度得到降低,便于数据的组织管理,也易于修改。
4)概念模式不受特定DBMS的限制,也独立于存储安排,因而比逻辑设计得到的模式更为稳定。
5)概念模式不含具体的DBMS所附加的技术细节,更容易为用户所理解,因而能准确地反映用户的信息需求。
3.4 逻辑结构设计
逻辑结构设计阶段的主要工作是将概念模型转换为数据库的一种逻辑模式,即某种特定DBMS所支持的逻辑数据模式。如果采用基于E-R模型的数据库设计方法,该阶段的任务就是将概念结构设计阶段得到的E-R图,转换为与选用的DBMS产品所支持的数据模型相符合的逻辑结构。
通常,E-R模型向关系模型转换是数据库逻辑结构设计的主要步骤。数据库逻辑结构设计的关键是如何构造合适的数据模式。因此,关系数据库逻辑设计的主要任务就是按照规则,将概念设计阶段设计好的独立于具体的DBMS的概念模型,转换为RDBMS产品所支持的一组关系模式,并利用关系数据库理论对这组关系模式进行规范化设计和优化处理,从而得到满足所有数据要求的关系模型。
图3-3给出了逻辑结构设计的主要步骤:首先将概念结构转换为一般数据模型;然后将一般数据模型转换为特定DBMS支持下的数据模型;最后对数据模型进行优化。所谓数据模型的优化,就是对得到的初步数据模型进行适当的修改,调整数据模型的结构,以进一步提高数据库应用系统的性能。目前的DBMS产品多是关系型的,对于关系数据库逻辑结构设计的主要步骤就是将E-R图转换为关系模式,然后利用规范化理论对这组关系模式进行修正和优化,相关内容将在第4章和第5章中介绍。
优化数据模型的方法是,首先确定数据依赖,按照需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖,以及不同关系模式属性之间的数据依赖;接着消除冗余的联系;之后确定每个关系模式所属的范式;最后按照需求分析阶段得到的数据处理要求,分析关系模式是否适合系统的应用环境,如果不适合,还需要对关系模式做进一步分解。
3.5 数据库物理设计
数据库物理设计阶段是为逻辑数据模型选取一个最适合应用环境的物理结构。所谓数据库的物理结构,主要是指数据库的存储结构和存取方法。
数据库的物理设计完全依赖于给定的硬件环境和DBMS产品。具体地讲,该阶段就是根据特定的DBMS所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,为具体的应用要求选定最合适的物理存储结构(如文件类型、数据的存放次序和索引结构等)、存取路径和存取方法等。
数据库物理设计具体包括:确定数据库的存储记录结构;确定数据存储安排、存取方法的设计;完整性和安全性的设计;应用程序的设计等。其中,应用程序设计通常指进行结构化程序的开发,产生一个可实现的算法集。
对于关系数据库来说,系统会自动地将用户设计好的数据库全局模式转换为相应的内模式,用户只需要考虑是否建立索引、使用什么方式的索引等问题,有的DBMS会提供一些物理优化的选择,如内存缓冲区的大小及个数、建立不同的磁盘分区等。
3.6 数据库实施
数据库实施也称为数据库实现。该阶段的主要任务是产生一个具体的数据库和应用程序,并将原始数据导入数据库中。
对数据库的物理设计初步评价后,就开始建立数据库。数据库实施包括:运用DBMS提供的数据库语言(如SQL)及宿主语言,根据逻辑设计和物理设计的结果在计算机系统上建立实际的数据库、装载数据、编制与调试应用程序并进行数据库试运行等。
具体地讲,使用数据定义语言(DDL)来严格描述数据库结构,在创建数据库结构之后,开始向数据库中装载数据,装载过程包括:筛选数据、数据格式的转换、将转换好的数据输入计算机中、对数据进行校验以检查输入的数据是否有误等。编制与调试应用程序与组织数据入库同步进行。调试应用程序时由于数据入库可能尚未完成,通常使用模拟数据。应用程序调试完成并且已有一小部分数据入库后,就可以开始数据库的试运行。数据库的试运行也称为联合调试,主要包括功能测试和性能测试。
3.7 数据库运行和维护
试运行合格后即可投入正式运行。数据库系统正式运行,标志着数据库设计与应用开发工作的基本结束以及维护阶段的开始,在数据库系统运行过程中需要不断地对其进行评价、调整与修改。
对数据库的维护工作主要由DBA完成。运行和维护阶段的主要任务包括:
1)维护数据库的安全性与完整性:检查系统安全性是否受到侵犯,及时调整授权和密码。根据用户要求,不断修正数据的完整性约束条件。
2)实施数据库的转储与恢复,以便发生故障后能及时恢复。
3)监测并改善数据库运行性能:对数据库的存储空间状况、响应时间等系统运行过程中的性能参数的值进行分析评价,结合用户反馈确定改进措施。
4)根据用户要求对数据库进行重新组织或重构。一般情况下,DBMS提供用于数据重组的实用程序,进行重新安排存储结构、垃圾回收等工作。重构主要指对数据库的模式和内模式进行部分修改。
3.8 小结
数据库设计是数据库开发的一个重要内容,其难点和核心主要是需求分析阶段、概念设计阶段、逻辑设计阶段和物理设计阶段。在数据库的设计过程中逐步形成数据库的各级模式。
需求分析阶段综合各个用户的应用需求(现实世界的需求),采用数据流图和数据字典等描述工具,形成需求分析说明书。
概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),通常使用E-R图来描述,并最终形成概念设计说明书。需求分析和概念设计这两个阶段独立于任何具体的DBMS。
逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式,然后根据用户处理的要求和安全性的考虑,在基本表的基础上再建立必要的视图,形成数据的外模式,该阶段产生说明关系数据库中的表、视图、属性和约束的数据库逻辑设计说明书。
物理设计阶段根据DBMS的特点和处理需要,进行物理存储安排,建立索引,形成数据库内模式,该阶段产生用于说明数据库存储结构和存取方法的数据库物理设计说明书。逻辑设计和物理设计这两个阶段与所选用的具体DBMS密切相关。
习题
1.简述数据库设计的六个阶段的作用和产物。
2.数据库逻辑设计的主要目的和任务是什么?
3.数据字典的主要内容和作用是什么?
4.数据库系统投入运行后,还需要做哪些工作?