数据库设计规范化的五个要求
数据库建设规范

数据库建设规范目录1. 前言 (2)2. 范围 (2)3. 术语和定义 (2)3.1范式 (2)3.2关联 (3)3.3关系模型 (3)3.4视图 (3)3.5外键 (3)3.6约束 (3)3.7主键 (3)4. 命名规范 (4)4.1规范约定 (4)4.2表名 (4)4.3视图 (4)4.4存储过程 (4)4.5函数 (4)4.6触发器 (4)4.7字段 (5)4.8索引 (5)5. 数据库建设过程规范 (5)5.1概述 (5)5.2需求分析阶段 (6)5.2.1需求调查 (6)5.2.2内容分析 (6)5.3概念结构设计阶段 (7)5.2.1定义实体 (7)5.3.3定义关系 (7)5.3.4定义属性 (7)5.3.5定义键 (8)5.3.6定义索引 (8)5.3.7定义其他对象和规则 (9)5.4逻辑结构设计阶段 (9)5.5数据库物理设计阶段 (10)5.6实施、运行、维护规范 (10)6. 数据库建设安全性规范 (11)6.1概述 (11)6.2完整性设计 (11)6.3物理安全 (13)6.4访问控制 (13)6.5数据备份 (14)1. 前言数据库技术是信息资源管理最有效的手段。
数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。
本规范通过数据建库的命名、结构、建库过程及安全性措施等几个技术方面进行约定,目的就是提供一套规范、合理、科学的建库技术体系,应用系统提供建库技术参考。
2. 范围本规范主要从关系数据库的命名、关系和结构以及建设过程等几个方面来规定数据库设计应遵循的规范。
3. 术语和定义3.1范式关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。
满足最低要求的叫第一范式,简称1NF。
在第一范式中满足进一步要求的为第二范式,其余以此类推。
一般而言,数据库的设计应至少满足第三范式。
3.2关联关联是不同表之间的数据彼此联系的方法。
数据库表结构设计3篇

数据库表结构设计第一篇:数据库表结构设计的基本原则在进行数据库表结构设计时,我们需要遵循一些基本的原则,以确保数据的存储、查询和维护都能够高效地进行。
1. 数据表的命名应该具有描述性数据表的命名应该具有描述性,能够清晰地表达其所存储的数据内容。
一般来说,我们可以采用名词或者名词短语进行命名。
2. 字段的命名应该具有描述性同样,字段的命名也应该具有描述性,能够清晰地表达其所存储的数据内容。
一般来说,我们可以采用名词或者名词短语进行命名。
3. 数据库表要符合规范化要求规范化是指将数据按照特定的规则进行分解和组织,以达到减少冗余、消除数据插入、删除和更新异常等目的。
在进行数据库表结构设计时,我们应该尽可能地符合规范化要求。
4. 尽量避免使用具有歧义的列名称在字段的命名中,我们应该尽量避免使用容易产生歧义的列名称,例如“state”,这个单词既可以表示州,也可以表示状态。
5. 尽量避免使用大量的空间占用数据类型选择合适的数据类型可以有效地优化数据库的性能。
在进行数据库表结构设计时,应该尽量避免使用大量的空间占用数据类型,例如“text”类型。
6. 尽量避免冗余数据冗余数据指的是相同的数据在不同的表中多次出现。
在进行数据库表结构设计时,应该尽量避免冗余数据,尽量采用关联表的方式进行数据存储。
7. 考虑表的扩展性在进行数据库表结构设计时,应该考虑表的扩展性。
我们可以在表中添加扩展字段,或者将不同的数据类型存储在不同的表中,以支持表的扩展。
以上就是数据库表结构设计的基本原则。
在进行数据库表结构设计时,我们应该尽量遵循这些原则,以为我们的数据库系统奠定坚实的基础。
数据库设计原则

4。
3.1数据库设计原则
数据库设计的基本原则是在系统总体信息方案的指导下,各个库应当为它所支持的管理目标服务,在设计数据库系统时,应当重点考虑以下几个因素:
1、数据库必须层次分明,布局合理.
2、数据库必须高度结构化,保证数据的结构化,规范化和标准化,这是建立数据库和进行信息交换的基础。
数据结构的设计应该遵循国家标准和行业标准,尤其要重视编码的应用。
3、在设计数据库的时候,一方而要尽可能地减小冗余度,减小存储空间的占用,降低数据一致性问题发生的可能性,另一方面,还要考虑适当的冗余,以提高运行速度和降低开发难度。
4、必须维护数据的正确性和一致性。
在系统中,多个用户共享数据库,由于并发操作,可能影响数据的一致性。
因此必须用“锁”等办法保证数据的一致性。
5、设定相应的安全机制,由于数据库的信息、对特定的用户有特定的保密要求,安全机制必不可少。
数据库规范化理论

