资料完整性

资料完整性

存储在资料库中的所有资料值均正确的状态。如果资料库中存储有不正确的资料值,则该资料库称为已丧失资料完整性。

  • 中文名称
    资料完整性
  • 存储在
    资料库中
  • 域完整性
    Domain Integrity
  • 参照完整性
    Referential Integrity

基本简介

存储在资料库中的所有资料值均正确的状态。如果资料库中存储有不正确的资料值,则该资料库称为已丧失资料完整性。

详细释义

资料库中的资料是从外界输入的,而资料的输入由于种种原因,会发生输入无效或错误信息。保证输入的资料符合规定,成为了资料库系统,尤其是多使用者的关系资料库系统首要关注的问题。资料完整性因此而提出。本章将讲述资料完整性的概念及其在SQL Server 中的实现方法。

资料完整性(Data Integrity)是指资料的精确性(Accuracy) 和可靠性(Reliability)。它是应防止资料库中存在不符合语义规定的资料和防止因错误信息的输入输出造成无效操作或错误信息而提出的。资料完整性分为四类:实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)、使用者定义的完整性(User-definedIntegrity)。

资料库採用多种方法来保证资料完整性,包括外键、约束、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。

完整约束

完整性约束主要有实体完整性约束、参照完整性约束、函式依赖约束、统计约束四类。

实体完整性 实体完整性是指一个关系中所有主属性(即主码的属性)不能取空值。所谓“空值”就是“不知道”或“无意义”的值。如主属性取空值,就说明某个不可标识的实体,这与现实世界的套用环境相矛盾,因此这个实体一定不是完整的实体。

参照完整性约束 参照完整性约束是指参照关系中外码的取值或者是空值(外码的每个属性均为空值)或者是取被参照关系中某个元组的主码值。下面举例说明。现有两个关系模式:学生(学号,姓名,性别,专业号,年龄)和专业(专业号,专业名)。在实现参照完整性时要注意以下几个问题:①外码是否可以接受空值。因为外码能否为空是依赖于套用环境的,如有两个关系模式分别为选修(学号,课程好,成绩)学生(学号,姓名,性别,年龄,所在系),选修关系中的外码“学号”不能为空,如果为空,说明某个不知学号的学生选修了某门课程,这与学校的套用环境不符。②移除被参照关系的元组时的考虑。有时需要移除被参照关系的某个元组,而参照关系中又有若干原组的外码值与被移除的被参照关系中的主码值相对应,这时要进行级联移除,即将参照关系中的所有外码值与被参照关系中要移除元组主码值相对应的元组一起移除,如果参照关系同时又是另一个关系的被参照关系则这种级联移除应该级联移除应该级联下去。③修改被参照关系中主码时的考虑。遇到这种情况时,做法同移除被参照关系的元组类似,要做级联修改,既修改被参照关系中主码值的同时,用相同的方法修改参照关系中相应的外码值。

函式依赖约束 大部分函式依赖约束都是隐含在关系模式结构中,特别是规範化程度较高的关系模式(如3NF或BCNS)都由模式来保持函式依赖。在实际套用中,为了不使信息过于分离,一般不能过分地追求规範化。这样在关系的栏位间就可以存在一些函式要显式地表示出来。

系统约束 即某个栏位值与一个关系多个元组的统计值之间的约束关系。如,本部门经理的工资不得高于本部门职工的平均工资的5倍。其中职工的平均工资值是一个统计计算值。在许多场合,统计资料往往可以公开,而个别资料却是保密的,但是个别资料值可以从统计资料推断出来,所以要採取一定的防範措施防止资料泄密。

约束实施

实现完整性约束的方法依类别不同而不同。完整性约束可以分为两大类:静态约束和动态约束。

静态约束 静态约束是对资料库状态的约束,有可分为固定约束、隐含约束和显示约束。

固定约束 是资料模型固有的约束,如关系的属性是原子的,即满足INF的约束。固有约束在DBMS实现时已经考虑。

隐含约束 指隐含于资料模式中的约束,一般用资料定义语言(DDL)语句说明,并存于资料目录中。例如,域完整性约束、实体完整性以及参照完整性约束,都由相应的DDL语句说明。

显示约束 固有约束、隐含约束是最基本的约束,但概括不了所有的约束。资料完整性是多种多样的,且依赖于资料的语义与套用,这些约束只有显式地说明,故称显式约束。显式约束的说明一般有三种方法:①用过程说明约束。这种方法不约束的说明和检验交给应用程式,应用程式中可以插入一些过程,以检验资料哭更新是否违反给顶的约束,如果违反约束,则回滚事务。检验约束的过程一般用通用高级程式语言编写,可以表达各式各样的约束。这是一种普遍方法。②用语言说明约束。断言指资料库状态必须满足的逻辑条件。资料库完整性约束可以看成一系列断言的集合。为了表示约束,DBMS须提供断言说明语言。③用触发子表示约束。触发子是一个软体机製,其功能相当于WHENEVERTHEN,即一旦给定条件成立,系统就引发相应的动作。利用触发子可以表示约束,以违反约束作为条件,以违反约束的处理作为动作。动作不限于回滚事务,也可以给使用者一个讯息或过程。在系统中定义一批触发子后,就会监督资料库状态,一旦出现违反约束的更新,就会引发相应的动作。

动态约束 动态约束不是对资料库状态的约束,而是资料库从一个状态变为另一个状态时应遵守的约束,例如在更新职工表时,工资、工龄这些属性值一般只会增加,不会减少。动态约束一般也是显式说明的。在上述约束中,固有约束必然实施,隐含约束在大部分现代DBMS中基本实施或部分实施,显式和动态约束只在个别DBMS中实施。

相关词条

相关搜索

其它词条