购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 关系完整性约束

数据库通过完整性约束保证数据的相容性和正确性。一是数据库中的数据与现实世界中的应用需求的相容性和正确性;二是数据库中数据之间的相容性和正确性。关系数据模型支持三类数据完整性:实体完整性、参照完整性和用户定义完整性。其中,实体完整性和参照完整性是关系数据模型必须满足的完整性约束条件,由数据库管理系统自动支持;而用户定义完整性是应用领域需要遵循的约束条件,由关系型数据库管理系统或工具提供编写手段,关系型数据库管理系统的完整性检查机制负责检查。

2.3.1 实体完整性

关系中的每一个行要能够被识别,且不允许存在完全相同的两行。例如,在关系card(CID,password,balance)中,如果某一行的卡号CID为空值,则无法识别这一行记录的是哪一张校园卡的信息,存入数据库后也是没有意义的“垃圾数据”;又如,在关系card(CID,password,balance)中,两行具有相同的CID值,则意味着同一张校园卡的信息保存了两次,冗余数据会带来数据不一致。

因此,有必要要求关系的主属性非空且唯一,这就是实体完整性的含义。实体完整性是对关系数据模型的基本要求。实体完整性主要通过主键约束和候选键约束实现。

1. 主键约束

每个表只能有一个主键,构成主键的每一列值不能为空值,且主键必须能够唯一标识表中每一行,表中任意两行在主键上不能具有相同的值。

2. 候选键约束

候选键与主键一样,必须非空值且唯一。

2.3.2 参照完整性

参照完整性定义了外键与主键之间的引用规则。设F是关系R的外键,并对应关系S的主键K,则F在关系R中的取值要么是空值,要么等于关系S中某个元组的主键值。关系R和关系S可以是不同的关系,也可以是同一个关系。例如,关系card和关系student中都有属性CID,其中card中的CID是主键;student中的CID是外键,要遵守参照完整性约束,即某个学生要么没有校园卡,要么持有的校园卡是有效的校园卡。因此,student中的CID要么取空值,表示某个人还没有办理校园卡;要么等于card中某个元组的CID的值,表示某个人拥有一张有效的校园卡。

参照完整性属于表间规则,一旦定义后将由数据库管理系统自动维护。主表的插入操作不需要检查参照完整性;从表中插入元组时,系统自动检查新元组中外键的取值是否为空值(假定该外键允许取空值)或者等于主表中已经存在的某个主键值,从而保证从表数据的相容性和正确性。主表或从表更新或删除元组时,系统都自动检查参照完整性。更新或删除主表中主键的某个值时,如果该值有外键参照,可以拒绝主表的更新或删除操作,因为如果从表中外键的值未做相应更新或删除,会导致从表中对应的元组成为没有意义的孤立的数据。也可以进行级联式更新或删除,即同步更新或删除从表中对应元组的值;还可以将从表中相应行在外键上的取值改为空值后,再执行主表的更新或删除操作。

在定义参照完整性的同时可以选择处理方式,然后由数据库系统自动处理。

2.3.3 用户定义完整性

实体完整性和参照完整性是数据库必须满足的完整性约束。如果用户对数据有一些特殊的语义要求,可以通过用户定义完整性的方式进行定义。例如校园卡的余额要大于等于零、学生的姓名要非空值等。 gWNF42mvpN5EJC+2gtc59y2QWU6hM+TPnysbOkrbh17FF7hCQb0e3Hh1+NekcrCr

点击中间区域
呼出菜单
上一章
目录
下一章
×