数据库规范化理论数据库规范化理论是关系数据库设计中重要的理论基础之一。
它旨在通过分解关系数据库的表,消除冗余数据以及确保数据一致性和完整性,从而提高数据库的性能和可维护性。
数据库规范化理论的基本概念包括函数依赖、正则化和范式等。
函数依赖是数据库中的一个关键概念,它描述了一个属性对于另一个属性的依赖关系。
如果一个属性的值取决于另一个属性的值,我们说这两个属性之间存在函数依赖关系。
函数依赖又可以分为完全函数依赖和部分函数依赖。
完全函数依赖是指一个属性对于关系中的任何一个候选键都是完全函数依赖的,而部分函数依赖是指一个属性对于关系中的某个候选键是部分函数依赖的。
基于函数依赖的概念,数据库规范化理论提出了正则化的概念,旨在将关系数据库分解成更小的、更简单的关系,以减少数据冗余和提高数据一致性。
正则化的过程可以通过不同的范式来描述,如第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。
第一范式要求关系数据库中的所有属性都是原子的,即不可再分的。
第二范式要求关系中的每个非主属性完全依赖于主属性,而不是局部依赖于主属性。
第三范式要求关系中的每个非主属性不依赖于其他非主属性。
通过数据库规范化,可以消除数据冗余,减少数据存储空间的使用,并提高数据的一致性和完整性。
规范化还可以简化数据库的设计和维护过程,并提高数据库的性能。
但是,过度规范化可能会导致查询变得复杂,影响查询性能。
因此,在进行数据库规范化时,需要综合考虑数据的使用情况和查询优化的需求。
总之,数据库规范化理论是关系数据库设计中的重要理论基础,通过消除冗余数据、确保数据一致性和完整性,提高数据库的性能和可维护性。
正确应用数据库规范化理论可以设计出高效、可扩展和易于维护的关系数据库。
数据库的设计方法、规范与技巧

数据库的设计⽅法、规范与技巧⼀、数据库设计过程 数据库技术是信息资源管理最有效的⼿段。
数据库设计是指对于⼀个给定的应⽤环境,构造最优的数据库模式,建⽴数据库及其应⽤系统,有效存储数据,满⾜⽤户信息要求和处理要求。
数据库设计中需求分析阶段综合各个⽤户的应⽤需求(现实世界的需求),在概念设计阶段形成独⽴于机器特点、独⽴于各个DBMS产品的概念模式(信息世界模型),⽤E-R图来描述。
在逻辑设计阶段将E-R图转换成具体的数据库产品⽀持的数据模型如关系模型,形成数据库逻辑模式。
然后根据⽤户处理的要求,安全性的考虑,在基本表的基础上再建⽴必要的视图(VIEW)形成数据的外模式。
在物理设计阶段根据DBMS特点和处理的需要,进⾏物理存储安排,设计索引,形成数据库内模式。
1. 需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。
需求分析的重点是调查、收集与分析⽤户在数据管理中的信息要求、处理要求、安全性与完整性要求。
需求分析的⽅法:调查组织机构情况、调查各部门的业务活动情况、协助⽤户明确对新系统的各种要求、确定新系统的边界。
常⽤的调查⽅法有:跟班作业、开调查会、请专⼈介绍、询问、设计调查表请⽤户填写、查阅记录。
分析和表达⽤户需求的⽅法主要包括⾃顶向下和⾃底向上两类⽅法。
⾃顶向下的结构化分析⽅法(Structured Analysis,简称SA⽅法)从最上层的系统组织机构⼊⼿,采⽤逐层分解的⽅式分析系统,并把每⼀层⽤数据流图和数据字典描述。
数据流图表达了数据和处理过程的关系。
系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。
数据字典是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,⽽不是数据本⾝。
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分(⾄少应该包含每个字段的数据类型和在每个表内的主外键)。
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度, 取值范围,取值含义,与其他数据项的逻辑关系} 数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}} 数据流描述={数据流名,说明,数据流来源,数据流去向, 组成:{数据结构},平均流量,⾼峰期流量} 数据存储描述={数据存储名,说明,编号,流⼊的数据流,流出的数据流, 组成:{数据结构},数据量,存取⽅式} 处理过程描述={处理过程名,说明,输⼊:{数据流},输出:{数据流}, 处理:{简要说明}} 2. 概念结构设计阶段 通过对⽤户需求进⾏综合、归纳与抽象,形成⼀个独⽴于具体DBMS的概念模型,可以⽤E-R图表⽰。
数据库的规范化及反规范化设计

