数据库规范化和反规范化设计.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库规范化和反规范化设计

数据库规范化和反规范化设计   摘要:数据库规范化是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。但在实际应用中,数据库的规范化会使查询时连接表操作增加,性能降低,所以常常对数据库进行反规范化处理。本文主要讲述数据库设计中常用的规范化和反规范化方法。 关键词:数据库设计;规范化;反规范化 中图分类号:TP311.13 文献标识码:A 文章编号:1674-7712 (2013) 02-0061-01 一、引言 作为应用程序设计的基础,数据库设计自身的性能可以对应用程序的性能造成直接的影响。关系数据库设计是对数据进行组织化和结构化的过程,核心是关系模式的设计。 目前,在指导关系模式的设计中规范化设计处于主导的地位,这是数据库数十年地发展中产生并得到广泛应用的结果。但数据库的规范化使得查询越来越复杂,对数据的查询性能有较大影响,所以近年来这一领域出现了一种新的趋势,一种称为非规范化的关系模式设计引起业界的关注并已在一定的范围内得到应用。 二、数据库的规范化设计 (一)范式概述。一般情况下我们将关系模式进行分解,用等价的关系子模式来取代原有的关系模式,以此来去除数据依赖中不合理的部分,这就是关系模式规范化设计的基本思想。这一过程必须在连接、函数依赖都不受到影响的前提下进行,也就是说必须确保原有数据的完整性,而且分解后的关系通过自然联接也可以使原有关系复原。 规范化设计的过程就是按不同的范式,将一个二维表不断地分解成多个二维表并建立表之间的关联,最终达到一个表只描述一个实体或者实体间联系的目标。目前遵循的主要范式包括1NF、2NF、3NF、BCNF、4NF和5NF等几种。在工程中3NF、BCNF应用最广泛,推荐采用 3NF作为标准。 (二)1NF。1NF是关系模式的最低要求,是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复属性,就可能需要定义一个新的实体,新的实体由重复属性构成,新实体与原实体之间为一对多关系。 (三)2NF。满足2NF必须先满足1NF。2NF要求实体的属性完全依赖于主关键字。所谓完全依赖是指不存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。 (四)3NF。满足3NF必须先满足2NF。3NF要求实体的每个非主属性都不传递依赖于关系模式的关键字,即要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 三、数据库的反规范化设计 (一)反规范化的必要性。数据库规范化可有效地避免数据的冗余,保持数据库的完整性,提高系统的性能,但在查询过程中,连接操作较为复杂,这样就要占用较多的CPU资源和输入输出操作,会导致复杂度的增加和性能的下降,这样一来便会使得查询速度降低。有时为了提高某些查询或应用的性能便会破坏规范化,特别在网络环境中,有必要对规范化进行必要的平衡,使系统有最优的性能,提高数据库的网络性能,即反规范。 (二)常用的反规范技术。1.增加冗余列。有时候我们可以通过在其中一个表上增加若干冗余列,来避免两个或多个表在需要连接时之间的连接过于频繁。但它需要较多的磁盘空间,同时增加工作量来进行表的维护。2.增加派生列。派生列是将表中的其它多个列计算所得到的,增加派生列可有效地减少统计运算,大大缩短我们在进行数据汇总时的运算时间。同样的,派生列也具有冗余列的缺点。3.重新组表。重新组表指在我们需要查看两个表连接出来的结果数据时,通过重组表来减少连接从而提高性能。但这样一来便会消耗更多的磁盘空间,也会损失数据在概念上的独立性。4.分割表。表分割包括水平分割和垂直分割。将一个表按照行分割为多个表称之为水平分割。水平分割一般运用在以下情况:表很大,进行水平分割后可以降低在查询时涉及到的数据和索引的页数及层数,进而提高查询的速度;表中的数据具有独立性,例如表中记录不同地区或不同时期的数据,这些数据有些常用有些不常用;需要把数据保存到多个介质上。水平分割增加应用的复杂度,在查询时需要多个表名,查询数据需要union操作。在数据库应用中,这种复杂性往往会超过它自身的优点,因为只要我们索引的关键字不大,将索引应用于查询时,随着表中数据量增加两到三倍,也就会增加读一个索引层的磁盘次数。 对于一个列很多的表,假如某些列的访问率明显高于其它列,就可以将它们和主键作为一个表,将其它列和主键作为另外一个表,这就称为垂直分割。垂直分割可以减少数据行,这样一来,一个数据页就能存放更多的数据,查询时就会减少I/O次数。垂直分割的缺点是需要管理冗余列,查询数据需要join

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档