1.7 数据库系统设计步骤
1.7.1 数据库设计概述
数据库设计的目标就是为用户的应用系统提供一个高效数据库系统。为了保证数据库设计更合理,数据库的设计工作通常分阶段进行,在不同的阶段采用不同的方法完成不同的设计内容。
数据库设计分为以下6个阶段:
1)需求分析阶段。收集和分析用户对系统的信息需求和处理需求,得到设计系统所必需的需求信息,建立系统的需求说明文档。
2)概念结构设计阶段。通过对用户的需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
3)逻辑结构设计阶段。在概念模型的基础上导出一种DBMS支持的逻辑数据库模型,该模型应满足数据库存取、一致性及运行等各方面的用户需求。
4)物理结构设计阶段。为逻辑数据模型选取一个最适合应用环境的物理结构。
5)数据库实施阶段。根据逻辑设计和物理设计的结果建立数据库,编写与调试应用程序,将数据录入到数据库中,同时进行数据库系统的试运行。
6)数据库运行与维护阶段。数据库应用系统试运行后,即可以投入正式运行。在此过程中必须不断地对其进行评价、调整与修改。
设计一个完善的数据库应用系统不可能一蹴而就,往往需要不断重复上述6个阶段。
1.7.2 需求分析
需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际需求,将直接影响后面各个阶段的设计,并影响设计结果是否合理、实用。
需求分析的主要任务是在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。通过调查现有系统的运行状况,明确新系统的数据及处理这些数据的流程。需求分析所调查的重点是“数据”和“处理流程”,包括数据库中需要存储哪些数据、数据如何进行处理,以及数据的安全性与完整性要求等。
需求分析是软件工程中最重要的一个步骤,是其他各个步骤的基础,如果这一步出了问题,那么往往会导致整个项目的返工甚至失败。要想使需求分析富有成效,必须学会怎样与客户打交道,如何从客户那里得到最有效的需求。通常需求分析可以通过下面几种方式来实现。
检查文档:通过检查以往业务中保留下来的文档,可以发现业务处理中的数据流程。常见的文档有文件、图表和报告等。
面谈:面谈是最常用、最有效的方法。通过与操作员、主管领导面对面谈话,可以直接获得最有用的信息。但是,这种方式需要交谈双方具有较高的语言表达能力和分析、归纳、总结的能力,不然可能得到的只是一些只言片语。
观察、参与业务的运转:最理想的情况就是开发人员实际参与需求方业务的运转,从而在第一线了解业务流程。对于复杂的系统尤其应该如此。即使由于种种原因无法实际参与业务的运转,也要对业务流程进行仔细的观察。
研究:从Internet或各种出版物中查找和研究,看看是否有类似或者相关的项目可供参考。或从行业标准、规则中提取需求。
问卷调查:这种方式特别适合于有大批量用户使用该系统的情况,为了防止面谈带来的片面性,最好进行全体的问卷调查。问卷的设计要以选择题和判断题为主,因为大多数用户不会有耐心或能力用太多的文字来回答问题。
在进行需求调查时,往往需要同时采用上述多种方法。但无论采用何种调查方法,都需要用户的积极参与配合,并对设计工作的结果共同承担责任。
1.7.3 概念结构设计
概念结构设计是在需求分析的基础上形成数据库的概念模型,这是语义层的描述,与具体的DBMS无关。通常可以使用E-R图来表示概念模型。
在概念结构设计中,主要会用到以下几种方法。
自底向上:先定义每个局部应用的概念结构,然后按一定的规则把它们集成起来,从而得到全局概念模型。
自顶向下:先定义全局的概念结构框架,然后再逐步细化。
由里向外:先定义最重要的核心结构,然后再逐步向外扩展。
混合策略:将自顶向下和自底向上方法结合起来,先用自顶向下方法设计一个概念结构框架,然后以此为框架再根据自底向上策略设计局部概念结构,最后把它们集成起来。
采用E-R图进行数据库概念结构设计可分以下3步:
1)设计局部E-R模型,确定各个局部E-R模型的范围、定义实体、关系以及它们的属性。
2)集成局部E-R图,形成全局E-R模型。在此过程中,需要消除各个局部E-R中的属性冲突、命名冲突、结构冲突等问题。
3)对全局E-R模型做进一步的优化,其原则是实体个数尽可能少、实体所包含的属性尽可能少、实体间关系无冗余。可以把具有相同主码的实体进行合并,将具有1对1关系的两个实体合并成一个实体,消除冗余属性和冗余联系。
1.7.4 逻辑结构设计
逻辑结构设计的任务就是将概念结构设计阶段产生的E-R图转换为具体的数据库管理系统所支持的数据模型。对于关系数据库而言,逻辑结构设计就是将E-R图转换成关系模式,并对关系模式进行优化。
1.将E-R图转换成关系模式
将E-R图转换为关系模式的基本原则为:
一个实体转换为一个二维表。实体的名字作为表的名字,实体的属性作为表的属性,实体的主码作为表的主码。
一对一联系可以转换为一个独立的表,也可以与任意一端的实体所对应的表合并。如果单独作为一张表,则关系的名称作为表的名称,与关系相关联的两个实体的主码及联系本身的属性都作为这张表的属性,任选一个与之相关联的实体的主码作为主码。如果与实体所对应的表合并,则需要在该表中添加另一张表的主码和联系本身的属性作为该表的属性。
一对多联系可以转换为一个单独的表,也可以合并到多端实体所对应的表中。如果单独作为一张表,则关系的名称作为表的名称,与关系相关联的两个实体的主码及关系本身的属性都作为这张表的属性,多端实体的主码作为主码。如果与多端实体所对应的表合并,则需要在该表中添加一端所对应表的主码和关系本身的属性作为该表的属性。
多对多联系必须转换为一张表,关系的名称作为表的名称,相关联的两个实体的主码及联系本身的属性都作为该表的属性,两个实体的主码联合起来作为该表的主码。
三个或三个以上实体间的多元关系可以转换为一张表,各个实体的主码及关系本身的属性作为该表的属性,各个实体的主码联合起来作为该表的主码。
2.关系模式优化
数据库逻辑结构设计的结果并不是唯一的。为了进一步提高数据库应用系统的性能,通常以规范化理论为指导,适当地修改、调整数据模型的结构,即关系模式优化。
关系模式优化的步骤如下:
1)确定数据依赖。分析出每个关系模式的各属性之间的依赖关系及不同关系模式各属性之间的数据依赖关系。
2)对各个关系模式之间的数据依赖进行极小化处理,消除冗余的关系。
3)按照数据依赖的理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。根据应用需求,分析模式是否合适,是否需要进行合并或分解。
1.7.5 物理结构设计
物理结构设计的目的是利用已经确定的逻辑结构的结果及DBMS提供的方法、技术,以适当的存储结构、存取路径、合理的存储位置及存储分配,设计出一个高效的、可实现的数据库结构。
数据库的物理结构设计通常分为以下两个方面。
确定数据库的物理结构,在关系数据库中主要指确定存储结构和存取方法。确定数据库存储结构时要综合考虑存取时间、存储空间利用率和维护代价3方面的因素。常用的存储方式有顺序存储、散列存储和聚簇存储。为了提高数据的存取效率,应该建立合适的索引。
对物理结构进行评价,评价的重点是时间和空间效率。评价物理数据库的方法完全依赖于所选用的DBMS,主要从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的、合理的物理结构。
关于数据库的物理结构设计,需要明确一点,即使不进行物理结构设计,数据库系统照样能够正常运行,物理结构设计主要是为了进一步提高数据的存取效率。如果项目的规模不大,数据量不多,那么可以不进行物理结构设计。
1.7.6 数据库实施与维护
完成了数据库的逻辑结构和物理结构设计之后,我们已经在特定的DBMS系统下建立好了一系列二维表。下一步就是将整个数据库投入运行,同时还要进行相应的维护。
1. 数据库数据的加载和试运行
数据库结构建立好后,可以向数据库中装载数据。对于数据量不是很大的小型系统,可以用人工方式完成数据的入库。对于大中型系统,由于数据量极大,用人工方式进行数据入库将会耗费大量的人力、物力,而且很难保证数据的正确性,因此应该设计一个数据输入子系统,由计算机来辅助完成数据的入库工作。
2.数据库的运行和维护
在数据库运行阶段,对数据库经常性的维护工作主要是由数据库系统管理员来完成的,其主要工作包括数据库备份和恢复、数据库性能的调整、数据库的重新改造等。
实践指导
1.场景与要求
企业库存管理的操作步骤一般如下:
1)企业采购部采购商品后,填写采购入库单,并将商品发送给仓库,办理入库。
2)仓库收到采购部门的商品后,办理入库业务,并更新库存总账。
3)根据使用或销售的需要,操作员或业务员拿着出库单到仓库中提货或仓库根据出库单发货,并更新库存总账。
下面是某企业库存管理过程中使用的入库单、出库单和库存总账的样例。
请根据以上企业库存管理的介绍,设计出库存管理数据库的概念结构(E-R)与逻辑结构(表)。
2. 关键步骤
1)根据场景描述,提炼出实体、属性,并确定实体之间的关系。
2)用E-R图表示数据库的概念模型。
3)根据数据库概念模型到关系模型的转换原则,设计出数据库的关系模式。