数据库完整性

数据的完整性和安全性
数据库的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意破坏和非法存取。
完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。安全性控制的方法对象是非法用户和非法操作,防止它们对数据库的非法存取。

一、数据库完整性的概念

数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象再不同关系表中的数据是符合逻辑的。

二、维护完整性实现的功能

1、提供定义完整性约束条件的机制

完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。它表达了给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的争取、有效和相容。SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。这些完整性一般由SQL的数据定义语言语句来实现,它们作为数据库模式的一部分存入数据字典中。

2、提供完整性检查的方法

数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。检查这些操作执行后数据库中的数据是否违背了完整性约束条件。

3、进行违约处理

数据库管理系统若发现用户的操作违背了完整性约束条件将采取一定的动作。关系数据库管理系统使得完整性控制成为其核心支持的功能,从而能够为所有用户和应用提供一致性的数据库完整性。

三、实体完整性

1、定义实体完整性

关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。对单属性构成的码有两种说明方法:定义为列级约束条件和定义为表级约束条件。对多个属性构成的码只有一种说明方法,即定义为表级约束条件。
备注:实际上就是定义一个主键,并且只能在表级定义主码。

2、实体完整性检查和违约处理

用PRMARY KEY短语定义了关系的主码后,每当用户程序对基本表的插入一条记录或对主码列进行更新操作时,关系数据库管理系统将按照实体完整性规则自动进行检查。
1)检查主码是否唯一,不唯一则拒绝插入或修改。
2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
检查记录主码值是否唯一的一种方法是进行全表扫描,依次判断表中每一条记录的主码值与将插入记录的主码值(或修改的新主码值)是否相同。这种方法比较耗时。另一种就是在主码上自动建立一个索引,通过索引进行判断是否存在。这样可以大大提高效率。

四、参照完整性

1、定义参照完整性

关系模型的参照完整性在CREATE TABLE中FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。
备注:相当于外键。

2、参照完整性检查和违约处理

参照完整性将两个表中的相应元组联系起来了。因此,对被参照表和参照表进行增删改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。
可能出现的情况和处理
数据库完整性_第1张图片
处理策略:
1. 拒绝(NO ACTION)执行:不允许该操作执行,该策略一般设置为默认策略。
2. 级联(CASCADE)操作:当删除或修改被参照表的一个元组导致与参照表的不一致时,删除或修改参照表中的所有导致不一致的元组。
3. 设置为空值:当删除或修改被参照表的一个元组造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

关系数据库系统在实现参照完整性时,除了要提供定义主码、外码的机制外,还需要提供不同的策略供用户选择。

五、用户定义的完整性

用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。

1、属性上的约束条件
  1. 属性上约束条件的定义
    在CREATE TABLE中定义属性的同时,可以根据应用要求定义属性上的约束条件(属性值限制),包括
    1)列值非空(NOT NULL)
    2)列值唯一(UNIQUE)
    3)检查列值是否满足一个条件表达式(CHECK语句)
  2. 属性上约束条件的检查和违约处理
    当表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,不满足则被拒绝执行。
2、 元组上的约束条件
  1. 元组上约束条件的定义
    与属性上约束条件的定义类似,在CREATE TABLE语句中可以用CHECK短语定义元组上的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件。
  2. 元组上约束条件的检查和违约处理
    当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约束条件是否被满足,如果不满足就拒绝执行操作。

完整性机制的实施会影响系统性能,因此许多数据库管理系统对完整性机制的支持比对安全性的支持要晚得多,也弱得多。对于违反完整性的操作一般采用拒绝执行的方法。用户要根据应用语义来定义合适的处理策略,以保证数据库的正确性。

六、完整性约束命名子句

SQL在CREATE TABLE语句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件。

1、完整性约束命名子句

CONSTRAINT <完整性约束条件名><完整性约束条件>
<完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK短语等。

2、修改表中的完整性限制

使用ALTER TABLE语句修改表中的完整性限制。

七、域中的完整性约束

域是一组具有相同数据类型的值的集合。CREATE DOMAIN语句可以建立一个域以及该域应满足的完整性约束条件,然后就可以用域来定义属性。这样数据库中不同的属性可以来自同一个域,当域上的完整性约束条件改变时只要修改域的定义就可以了,不用一一修改域上的各个属性。

你可能感兴趣的:(数据库)