注意时间
第十章 数据库完整性
10.1 完整性约束条件
一、静态列级约束
1,对数据类型的约束
2,对数据格式的约束
3,对取值范围或取值集合的约束
4,对空值的约束
5,其他约束
二、静态元组约束
三、静态关系约束
1,实体完整性约束
2,参照完整性约
3,函数依赖约束
4,统计约束
四、动态列级约束
1,修改列定义时的约束
2,修改列值时的约束
五、动态元组约束
六、动态关系约束
表 10.1 完整性约束条件
粒度
状态
列 级 元组级 关系级
静态
列定义
.类型
.格式
.值域
.空值
元组值应
满足的关系
实体完整性约束
参照完整性约束
函数依赖约束
统计约束
动态
改变列定义
或域值
元组新旧值之
间应满足的约
束条件
关系新旧状态之
间应满足的约束
条件
10.2 完整性控制
一、完整性控制机制应具有的功能
二、用一个五元组来表示一条完整性规则
* D(Data) 约束作用的数据对象;
* O(Operation)触发完整性检查的数据库操作 ;
* A(Assertion) 数据对象必须满足的断言或语义约束,
这是规则的主体 ;
* C(Condition) 选择 A作用的数据对象值的谓词 ;
* P(Procedure) 违反完整性规则时触发的过程,
三、实现参照完整性要考虑的几个问题
1,外码能否接受空值问题
2,在被参照关系中删除元组的问题
(1),级联删除 (CASCZDES)
(2),受限删除 (RESTRICTED)
(3),置空值删除 (NULLIFIES)
3,在参照关系中插入元组时的问题
(1),受限插入
(2),递归插入
4,修改关系中主码的问题
(1),不允许修改主码
(2).允许修改主码
10.3 Oracle 的完整性
一,Oracle 中的实体完整性
Oracle 在 CREATE TABLE 语句中提供了 PRIMARY KEY 子句,
供用户在建表时指定关系的主码。如要定义 Student 表的 Sno为主码,
可使用如下语句,
CREATE TABLE Student
(Sno NUMBER(8),
Sname VARCHAR(20),
Sage NUMBER(2),
CONSTRAINT PK-SNO PRIMARY KEY(Sno));
若要在 SC表中定义 (Sno,Cno)为主码,则用如下语句建立 SC表,
CREATE TABLE SC
(Sno NUMBER(8),
Cno NUMBER(2),
Grade NUMBER(3),
CONSTRAINT PK-SC PRIMARY KEY(Sno,Cno));
二, Oracle 中的参照完整性
三, Oracle 中用户定义的完整性
Oracle允许用户在建立表时定义下列完整性约束:
* 列值非空 (NOT NULL 短语 )
* 列值唯一 (UNIQUE短语 )
* 检查列值是否满足一个布 4表达式 (CHECK 短语 )
例 1 (P331)
CREATE TABLE DEPT
(Deptno NUMBER,
Dname VARCHAR(9) CONSTRAINT U1 UNIQUE,
Loc VARCHAR(10),
CONSTRAINT PK-DEPT PRIMARY KEY(Deptno));