数据库系统原理及MySQL应用教程
上QQ阅读APP看书,第一时间看更新

4.4 逻辑结构设计

4.4.1 逻辑结构设计的任务和步骤

概念结构设计阶段得到的E-R模型是用户的模型,它独立于任何一种数据模型,独立于任何一个具体的DBMS。为了创建用户所要求的数据库,需要把上述概念模型转换为某个具体的DBMS所支持的数据模型。数据库逻辑设计的过程是将概念结构转换成特定DBMS所支持的数据模型的过程。从此开始便进入了“实现设计”阶段,需要考虑到具体的DBMS的性能、具体的数据模型特点。

E-R图所表示的概念模型可以转换成任何一种具体的DBMS所支持的数据模型,如网状模型、层次模型和关系模型。这里只讨论关系数据库的逻辑设计问题,所以,只介绍E-R图如何向关系模型进行转换。

一般的逻辑设计分为以下三步(如图4-11所示)。

图4-11 关系数据库的逻辑设计

1)初始关系模式设计。

2)关系模式规范化。

3)模式的评价与改进。

4.4.2 初始关系模式设计

转换原则

概念设计中得到的E-R图是由实体、属性和联系组成的,而关系数据库逻辑设计的结果是一组关系模式的集合。所以,将E-R图转换为关系模型实际上就是将实体、属性和联系转换成关系模式。

4.4.3 关系模式规范化

应用规范化理论对上述产生的关系的逻辑模式进行初步优化,以减少乃至消除关系模式中存在的各种异常,改善完整性、一致性和存储效率。规范化理论是数据库逻辑设计的指南和工具,规范化过程可分为两个步骤:确定范式级别和实施规范化处理。

1.确定范式级别

考查关系模式的函数依赖关系,确定范式等级。逐一分析各关系模式;考查是否存在部分函数依赖、传递函数依赖等,确定它们分别属于第几范式。

2.实施规范化处理

确定范式级别后,利用后面的规范化理论,逐一考察各个关系模式,根据应用要求,判断它们是否满足规范要求,可用已经介绍过的规范化方法和理论将关系模式规范化。

综合以上数据库的设计过程,规范化理论在数据库设计中有如下几方面的应用:

1)在需求分析阶段,用数据依赖概念分析和表示各个数据项之间的联系。

2)在概念结构设计阶段,以规范化理论为指导,确定关系键,消除初步E-R图中冗余的联系。

3)在逻辑结构设计阶段,从E-R图向数据模型转换过程中,用模式合并与分解方法达到规范化级别。

4.4.4 模式的评价与改进

关系模式的规范化不是目的而是手段,数据库设计的目的是最终满足应用需求。因此,为了进一步提高数据库应用系统的性能,还应该对规范化后产生的关系模式进行评价、改进,经过反复多次的尝试和比较,最后得到优化的关系模式。

模式评价的目的是检查所设计的数据库模式是否满足用户的功能要求、效率要求,确定加以改进的部分。模式评价包括功能评价和性能评价。

所谓功能评价,是指对照需求分析的结果,检查规范化后的关系模式集合是否支持用户所有的应用要求。对于目前得到的数据库模式,由于缺乏物理结构设计所提供的数量测量标准和相应的评价手段,所以,性能评价是比较困难的,只能对实际性能进行估计,包括逻辑记录的存取数、传送量,以及物理结构设计算法的模型等。

根据模式评价的结果,对已生成的模式进行改进。如果因为系统需求分析、概念结构设计的疏漏导致某些应用不能得到支持,则应该增加新的关系模式或属性。如果因为性能考虑而要求改进,则可采用合并或分解的方法。

(1)合并

如果有若干个关系模式具有相同的主键,并且对这些关系模式的处理主要是查询操作,而且经常是多关系的连接查询,那么可对这些关系模式按照组合使用频率进行合并,这样便可以减少连接操作而提高查询效率。

(2)分解

为了提高数据操作的效率和存储空间的利用率,最常用和最重要的模式优化方法就是分解,根据应用的不同要求,可以对关系模式进行垂直分解和水平分解。

经过多次的模式评价和模式改进之后,最终的数据库模式得以确定。逻辑结构设计阶段的结果是全局逻辑数据库结构。对于关系数据库系统来说,就是一组符合一定规范的关系模式组成的关系数据库模式。

数据库系统的数据物理独立性特点消除了由于物理存储改变而引起的对应程序的修改。标准的DBMS例行程序应适用于所有的访问,查询和更新事务的优化应当在系统软件一级上实现。这样,逻辑数据库确定之后,就可以开始进行应用程序设计了。

在数据库设计的工作中,有时数据库开发人员仅从范式等理论知识无法找到问题的“标准答案”,需要靠数据库开发人员经验的积累及智慧的沉淀。同一个系统,不同经验的数据库开发人员,仁者见仁,智者见智,设计结果往往不同。但不管怎样,只要实现了相同的功能,所有的设计结果没有对错之分,只有合适与不合适之分。

因此,数据库设计像一门艺术,数据库开发人员更像一名艺术家,设计结果更像一件艺术品。数据库开发人员要依据系统的环境(网络环境、硬件环境、软件环境等)选择一种更为合适的方案。有时为了提升系统的检索性能、节省数据的查询时间,数据库开发人员不得不考虑使用冗余数据,不得不浪费存储空间。有时为了节省存储空间、避免数据冗余,又不得不考虑牺牲时间。设计数据库时,“时间”(效率或者性能)和“空间”(外存或内存)好比天生的一对“矛盾体”,这就要求数据库开发人员保持良好的数据库设计习惯,维持“时间”和“空间”之间的平衡关系。