日期:2013-01-21  浏览次数:20530 次

数据库完整性约束可以通过DBMS或使用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。通过DBMS实现的数据库完整性按照数据库设计步骤进行设计,而由使用软件实现的数据库完整性则纳入使用软件设计(本文次要讨论前者)。数据库完整性对于数据库使用系统非常关键,其作用次要体如今以下几个方面:

1.数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据。

2.利用基于DBMS的完整性控制机制来实现业务规则,易于定义,容易理解,而且可以降低使用程序的复杂性,提高使用程序的运转效率。同时,基于DBMS的完整性控制机制是集中管理的,因此比使用程序更容易实现数据库的完整性。

3.合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能。比如装载大量数据时,只需在装载之前临时使基于DBMS的数据库完整性约束失效,此后再使其生效,就能保证既不影响数据装载的效率又能保证数据库的完整性。

4.在使用软件的功用测试中,完善的数据库完整性有助于尽早发现使用软件的错误。

数据库完整性约束可分为6类:列级静态约束、元组级静态约束、关系级静态约束、列级动态约束、元组级动态约束、关系级动态约束。动态约束通常由使用软件来实现。不同DBMS支持的数据库完整性基本相反,Oracle支持的基于DBMS的完整性约束如下表所示:

数据库完整性设计示例

一个好的数据库完整性设计首先需求在需求分析阶段确定要通过数据库完整性约束实现的业务规则,然后在充分了解特定DBMS提供的完整性控制机制的基础上,依据整个系统的体系结构和功用要求,遵照数据库设计方法和使用软件设计方法,合理选择每个业务规则的实现方式;最后,认真测试,排除隐含的约束冲突和功用问题。基于DBMS的数据库完整性设计大体分为以下几个阶段:

1.需求分析阶段

经过系统分析员、数据库分析员、用户的共同努力,确定系统模型中应该包含的对象,如人事及工资管理系统中的部门、员工、经理等,以及各种业务规则。

在完成寻觅业务规则的任务之后,确定要作为数据库完整性的业务规则,并对业务规则进行分类。其中作为数据库模式一部分的完整性设计按下面的过程进行。而由使用软件来实现的数据库完整性设计将按照软件工程的方法进行。

2.概念结构设计阶段

概念结构设计阶段是将依据需求分析的结果转换成一个独立于具体DBMS的概念模型,即实体关系图(ERD)。在概念结构设计阶段就要开始数据库完整性设计的实质阶段,由于此阶段的实体关系将在逻辑结构设计阶段转化为实体完整性约束和参照完整性约束,到逻辑结构设计阶段将完成设计的次要任务。

3.逻辑结构设计阶段

此阶段就是将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化,包括对关系模型的规范化。此时,依据DBMS提供的完整性约束机制,对尚未加入逻辑结构中的完整性约束列表,逐条选择合适的方式加以实现。

在逻辑结构设计阶段结束时,作为数据库模式一部分的完整性设计也就基本完成了。每种业务规则都可能有好几种实现方式,应该选择对数据库功用影响最小的一种,有时需通过实际测试来决定。

数据库完整性设计准绳

在实施数据库完整性设计的时候,有一些基本的准绳需求把握:

1.依据数据库完整性约束的类型确定其实现的系统层次和方式,并提前考虑对系统功用的影响。普通情况下,静态约束应尽量包含在数据库模式中,而动态约束由使用程序实现。

2.实体完整性约束、参照完整性约束是关系数据库最重要的完整性约束,在不影响系统关键功用的前提下需尽量使用。用一定的时间和空间来换取系统的易用性是值得的。

3.要慎用目前主流DBMS都支持的触发器功用,一方面由于触发器的功用开销较大,另一方面,触发器的多级触发不好控制,容易发生错误,非用不可时,最好使用Before型语句级触发器。

4.在需求分析阶段就必须制定完整性约束的命名规范,尽量使用有意义的英文单词、缩写词、表名、列名及下划线等组合,使其易于识别和记忆,如:CKC_EMP_REAL_INCOME_EMPLOYEE、PK_EMPLOYEE、CKT_EMPLOYEE。如果使用CASE工具,普通有缺省的规则,可在此基础上修正使用。

5.要依据业务规则对数据库完整性进行细致的测试,以尽早排除隐含的完整性约束间的冲突和对功用的影响。

6.要有专职的数据库设计小组,自始至终担任数据库的分析、设计、测试、实施及晚期维护。数据库设计人员不只担任基于DBMS的数据库完整性约束的设计实现,还要担任对使用软件实现的数据库完整性约束进行审核。

7.应采用合适的CASE工具来降低数据库设计各阶段的任务量。好的CASE工具能够支持整个数据库的生命周期,这将使数据库设计人员的任务效率得到很大提高,同时也容易与用户沟通。