`

数据库设计与优化

阅读更多

数据库应用系统设计中的一个核心问题,就是如何设计一个能够满足用户当前与可预见的末来的各项应用要求、性能良好的数据库。
 数据库设计是从用户的数据需求、处理要求及建立数据库的环境条件(软、硬件特性,其他限制)出发,把给定的应用环境(现实世界)存在的数据加以合理地组织起来逐步抽象成已经选定的某个数据库管理系统能够定义和描述的具体的数据结构的过程

 
数据库设计的成果是数据库模式和应用程序,而应用程序是以数据为基础的。因此,数据库设计中最基本的是数据库模式的设计。但是,设计一个完善的数据库系统往往是一个不断反复的过程,数据库模式必须反映数据处理的要求,保证常用的或大多数的数据处理,使用方便,性能满意,且应根据应用需求适当地修改,调整数据结构,优化数据模型,以便进一步提高数据库应用系统的性能。


1
 规范数据模式
 数据模式是关系数据库的重要组成部分,构造合适的数据模式是实现关系数据库优化设计的一个重要方面。由于关系模型有较为严格的数学工具做支撑,故一般多以关系模型做讨论的环境,从而形成了关系数据库设计理论。由于这种合适的数据模式应该符合一定的规范化要求,因而又可称为关系数据库的规范化理论。

1.1 规范化理论
 所谓关系规范化就是按统一标准对关系进行优化,以提高关系的质量,为构造一个高效的数据库应用系统打下基础。例如有一个反映轮船信息的数据库,由以下8个属性组成:船号、船名、马力、部件号、部件名、型号、重量及用量。将这8个属性构造成一个合适的关系模式,从而构造一个关系数据库,其构造方法很多。最简单的是,将8个属性组成如下关系:
  轮船(船号、船名、马力、部件号、部件名、型号、重量及用量)但是,在对这个关系操作时会有3个问题:
  (1)冗余度大 一艘轮船有N个部件,就有N次重复船号、船名、马力的数据;
  (2)插入异常 一种部件,如果在某一阶段没有轮船用到,其对应的信息就无法插入,使数据库在功能上产生了不正常的现象,同时也给用户带来极大的不便;
  (3)删除异常 一种部件,若只有一艘轮船用到,则删除他的信息,有关他选用的部件信息同时也删除了,从而丢失了应用的数据。

 


  从上面的分析可知,轮船关系不是一个“好”的数据库模式。一个“好”的模式应当避免发生插入异规范化理论认为,关系中的各属性是相互关联的,他们互相依赖、互相制约,构成一个结构严谨的整体。因此,在关系设计中,必须从语义中摸清这些关联,特别是依赖关系,只能把那些相互关联密切的属性拼凑在一起。构造一个“好”的数据库模式,必须使他的关系模式的属性之间满足某种内在的语义条件,而这种联系又可对关系的不同要求分为若干等级,这就是关系规范化。以函数依赖为基础的关系模式的规范化等级主要有5种,即第1范式(1NF),第2范式(2NF),第3范式(3NF),BC范式(BCNF)和第4范式(4NF),满足这些范式条件的关系模式可在不同程度上避免冗余、插入和更新异常问题。

1.2 规范化理论的应用
  为了消除关系模式在操作上的异常问题,优化数据模式,可进行规范化处理。具体做法是:确定数据依赖,把每个关系模式的各个属性按数据分析阶段所得到的语义写出其数据依赖,同时,考察不同的关系模式属性之间是否还存在某种数据依赖,得到一组数据依赖及诸关系的全部数据依赖。按照数据依赖的理论,逐一分析这组关系模式,确定他们属于第几范式,进行模式分解。
  例如,对上述轮船关系进行分解,提高范式等级,可构成一个轮船信息的数据库,他的数据模式由4个关系组成:轮船(船号、船名、马力);使用(船号、部件号、用量);部件(部件号、部件名、型号);型重(型号、重量)。
  这4个关系属于3NF,至此,是一个比较“好”的数据库了。


2
 改善数据库性能
  关系数据库的性能的好坏,主要体现在查询的速度上,他是数据库应用中的一个关键问题,是必须在数据库的设计中加以认真考虑的问题,特别是对那些响应时间要求较苛刻的应用,应予以特别注意。可从以下几个方面提高查询速度,改善数据库性能,从而达到数据库设计的优化目的。

2.1 减少连接操作
  连接操作对数据库的查询速度有着重要的影响,参与联接的关系越多,查询越慢。因此,对一些常用的、性能要求较高的数据库查询,最好是一元查询,这与规范化的要求相矛盾。有时为了保证性能,把规范化的关系再合并起来,称之为逆规范化。当然,这样会引起更新异常,破坏数据库完整性,必须采取相应的措施来保证数据库的完整性,从而也会增加系统的开销。因此,决定做逆规范化时,一定要权衡利弊,仔细分析应用的数据存取需求和实际的系统性能。

2.2 减小关系大小及数据量
  被查询关系的大小对查询速度影响很大。为了提高查询速度,可以采用水平分割或垂直分割等方法把一个关系分成几个关系,使每个关系的数据量减少。例如,对于有关学生的关系,既可以把全校集中在一个关系中,也可用水平分割的方法,分系建立关系,从而减少了每个关系的元组数。前者对全校范围内的查询较方便,后者则可以显著提高对系的查询速度;也可采用垂直分割的方法,把常用数据和不常用的数据分开,以提高常用数据的查询速度。例如:人事档案中,属性很多,有些需经常查询,有些则很少查询。如果放在一起,则关系数据量很大,影响查询速度。分开可提高常用数据的查询速度。垂直分割提高了一些操作的速度,但也可能使某些操作不得不执行连接操作,从而降低了效率。因此,决定是否进行垂直分割取决于是否垂直分割后数据库上的所有操作的总效率得到了提高。同时,垂直分割还要确保无损连接和保持函数依赖。

3 节省存储空间
  尽管随着硬件技术的发展,提供给用户使用的存储空间越来越大,但毕竟是有限的,而数据库,尤其是一型的数据库,需要占用的存储空间比较大。因此,节省存储空间仍是数据库设计中要考虑的问题。为此,在数据库优化设计中,可采取以下措施:

3.1 缩小每个属性占用的空间
  一般用编码表示属性,用缩写名代替全称,可以节省存储空间,但用户看起来就不那么直观了,须根据实际条件斟酌决定。

3.2 采用假属性
  在有些关系中,某些数据会多次出现,采用假属性可以减少重复数据占用的存储空间。例如:在职工关系中,职工的经济状况这一属性,通常由职工号决定。一个大型企业的职工人数较多。如每一个职工逐一填写经济状况,就要占用较多的空间,而其经济状况有相同的和相似的情况,也即,经济状况这一属性不同值比较少,而在关系中可能有较多的重复。为此,可把经济状况分为几种类型,用类型代替原来的经济状况(这类经济状况的类型就是假属性),另外建立一个较小的关系来描述每种经济状况的具体内容。这样,可大大减小数据占用存储空间的用量。
4 结 语  
数据库设计不同于数学问题,他是一项综合性工作,受到各种各样因素的制约,有些要求往往是彼此矛盾的。因此,设计结果常常是有得有失。因此,设计者必须根据实际情况,综合应用上述技术,在基本合理的总体设计的基础上,做一些优化调整,力求最大限度地满足用户各种各样的要求,实现数据库的优化设计。

1.3 模式分解的2条原则  关系规范化是可以解决关系操作的问题,但进行模式分解时由于受到数据间的相互约束,因此分解不可能是随意的。在规范化化的关系分解过程中,不仅要着眼于提高关系的范式等级,而且应遵守以下2条原则:

  (1)无损分解原则 无损分解就是在关系分解过程中,既不丢失数据也不增加数据,同时还能保持原有的函数依赖。一个关系分解为多个关系,原来的数据就存储到多个关系中,起码要求分解后不能丢失原来的信息。

  (2)相互独立原则 所谓独立是指分解后的新关系之间相互独立,对一个关系内容的修改不应该影响到另一关系。

  此外还应注意到,关系分解必须从实际出发,并不是范式等级越高,分解得越细就越好。若把关系分解得过于琐碎,虽然对于消除数据冗余和更新异常等有好处,但在进行检索操作时往往又需要进行链接,从而使检索效率大大降低。另外,在数据操作中经常是检索操作多于更新操作,其结果很可能是分解带来的好处与检索的效率降低相比,得不偿失。正因为如此,一般规范化只需达到3NF就可以了。
<!---->

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics