时间:2022-11-16 04:30:01 | 来源:信息时代
时间:2022-11-16 04:30:01 来源:信息时代
数据库规范化设计 : 为建立结构更合理的关系数据库,消除存储异常,减少数据冗余,便于插入、删除和更新等操作,将初步设计得到的关系集合转化为满足一定条件的关系集合的过程。满足范式要求的数据库设计将为得到结构清晰的,同时可避免数据冗余和操作异常的数据库奠定基础。规范化设计主要基于规范化理论,利用形式化方法,基于主键和函数依赖的关系,对逻辑数据模型进行分解,确保设计所得的数据模型结构合理。所采用的手段是在数据模型满足不同规则的前提下,使数据模型具有最小的冗余和最大的稳定性,避免非规范化数据库中的数据更新异常,分解之后的关系模式相对原来的关系模式降低了部分完整性约束。规范化过程是模型化和设计关系数据库的重要环节。
一般而言,范式作为指导性原则提供了一种理论的依据,数据库的逻辑设计(包括各种表和表间关系)是优化关系数据库的核心。
关系模式规范化设计的基本思想是通过对关系模式进行分解,用一组等价的关系子模式来代替原有的关系模式,消除数据依赖(包括函数依赖和多值依赖)中不合理的部分,分解后的关系模式集合应当与原关系模式“等价”,一个关系仅描述一个实体或者一种实体间的联系。这一过程必须在保证无损连接性、保持函数依赖性的前提下进行,即确保不破坏原有数据信息,并可将分解后的关系通过自然连接恢复原关系而不丢失信息,并保持属性间合理的联系。
数据库规范化设计的特征就是使用正规的方法来将数据分为多个相关的表。拥有大量窄表(列较少的表)是规范化数据库的特征,而拥有少量宽表(列较多的表)是非规范化数据库的特征。
范式是数据库被规范化程度或深度的一种衡量方法。范式主要有: 第一范式、第二范式、第三范式、Boyce-Codd范式、第四范式、第五范式。规范化处理有一个初始需求,即实体中的每个实例都必须有一个唯一的标识或主键,对于产品系统来说,通常只到第三范式。从第三范式往上,对其使用通常在应用程序中看不到价值或成效。第三范式是标准的,第三范式之上的范式的概念可能会用在特殊的场合中来解决特殊的问题。
规范设计的基本规则遵从概念单一化“一事一表”原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。基本原则: 每一个表必须有主键; 表应该只存储单一类型实体的数据,试图在表中存储过多的信息会妨碍对表的数据进行有效、可靠的管理;表应避免可为空的列。
表中的列可定义为允许空值。尽管在个别情况下,允许空值有用,但是最好少用空值,因为空值需要进行特殊的处理,这样会增加数据操作的复杂性。如果某一表中有几个可为空的列,并且列中的几行有空值,则应考虑将这些列置于链接到主表的其他表中。将数据存储在两个独立的表中可使主表的设计更为简单; 一个表内不应有重复的行或重复的列。
规范化的缺点是由于分解产生了许多新表,每个表有相对较少的列,且这些列必须使用主键/外键关系连接起来,以便将信息一起返回给用户使用。分解表有两个重要影响: 第一是性能,合并数据需要的连接减慢了处理速度并加重了硬件负担; 第二是增加了开发者编写查询代码并返回所需信息的难度,如果表没有正确地连接,那么关系数据库就有可能返回笛卡儿积,从而造成许多无用结果。
反规范化(denormalization)设计的基本思想是出于数据库性能原因对规范化数据库的再考虑,适当地降低规范化程度,甚至抛弃关系模式的范式,修改表结构以允许存在一些冗余数据。现实世界并不总是依从于某一完美的数学化的关系模式,强制性地对事物进行规范化设计,形式上显得简单化,内容上趋于复杂化,更重要的是导致数据库运行效率的降低。反规范化不再要求一个表只描述一个实体或者实体间的一种联系。其主要目的在于提高数据库的运行效率。但反规范化也是有代价的,在反规范化的数据库中,数据冗余不断增长,当一个数据库被反规范化时,必须考虑如何管理冗余数据。