数据库得完整性是指数据的正确性和相容性。
数据的正确性指的是符合现实世界语义、反应当前实际情况的;
数据的相容性是指数据库同一对象在不同的关系表中的数据是符合逻辑的。
数据的完整性和安全性是两个是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是为了防止被数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意破坏和非法存取。
为维护数据得完整性,数据库管理系统必须能够实现如下功能。
1、提供定义完整性约束条件的机制
2、提供完整性检查的方法
3、进行违约处理
关系数据库管理系统使得完整性约束控制成为其核心支持的功能,从而能够为所有用户和应用 提供一致的数据库完整性。
实体完整性
定义实体完整性--定义主码
关系模型的实体完整性在 create table 中用primary key定义。对单属性构成的码有两种说明方法,一种是定义列级约束条件,另一种是定义为表级约束条件。对多个属性列构成的码只有一种说明方法,即定义为表级约束条件。
【例】将Student表中的Sno属性定义为码。
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) /*在表级定义主码*/
);
【例】将SC表中的Sno、Cno属性组定义为主码
create table SC
(
Sno char(9) not null,
Cno char(4) not null,
grade smallint,
primary key (Sno,Cno) /*只能在表级定义主码*/
);
实体完整性检查和违约处理
用primary key短语定义了关系的主码后,每当用户程序对基本表插入一条记录或对主码列进行更新操作时,关系数据库系统会根据实体的完整性规则自动进行检查。包括:
(1)检查主码值是否唯一,如果不唯一则拒绝插入或修改。
(2)检查主码的各个属性是否为空,只要有一个为空则拒绝插入或修改。
检查记录中主码值是否唯一的一种方法是进行全表扫描,依次判断表中每一条记录的主码值与将插入的记录的主码值是否相同。
全表扫描是十分耗时的,为了避免对基本表进行全表扫描,关系数据库管理系统一般都在主码上自动建立一个索引。
定义参照的完整性--定义外码
关系模型的参照完整性在create table 中用foreign key短语定义哪些列为外码,用references短语指明了外码参照哪些表的主码。
【例】关系SC中的一个元组表示一个学生选修了某门课程的成绩,