数据库的规范化及反规范化设计摘要:数据库规范化是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。
但在实际应用中,数据库的规范化会使查询时连接表操作增加,性能降低,所以常常对数据库进行反规范化处理。
本文主要讲述数据库设计中常用的规范化和反规范化方法。
关键词:数据库设计;规范化;反规范化中图分类号:tp311.13 文献标识码:a 文章编号:1674-7712 (2013) 02-0061-01一、引言作为应用程序设计的基础,数据库设计自身的性能可以对应用程序的性能造成直接的影响。
关系数据库设计是对数据进行组织化和结构化的过程,核心是关系模式的设计。
目前,在指导关系模式的设计中规范化设计处于主导的地位,这是数据库数十年地发展中产生并得到广泛应用的结果。
但数据库的规范化使得查询越来越复杂,对数据的查询性能有较大影响,所以近年来这一领域出现了一种新的趋势,一种称为非规范化的关系模式设计引起业界的关注并已在一定的范围内得到应用。
二、数据库的规范化设计(一)范式概述。
一般情况下我们将关系模式进行分解,用等价的关系子模式来取代原有的关系模式,以此来去除数据依赖中不合理的部分,这就是关系模式规范化设计的基本思想。
这一过程必须在连接、函数依赖都不受到影响的前提下进行,也就是说必须确保原有数据的完整性,而且分解后的关系通过自然联接也可以使原有关系复原。
规范化设计的过程就是按不同的范式,将一个二维表不断地分解成多个二维表并建立表之间的关联,最终达到一个表只描述一个实体或者实体间联系的目标。
目前遵循的主要范式包括1nf、2nf、3nf、bcnf、4nf和5nf等几种。
在工程中3nf、bcnf应用最广泛,推荐采用 3nf作为标准。
(二)1nf。
1nf是关系模式的最低要求,是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
如果出现重复属性,就可能需要定义一个新的实体,新的实体由重复属性构成,新实体与原实体之间为一对多关系。
掌握数据库设计的原则与技巧

掌握数据库设计的原则与技巧在当今数字化的时代,数据已经成为企业和组织运营的核心资产之一。
而数据库作为存储和管理数据的关键工具,其设计的合理性和有效性直接影响着系统的性能、可扩展性和数据的完整性。
因此,掌握数据库设计的原则与技巧对于开发高质量的应用程序和确保数据的高效管理至关重要。
数据库设计的原则1、数据完整性数据完整性是指确保数据库中的数据准确、一致和可靠。
这包括实体完整性(确保表中的每行都有唯一的标识符)、参照完整性(确保表之间的关系正确)和域完整性(确保数据的值在预定义的范围内)。
例如,在一个学生成绩管理系统中,学生表中的学号必须是唯一的,课程表中的课程编号也必须是唯一的。
同时,成绩表中的成绩必须在 0 到 100 之间。
2、数据一致性数据一致性是指在数据库的不同部分和不同操作中,数据保持相同的含义和格式。
为了实现数据一致性,需要在设计时定义明确的数据规则和约束条件。
比如,在一个库存管理系统中,如果一个商品被出库,那么库存数量应该相应地减少,而且在任何查询库存的操作中,都应该得到相同的准确数量。
3、最小冗余冗余数据是指在数据库中多次重复存储相同的信息。
过多的冗余会导致数据不一致、存储空间浪费和更新操作的复杂性增加。
然而,在某些情况下,适当的冗余可以提高查询性能。
例如,在一个订单管理系统中,可以在订单详情表中存储商品的名称和价格,而不是每次查询都从商品表中获取,这样可以减少表连接的操作,但需要确保在商品信息发生变化时能够及时更新。
4、可扩展性设计的数据库应该能够轻松适应未来数据量的增长和业务需求的变化。
这意味着在设计时要考虑到可能的扩展方向,例如添加新的表、字段或关系。
例如,如果一个电商平台预计未来会增加新的商品类别,那么在设计数据库时应该预留足够的灵活性,以便能够方便地添加相关的表和字段。
5、性能优化数据库的性能是设计时需要重点考虑的因素之一。
这包括合理选择数据类型、创建合适的索引、优化查询语句等。
数据库设计中的冗余与规范化

