数据库模式设计中派生属性的处理

时间:2022-06-01 06:01:18

数据库模式设计中派生属性的处理

摘要:关系数据库模式设计的好坏直接影响到整个数据库应用系统的性能,应遵循关系规范化理论,而派生属性是数据库中的衍生数据,是一种特殊属性。阐述了派生属性的四种类型,并用实例详细分析了其存储方式、修改方法及方法的好处,即不分解有派生属性的第二范式关系,运用表触发器修改计算方法简单的派生属性,运用存储过程修改计算方法复杂的派生属性,既避免修改异常,又不会降低数据库修改的效率。

关键词:派生属性;关系模式;关系规范化;数据库设计

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)28-6652-03

随着信息系统在各行各业的蓬勃发展,数据库的应用也越来越广泛,数据库设计的优劣是直接影响整个信息系统性能好坏的重要因素之一。在关系数据库的逻辑结构设计阶段,人们以关系规范化理论为指导,即关系是要满足一定要求的,满足不同程度要求的为不同范式[1]。

关系规范化理论最早是E.F.Codd 在1971 年提出的,后又有人做了扩充,它按照属性间的不同依赖程度分为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC 范式(BCNF)、第四范式(4NF)和第五范式(5NF)。这些范式其实就是一些确定关系模式的规则,而且这些规则是按层次递进分等级的,通过将低级范式的关系进行分解,使其变成高级范式的关系。一般普遍认为,在实际数据库应用中,只需将关系模式分解到3NF[2-6]。

1 关系规范化

定义1(第一范式) 若一个关系R的每个分量(属性)是不可分的数据项,则称此关系R是第一范式的,记为R∈1NF。

实际上1NF是关系模式的基本要求,不满足1NF则不能称之为关系。

在给出更高级范式定义之前,必须先有函数依赖的概念,它是关系模式中属性之间的一种数据依赖关系,文献[1]中给出了其详细定义,在此不再赘述。

定义2(第二范式) 若关系R∈1NF,且每个非主属性完全函数依赖于码,则称R是第二范式的,记为R∈2NF。

定义3(第三范式) 若关系R∈2NF,且不存在非主属性对码的传递函数依赖,则称R是第三范式的,记为R∈3NF。

把1NF的关系分解到2NF,再分解到3NF,实际上是关系模式规范化的过程,目的是要消除1NF、2NF关系的数据冗余、数据插入/删除/修改异常等缺陷,且关系模式的分解应遵循“保持函数依赖”和“无损连接性”的原则,这样才能保证关系中的函数依赖和信息的不丢失,且在减小数据冗余度的同时不会降低数据更新的性能[7]。

关系规范化的基本思想就是逐步消除数据依赖中不合适的部分,使关系模式达到某种程度的分离,即“一事一地”的模式设计原则。其过程可由图1表示。

图1 关系规范化过程

文献[8]通过实例阐述了关系规范化的方法,文献[9]讨论了关系规范化的自动实现。

2 派生属性

一个关系模式是由一些属性所组成,属性之间存在着一些函数依赖。

在实际数据库应用中,存在一些特殊的属性,它们的值是由其他属性的值计算而得到(比如各种统计值),这样的属性称为派生属性或派生列。

很多文献在讨论关系规范化时并没有涉及派生属性,文献[10]虽然讨论了派生属性,但并没有对派生属性的类型、处理方法等进行深入细致的研究。

实际上,派生属性是数据库中的一种衍生数据,根据其值的生成方式可以分为四种类型:

1) 由单个属性派生而出;

2) 由多个属性派生而出;

3) 由其他属性的多个值派生而出;

4) 由其他表属性的多个值派生而出。

关系PROVINCE是关于全国省级行政区的二维表,其中:

AREA_ML是第(1)种派生属性,P_DENSITY是第(2)种派生属性,P_PERCENT是第(3)种派生属性。根据其语义及函数依赖的定义,此关系有函数依赖:

PNAME POPU

PNAME AREA_KM

AREA_KM AREA_ML

(POPU, AREA_KM) P_DENSITY

POPU P_PERCENT

显然,此关系的码为PNAME,非主属性为:POPU,AREA_KM,AREA_ML,P_DENSITY,P_PERCENT, 关系中存在着非主属性对码的传递函数依赖。根据上述关系范式的定义,有PROVINCE∈2NF,但PROVINCE∈3NF。

