数据库的完整性

一、数据库完整性概述
数据库的完整性包括数据库的正确性与数据库的相容性

完整性检查和控制的防范对象主要是不合语义、不正确的数据,防止它们进入数据库。完全性控制的防范对象是非法用户非法操作。防止它们对数据库中的数据进行非法的获取。

二、如何实现数据库的完整性
2.1为实现数据库的完整性,数据库管理系统(DBMS)必须实现以下功能:
①提供定义完整性约束条件的机制。
②提供完整性的检查方法。
③进行违约处理。

2.2实现方式
①SQL标准使用了一系列的概念来描述完整性,包括关系模型的实体完整性参照完整性用户定义的完整性。这些完整性由SQL的数据定义语言语句实现,它们作为数据库模式的一部分存入数据字典中。
②数据库管理系统用于检查数据库完整性约束条件的机制称为数据库完整性的检查。一般在INSERT,DELETE,UPDATE等操作执行之后,或是在事务提交时检查。检查操作执行后数据库中的数据是否违反了完整性约束条件。
③数据库在发现数据违反了数据的完整性机制之后就进行相应的违约处理,比如不执行该动作,取消级联。

注:数据库的完整性机制是关系型数据库系统的核心功能,可以为用户和应用提供一致的数据库完整性。数据库的完整性无法通过程序来实现,因为使用应用程序实现数据库的完整性存在漏洞,可能会被其它的应用程序破坏。

三、实体完整性
3.1、关系模型中的实体完整性通常是使用PRIMARY KEY来定义,对但属性定义的码通常有两种说明方法,一种是 定义为列级约束条件,另一种是 定义为表级约束条件。对 多个属性构成的码只有一种说明方法,即 定义为表级的约束条件

定义为列级的约束条件

Create Table Student
(
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(20) NOT NULL,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20)
);

定义为表级的约束条件

Create Table Student
(
    Sno CHAR(9),
    Sname CHAR(20) NOT NULL,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20),
    PRIMARY KEY(Sno)
);

: 3.2、实体完整性的检查和违约处理
每当用户程序对基本表插入一条记录或对主码进行更新操作时,实体完整性规则将自动检查。包括
(1)检查主码是否唯一,如果不唯一则拒绝插入或修改。
(2)检查主码各属性是否为空,如果有一个为空则拒绝插入或修改。

检查主码是否唯一的一种方法是进行全表扫描,依次判断每一条记录的主码值和插入的主码值是否相同。由于全表扫描十分耗时,关系型数据库系统一般都在主码上建立一个索引。

四、参照完整性
4.1、关系型数据库的参照完整性是在CREATE TABLE中使用FOREIGN KEY短语定义那些为外码,用REFERENCE指明这些外码参照那些表的主码。
例如:
Create Table SC
(
    Sno CHAR(9) NOT NULL,
    Cno CHAR(9) NOT NULL,
    Grade SMALL INT,
    PRIMARY KEY(Sno,Cno),
    FOREIGN KEY(Sno) REFERENCES Student(Sno),
    FOREIGN KEY(Cno) REFERENCES Course(Cno)
);

: 4.2、参照完整性的检查以及违约处理
①拒绝执行。该策略一般为默认策略
②级联操作。
③设置为空值。

Create Table SC
(
    Sno CHAR(9) NOT NULL,
    Cno CHAR(9) NOT NULL,
    Grade SMALL INT,
    PRIMARY KEY(Sno,Cno),
    FOREIGN KEY(Sno) REFERENCES Student(Sno)
        ON DELETE CASCADE
            /*当删除Student表中的元组时,级联删除SC表中的相应元组*/
        ON UPDATE CASCADE,
            /*当更新Student表中的元组时,级联更新SC表中的相应元组*/
    FOREIGN KEY(Cno) REFERENCES Course(Cno)
        ON DELETE NO ACTION
            /*当删除Course表中的元组时造成与SC表不一致,拒绝删除*/
        ON UPDATE CASCADE
            /*当更新Course表中的cno时,级联更新SC表中的相应元组*/
);
五、用户定义的完整性
5.1属性上的约束条件
在Create Table中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制,包括:
(1)列值非空(NOT NULL)。
(2)列值唯一。
(3)检查列值是否满足一个条件表达式(Check短语)。

以Check短语为例
Student表中的Ssex只允许取“男”或“女”。

Create Table Student
(
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(8) NOT NULL,
    Ssex CHAR(2) CHECK(Ssex IN('男','女')),
    Sage SMALLINT,
    Sdept CHAR(20)
);

当像表中插入元组或修改属性的值时,关系数据库系统会检查属性上的约束条件是否被满足,如果不满足则操作将拒绝执行。

六、完整性约束命名子句
6.1、完整性约束命名子句
命名方式:
CONSTRAINT <完整性约束条件名> <完整性约束条件>
<完整性约束条件>包括NOT NULL、UNIOUE、PRIMARY KEY、FOREIGN KEY、CHECK等短语。

6.2 修改完整性规则限制
可以使用ALTER TABLE语句修改表中的完整性限制。

/*去掉完整性限制*/
DROP CONSTRAINT C1;
/*添加完整性限制*/
ADD CONSTRAINT C2 CHECK(Sno BETWEEN 9000 AND 9999);

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