资源描述:
《规范化-数据库设计原则》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、规范化-数据库设计原则关系数据库设计的核心问题是关系模型的设计。本文将结合具体的实例,介绍数据库设计规范化的流程。摘要关系型数据库是当前广泛应用的数据库类型,关系数据库设计是对数据进行组织化和结构化的过程,核心问题是关系模型的设计。对于数据库规模较小的情况,我们可以比较轻松的处理数据库中的表结构。然而,随着项目规模的不断增长,相应的数据库也变得更加复杂,关系模型表结构更为庞杂,这时我们往往会发现我们写出来的SQL语句的是很笨拙并且效率低下的。更糟糕的是,由于表结构定义的不合理,会导致在更新数据时造成数据的不完整。因此,就有必要学习和掌握数据库的规范化流程,以指导我们更好的设计数
2、据库的表结构,减少冗余的数据,借此可以提高数据库的存储效率,数据完整性和可扩展性。本文将结合具体的实例,介绍数据库规范化的流程。序言本文的目的就是通过详细的实例来阐述规范化的数据库设计原则。在DB2中,简洁、结构明晰的表结构对数据库的设计是相当重要的。规范化的表结构设计,在以后的数据维护中,不会发生插入(insert)、删除(delete)和更新(update)时的异常。反之,数据库表结构设计不合理,不仅会给数据库的使用和维护带来各种各样的问题,而且可能存储了大量不需要的冗余信息,浪费系统资源。要设计规范化的数据库,就要求我们根据数据库设计范式――也就是数据库设计的规范原则来做
3、。但是一些相关材料上提到的范式设计,往往是给出一大堆的公式,这给设计者的理解和运用造成了一定的困难。因此,本文将结合具体形象的例子,尽可能通俗化地描述三个范式,以及如何在实际工程中加以优化应用。规范化在设计和操作维护数据库时,关键的步骤就是要确保数据正确地分布到数据库的表中。使用正确的数据结构,不仅便于对数据库进行相应的存取操作,而且可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等)。正确进行表设计的正式名称就是"数据库规范化"。后面我们将通过实例来说明具体的规范化的工程。关于什么是范式的定义,请参考附录文章1.数据冗余数据应该尽可能少地冗余,这意味着重复数据应该减少
4、到最少。比如说,一个部门雇员的电话不应该被存储在不同的表中,因为这里的电话号码是雇员的一个属性。如果存在过多的冗余数据,这就意味着要占用了更多的物理空间,同时也对数据的维护和一致性检查带来了问题,当这个员工的电话号码变化时,冗余数据会导致对多个表的更新动作,如果有一个表不幸被忽略了,那么就可能导致数据的不一致性。规范化实例为了说明方便,我们在本文中将使用一个SAMPLE数据表,来一步一步分析规范化的过程。首先,我们先来生成一个的最初始的表。CREATETABLE"SAMPLE"("PRJNUM"INTEGERNOTNULL,"PRJNAME"VARCHAR(200),"EMYN
5、UM"INTEGERNOTNULL,"EMYNAME"VARCHAR(200),"SALCATEGORY"CHAR(1),"SALPACKAGE"INTEGER)IN"USERSPACE1";ALTERTABLE"SAMPLE"ADDPRIMARYKEY("PRJNUM","EMYNUM");InsertintoSAMPLE(PRJNUM,PRJNAME,EMYNUM,EMYNAME,SALCATEGORY,SALPACKAGE)values(100001,'TPMS',200001,'Johnson','A',2000),(100001,'TPMS',200002,'Chri
6、stine','B',3000),(100001,'TPMS',200003,'Kevin','C',4000),(100002,'TCT',200001,'Johnson','A',2000),(100002,'TCT',200004,'Apple','B',3000);表1-1考察表1-1,我们可以看到,这张表一共有六个字段,分析每个字段都有重复的值出现,也就是说,存在数据冗余问题。这将潜在地造成数据操作(比如删除、更新等操作)时的异常情况,因此,需要进行规范化。第一范式参照范式的定义,考察上表,我们发现,这张表已经满足了第一范式的要求。1、因为这张表中字段都是单一属性的,
7、不可再分;2、而且每一行的记录都是没有重复的;3、存在主属性,而且所有的属性都是依赖于主属性;4、所有的主属性都已经定义事实上在当前所有的关系数据库管理系统(DBMS)中,都已经在建表的时候强制满足第一范式。因此,这张SAMPLE表已经是一张满足第一范式要求的表。考察表1-1,我们首先要找出主键。可以看到,属性对是主键,其他所有的属性都依赖于该主键。从一范式转化到二范式根据第二范式的定义,转化为二范式就是消除部分依赖。考察表1-1,