4.4 完整性约束 4.4.1 单个关系上的约束
4.4 完整性约束
**完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性
**。因此,完整性约束防止的是对数据的意外破坏。
完整性约束例子
完整性约束的例子有:
- 教师姓名不能为
null
- 任意两位教师不能有相同的教师标识。
course
关系中的每个系名必须在department
关系中有一个对应的系名。- 一个系的预算必须大于
0.00
美元。
一般说来,一个完整性约束可以是属于数据库的任意谓词。但检测任意谓词的代价可能太高。因此,大多数数据库系统允许用户指定那些只需极小开销就可以检测的完整性约束。
在3.2.2
节我们已经见过了一些完整性约束的形式。本节我们将学习更多的完整性约束形式。在第8章我们学习另一种被称作函数依赖
的完整性约束形式,它主要应用在模式设计
的过程中。
创建关系时指定完整性约束
完整性约束通常被看成是数据库模式设计过程的一部分,它作为用于创建关系的create table
命令的一部分被声明。
创建关系后指定完整性约束
然而,完整性约束也可以通过使用alter table table-name add constrain
命令施加到已有关系上,其中constrant
可以是关系上的任意约束。
创建关系后指定的完整性约束有什么要求
当执行alter table table-name add constrain
命令时,系统首先保证关系满足新指定的约束。如果满足,那么新增约束被施加到关系上;如果不满足,则拒绝添加新的约束。
4.4.1 单个关系上的约束
我们在3.2
节中描述了如何用create table
命令定义关系表。 create table
命令还可以包括完整性约束语句。
可以在创建关系时指定的完整性约束
除了主码约束
之外,还有许多其他可以包括在create table
命令中的约束。允许的完整性约束包括:
not null
,unique
,check(<谓词>)
。
我们将在下面的几节中讨论上述每一种约束。