那么应该如何处理有派生属性的2NF的关系呢?

3 派生属性的处理

关系数据库中的派生属性是衍生数据,对它们的处理有四种方式:

(1)在数据库表中不存储派生属性,而由应用程序在查询数据库时临时计算;

(2)在数据库表中不存储派生属性,创建包含派生属性的视图;

(3)将有派生属性的2NF的关系进一步分解为3NF;

(4)保持有派生属性的2NF的关系不变。

第(1)、(2)种方式节省存储空间,且可以保证数据库中的关系都是3NF的,但是对于派生属性的计算方法比较复杂,且数据库表比较庞大的情况下,在查询时临时计算会消耗大量系统资源和时间,特别是目前存储设备越来越便宜,应该以空间换时间。在这种情况下,第(1)、(2)种方式是不可取的。

第(3)种方式对有派生属性的2NF的关系进行不必要的分解,违反了“一事一地”的关系模式设计原则,且分解后得到许多关系表,当进行查询操作时就必须使用更多的连接语句,导致数据查询效率降低。

从语义上来说,派生属性与码是紧密相联系的,要遵循“一事一地”的设计原则,就不应该将有派生属性的2NF关系再分解,第(4)种方式是最合适的选择。

上面提到对2NF关系的修改操作会产生异常,为了避免修改异常及保持数据的一致性、完整性,必须对派生属性值的修改作限制,即不允许用户及应用程序直接修改派生属性值。

对派生属性值的修改(包括插入新元组时派生属性值的生成)有两种方式:

(1)使用表触发器对派生属性值进行修改;

(2)使用存储过程对派生属性值进行修改。

第(1)种方式的修改是即时的,只适用于计算方法比较简单的派生属性,否则将大大增加对表修改的时间,影响修改效率;第(2)种方式的修改比较灵活,可以是定时的,也可以是手动的,对派生属性计算方法比较复杂的情况适用。

另外,上述第(4)种派生属性是比较复杂的,它是由其他表属性的多个值派生而出,如图3是关于某银行某年的客户帐户关系。

图3 关系表CA和CUSTOMER

这两个关系都是3NF的,CUSTOMER中的AVG_AM是由CA中的AMOUNT派生而出:

CUSTOMER.AVG_AM = (∑CA.AMOUNT)/ 12 WHERE O = O

对于这样复杂的派生属性的修改应使用存储过程进行。

综上所述:

1) 派生属性应事先计算并存储在数据库中,这是“以空间换时间”的策略;

2) 对于前三种类型的派生属性,保持相应2NF的关系不变;

3) 对于简单派生属性的修改可用表触发器进行,对于复杂派生属性的修改可用存储过程进行,这样既避免修改异常,又不会使修改成为系统效率的瓶颈。

4 结束语

关系数据库的派生属性是一种衍生数据,对其处理的好坏影响着数据库应用系统的效率。文中从关系规范化理论出发,用实例详细阐述了派生属性的类型、存储方式、修改方法及方法的好处,对于关系数据库的模式设计、提高数据库应用系统性能具有重要意义。

参考文献:

[1] 王珊,萨师煊.数据库系统概论[M].4版.北京:高等教育出版社,2006.

[2] 邹琼.浅谈数据库设计中范式的应用[J].湖北经济学院学报, 2011,8(11):170-171.

[3] 柯白杨.关系数据库设计中的范式及其应用[J].福建电脑,2007(3):89-90,108.

[4] 田进华,杨志强.关系规范化理论在数据库设计中的重要性[J].电脑知识与技术,2009,5(24):6616-6617,6624.

[5] 李荣芳.关系规范化理论及反规范化设计在数据库中的运用[J].计算机与信息技术, 2007(21):89,99.

[6] 高丽燕,宋雪亚.范式在关系数据库设计中的应用[J].电脑知识与技术,2011,7(5):973-974.

[7] 于思江,王小兵.模式分解保持函数依赖的意义[J].电子技术,2010,23(12):99-101.

[8] 董玉杰,刘海波.基于规范化理论的关系模式优化策略研究[J].北京电子科技学院学报,2010,18(2):34-40.

[9] 林要华.关系模式分解成3NF自动实现[J].福建电脑,2006(10):101-102.

[10] 数据库设计中的规范化与派生属性处理[J].计算机工程与应用,1997(9):1-2.

上一篇:高校国有资产管理现状及对策研究 下一篇:浅议计算机网络维护