数据库完整性
定义
数据库的完整性(integrity)是指数据的正确性(correctness)和相容性(compat-abiity)。
数据库的完整性是防止不合语义或不正确的数据进入数据库
完整性体现了是否真实地反映现实世界
意义
用合适的完整性约束来规范数据,方便查找和操作,也方便后期的维护和优化。
数据模型(关系)
结构
操作
完整性
DBMS的完整性机制
提供了定义完整性约束条件的机制
提供了完整性检查的方法
违约处理
实体完整性(区分记录)
关系模型的实体完整性
Primary key
定义实体完整性
单一属性可以在列级和表级定义主码
多属性只能在表级定义主码
DBMS实体完整性检查和违约处理
检查
检查记录中主码值是否唯一的一种方法是进行全表扫描
该方法缺点:耗时
违约处理
拒绝操作
参照完整性(Foreign key)
定义参照完整性
create table sc(
//列级定义参照完整性
sno char(9) foreign key (sno) references student(sno),
cno char(4),
grade smallint,
//表级定义实体完整性
primary key(sno,cno),
//表级定义参照完整性
foreign key (cno) references student(cno)
)
参照完整性检查和违约处理
如上代码:student表为被参照表,sc为参照表
被参照表(例如Student) | 参照表(例如SC) | 违约处理 | |
---|---|---|---|
可能破坏参照完整性 | <—— | 插入元组 | 拒绝 |
可能破坏参照完整性 | <—— | 修改外码值 | 拒绝 |
删除元组 | ——> | 可能破坏参照完整性 | 拒绝/级联删除/设置为空值 |
修改主码值 | ——> | 可能破坏参照完整性 | 拒绝/级联删除/设置为空值 |
违约处理
拒绝执行(默认处理)
级联操作
设置为空值
create table sc(
//显式说明参照完整性的违约处理示例
//列级定义参照完整性
sno char(9),
cno char(4),
grade smallint,
//表级定义实体完整性
primary key(sno,cno),
//表级定义参照完整性
foreign key (sno) references student(sno)
on delete cascade //级联删除sc表中相应的元组
on update cascade,//级联更新sc表中相应的元组
foreign key (cno) references course(cno)
on delete no action//当删除course表中的元组造成了与sc表不一致时拒绝删除
on update cascade//当更新course表中的cno时,级联