数据库设计中的冗余与规范化随着信息化的深入,数据库已经成为企业信息化建设的重要组成部分。
在数据库设计中,冗余与规范化是两个核心概念。
本文将从这两个方面出发,为大家详细解析。
一、冗余冗余(Redundancy)在数据库中指的是重复信息的存储。
由于冗余造成的数据重复不仅浪费存储空间,而且容易导致数据不一致。
如何避免冗余就成为了数据库设计的关键。
冗余主要有以下两种:1.数据存储冗余数据存储冗余是指在数据库中,同样的数据被存储多次。
例如,在一张订单表中,同一个商品信息被多次存储,由于商品信息发生变化,可能会造成数据不一致的情况。
为了避免数据存储冗余,我们可以采用外键约束。
例如,在订单表中存储商品信息的时候,可以采用关联技术,存储商品的编号,而不是存储商品的详细信息。
这样,在订单表和商品表中,就不会出现重复存储同一件商品信息的情况。
2.数据计算冗余数据计算冗余是指将计算结果存储到数据库中,造成数据重复的情况。
例如,在订单表中,存储订单金额和商品价格,如果商品价格被修改了,订单金额却没有及时更新,就可能会导致数据不一致的情况。
为了避免数据计算冗余,我们可以采用视图技术。
例如,在订单表和商品表之间创建一张视图,通过关联查询得出订单金额,而不是将订单金额存储在订单表中。
二、规范化规范化(Normalization)是一种消除冗余的方法,通过将一个大的表拆分成多个小表,从而提高数据库的数据完整性和一致性。
规范化中一般指的是关系数据库规范化,可分为一到五阶段。
1.第一范式(1NF)第一范式,是指数据库表中的每一列(属性)都是最小单位的不可分割的数据项。
例如,在一张订单表中,如果包含了商品名称这个列,那么商品名称这个列就需要拆分成商品编号和商品名称两个独立的列。
2.第二范式(2NF)第二范式,是指数据库表中的每个非主键列都必须完全依赖于主键。
例如,在一张订单表中,如果商品表中的商品名称和商品价格与订单表的订单日期和客户姓名直接相关,而不是与商品编号相关,那么应该将商品名称和商品价格从订单表中移除,建立一个独立的商品表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库设计规范化的五个要求通常情况下,可以从两个方面来判断数据库是否设计的比较规范。
一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。
若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的。
当然这是两个泛泛而谈的指标。
为了达到数据库设计规范化的要求,一般来说,需要符合以下五个要求。
要求一:表中应该避免可为空的列。
虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。
数据库在处理的时候,需要进行特殊的处理。
如此的话,就会增加数据库处理记录的复杂性。
当表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多。
所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免。
若确实需要的话,我们可以通过一些折中的方式,来处理这些空字段,让其对数据库性能的影响降低到最少。
一是通过设置默认值的形式,来避免空字段的产生。
如在一个人事管理系统中,有时候身份证号码字段可能允许为空。
因为不是每个人都可以记住自己的身份证号码。
而在员工报到的时候,可能身份证没有带在身边。
所以,身份证号码字段往往不能及时提供。
为此,身份证号码字段可以允许为空,以满足这些特殊情况的需要。
但是,在数据库设计的时候,则可以做一些处理。
如当用户没有输入内容的时候,则把这个字段的默认值设置为 或者为 。
以避免空字段的产生。
二是若一张表中,允许为空的列比较多,接近表全部列数的三分之一。
而且,这些列在大部分情况下,都是可有可无的。
若数据库管理员遇到这种情况,笔者建议另外建立一张副表,以保存这些列。
然后通过关键字把主表跟这张副表关联起来。
将数据存储在两个独立的表中使得主表的设计更为简单,同时也能够满足存储空值信息的需要。
要求二:表不应该有重复的值或者列。
如现在有一个进销存管理系统,这个系统中有一张产品基本信息表中。
这个产品开发有时候可以是一个人完成,而有时候又需要多个人合作才能够完成。
所以,在产品基本信息表产品开发者这个字段中,有时候可能需要填入多个开发者的名字。
如进销存管理中,还需要对客户的联系人进行管理。
有时候,企业可能只知道客户一个采购员的姓名。
但是在必要的情况下,企业需要对客户的采购代表、仓库人员、财务人员共同进行管理。
因为在订单上,可能需要填入采购代表的名字 可是在出货单上,则需要填入仓库管理人员的名字等等。
为了解决这个问题,有多种实现方式。
但是,若设计不合理的话在,则会导致重复的值或者列。
如我们也可以这么设计,把客户信息、联系人都放入同一张表中。
为了解决多个联系人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等。
若还有第三联系人、第四联系人等等,则往往还需要加入更多的字段。
可是这么设计的话,会产生一系列的问题。
如客户的采购员流动性比较大,在一年内换了六个采购员。
此时,在系统中该如何管理呢 难道就建立六个联系人字段 这不但会导致空字段的增加,还需要频繁的更改数据库表结构。
明显,这么做是不合理的。
也有人说,可以直接修改采购员的名字呀。
可是这么处理的话,会把原先采购订单上采购员的名字也改变了。
因为采购单上客户采购员信息在数据库中存储的不是采购员的名字,而只是采购员对应的一个编号。
在编号不改而名字改变了的情况下,采购订单上显示的就是更改后的名字。
这不利于时候的追踪。
所以,在数据库设计的时候要尽量避免这种重复的值或者列的产生。
笔者建议,若数据库管理员遇到这种情况,可以改变一下策略。
如把客户联系人另外设置一张表。
然后通过客户 把供应商信息表跟客户联系人信息表连接起来。
也就是说,尽量将重复的值放置到一张独立的表中进行管理。
然后通过视图或者其他手段把这些独立的表联系起来。
要求三:表中记录应该有一个唯一的标识符。
在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个 号来唯一的标识行记录,而不要通过名字、编号等字段来对纪录进行区分。
每个表都应该有一个 列,任何两个记录都不可以共享同一个 值。
另外,这个 值最好有数据库来进行自动管理,而不要把这个任务给前台应用程序。
否则的话,很容易产生 值不统一的情况。
另外,在数据库设计的时候,最好还能够加入行号。
如在销售订单管理中, 号是用户不能够维护的。
但是,行号用户就可以维护。
如在销售订单的行中,用户可以通过调整行号的大小来对订单行进行排序。
通常情况下, 列是以 为单位递进的。
但是,行号就要以 为单位累进。
如此,正常情况下,行号就以 、 、 依次扩展下去。
若此时用户需要把行号为 的纪录调到第一行显示。
此时,用户在不能够更改列的情况下,可以更改行号来实现。
如可以把行号改为 ,在排序时就可以按行号来进行排序。
如此的话,原来行号为 的纪录现在行号变为了 ,就可以在第一行中显示。
这是在实际应用程序设计中对 列的一个有效补充。
这个内容在教科书上是没有的。
需要在实际应用程序设计中,才会掌握到这个技巧。
要求四:数据库对象要有统一的前缀名。
一个比较复杂的应用系统,其对应的数据库表往往以千计。
若让数据库管理员看到对象名就了解这个数据库对象所起的作用,恐怕会比较困难。
而且在数据库对象引用的时候,数据库管理员也会为不能迅速找到所需要的数据库对象而头疼。
为此,笔者建立,在开发数据库之前,最好能够花一定的时间,去制定一个数据库对象的前缀命名规范。
如笔者在数据库设计时,喜欢跟前台应用程序协商,确定合理的命名规范。
笔者最常用的是根据前台应用程序的模块来定义后台数据库对象前缀名。
如跟物料管理模块相关的表可以用 为前缀 而以订单管理相关的,则可以利用 作为前缀。
具体采用什么前缀可以以用户的爱好而定义。
但是,需要注意的是,这个命名规范应该在数据库管理员与前台应用程序开发者之间达成共识,并且严格按照这个命名规范来定义对象名。
其次,表、视图、函数等最好也有统一的前缀。
如视图可以用 为前缀,而函数则可以利用 为前缀。
如此数据库管理员无论是在日常管理还是对象引用的时候,都能够在最短的时间内找到自己所需要的对象。
要求五:尽量只存储单一实体类型的数据。
这里将的实体类型跟数据类型不是一回事,要注意区分。
这里讲的实体类型是指所需要描述对象的本身。
笔者举一个例子,估计大家就可以明白其中的内容了。
如现在有一个图书馆里系统,有图书基本信息、作者信息两个实体对象。
若用户要把这两个实体对象信息放在同一张表中也是可以的。
如可以把表设计成图书名字、图书作者等等。
可是如此设计的话,会给后续的维护带来不少的麻烦。
如当后续有图书出版时,则需要为每次出版的图书增加作者信息,这无疑会增加额外的存储空间,也会增加记录的长度。
而且若作者的情况有所改变,如住址改变了以后,则还需要去更改每本书的记录。
同时,若这个作者的图书从数据库中全部删除之后,这个作者的信息也就荡然无存了。
很明显,这不符合数据库设计规范化的需求。
遇到这种情况时,笔者建议可以把上面这张表分解成三种独立的表,分别为图书基本信息表、作者基本信息表、图书与作者对应表等等。
如此设计以后,以上遇到的所有问题就都引刃而解了。
以上五条是在数据库设计时达到规范化水平的基本要求。
除了这些另外还有很多细节方面的要求,如数据类型、存储过程等等。
而且,数据库规范往往没有技术方面的严格限制,主要依靠数据库管理员日常工作经验的累积。
数据库设计中的反规范技术探讨数据库设计简述数据库设计是把现实世界的商业模型与需求转换成数据库的模型的过程,它是建立数据库应用系统的核心问题。
设计的关键是如何使设计的数据库能合理地存储用户的数据,方便用户进行数据处理。
数据库设计完全是人的问题,而不是数据库管理系统的问题。
系统不管设计是好是坏,照样运行。
数据库设计应当由数据库管理员和系统分析员一起和用户一道工作,了解各个用户的要求,共同为整个数据库做出恰当的、完整的设计。
数据库及其应用的性能和调优都是建立在良好的数据库设计的基础上,数据库的数据是一切操作的基础,如果数据库设计不好,则其它一切调优方法提高数据库性能的效果都是有限的。
数据的规范化范式概述规范化理论是研究如何将一个不好的关系模式转化为好的关系模式的理论,规范化理论是围绕范式而建立的。
规范化理论认为,一个关系数据库中所有的关系,都应满足一定的规范 约束条件 。
规范化理论把关系应满足的规范要求分为几级,满足最低要求的一级叫做第一范式 ,在第一范式的基础上提出了第二范式 ,在第二范式的基础上又提出了第三范式 ,以后又提出了 范式, , 。
范式的等级越高,应满足的约束集条件也越严格。
规范的每一级别都依赖于它的前一级别,例如若一个关系模式满足 ,则一定满足 。
下面我们只介绍 , , 范式。
是关系模型的最低要求,它的规则是:每一列必须是原子的,不能分成多个子列。
每一行和列的位置只能有一个值。
不能具有多值列。
例:如果要求一个学生一行,一个学生可选多门课,则下面的“学生”表就不满足 : - - -其中: - 为学号, - 为学生姓名, - 为课程号。
因为一个学生可选多门课,所以列 - 有多个值,所以空不符合 。
规范化就是把它分成如下两个表:“学生”表和“选课”表,则这两个表就都满足 了。
- -- - -对于满足 的表,除满足 外,非主码的列必须依赖于所有的主码,而不是组合主码的一部分。
如果满足 的表的主码只有一列,则它自动满足 。
例:下面的“选课”表,不符合 。
- - - -其中: - 为课程名称。
因为词表的主码是: - - 非主码列 - 依赖于组合主码的一部分 - 所以它不符合 。
对该表规范化也是把它分解成两个表:“选课”表和“课程”表,则它们就都满足 了。
- - -- -的规则是除满足 外,任一非主码列不能依赖于其它非主码列。
例:下面的“课程”表,不符合 。
- - --其中: - 为任课教师号, - 为任课教师姓名。
因为非主码列 - 依赖于另一非主码列 - 所以它不符合 。
其解决办法也是把它分解成两个表:“课程”表和 “教师”表,则它们就都满足 了。
- - -- -小结当一个表是规范的,则其非主码列依赖于主码列。
从关系模型的角度来看,表满足 最符合标准,这样的设计容易维护。
一个完全规范化的设计并不总能生成最优的性能,因此通常是先按照 设计,如果有性能问题,再通过反规范来解决。
数据库中的数据规范化的优点是减少了数据冗余,节约了存储空间,相应逻辑和物理的 次数减少,同时加快了增、删、改的速度,但是对完全规范的数据库查询,通常需要更多的连接操作,从而影响查询的速度。
因此,有时为了提高某些查询或应用的性能而破坏规范规则,即反规范。
数据的反规范反规范的好处是否规范化的程度越高越好 这要根据需要来决定,因为“分离”越深,产生的关系越多,关系过多,连接操作越频繁,而连接操作是最费时间的,特别对以查询为主的数据库应用来说,频繁的连接会影响查询速度。