完整性约束条件作用对象可以是关系,元组,列.其中列约束主要是列的数据类型,取值范围,精度,是否为空等等;元组约束是元组之间列的约束关系;关系约束是指关系中元组之间以及关系和关系之间的约束.
完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的.所谓静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束.动态约束是指数据库从一种状态转变为另一种状态时新,旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束.
综合上述两个方面,可以将完整性约束条件分为六类.
1. 静态列约束
静态列约束是对一个列的取值域的说明,这是最常用也最容易实现的一类完整性约束,主要有以下几个方面:
(1) 对数据类型的约束,包括数据的类型,长度,单位,精度等
例:name类型为字符型,长度为 8.货物重量单位为公斤(kg),类型为数值型,长度为24位,精度为小数点后4位.
(2) 对数据格式的约束
例:出生日期的格式为'YYYY-MM-DD'.学生编号的格式共八位,前两位为入学年份,中间两位是院系编号,后面四位是顺序编号.
(3) 对取值范围或取值集合的约束
例:学生成绩的取值范围位0~100,性别的取值集合为[男,女].
(4) 对空值的约束
空值表示未定义或未知的值,与零值和空格不同,可以设置列不能为空值,例:学生学号不能为空值,而学生成绩可以为空值.
2. 静态元组约束
一个元组是由若干个列值组成的,静态元组约束就是规定元组的各个列之间的约束关系.例如,定货关系中包含发货量,定货量,规定发货量不得大于定货量.
3. 静态关系约束
在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束.常见的静态关系约束有:
(1) 实体完整性约束
(2) 参照完整性约束.
(3) 函数依赖约束.大部分函数依赖约束都在关系模式中定义.
(4) 统计约束.即字段值与关系中多个元组的统计值之间的约束关系.
其中,实体完整性约束和参照完整性约束是关系模型的两个极其重要的约束,称为关系的两个不变性.
4. 动态列约束
动态列约束是修改列定义或列值时应满足的约束条件,包括以下两方面:
(1) 修改列定义时的约束.例如,将允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改.
(2) 修改列值时的约束.修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件.例如,职工工资调整不得低于其原来工资,学生年龄只能增长等等.
5. 动态元组约束
动态元组约束是指修改元组的值时,元组中各个字段间需要满足某种约束条件.例如职工工资调整时新工资不得低于原工资+工龄*1.5,等等.
6. 动态关系约束
动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性,原子性等约束条件.
