数据库原理及应用:SQL Server 2019(第2版)
上QQ阅读APP看书,第一时间看更新

2.2 关系模型的完整性

关系模型的完整性规则是指对关系的某种约束条件,即关系的值在变化时应满足的一些规定条件,是关系操作在数据不断更新时应遵守的规则,用于保证数据的正确相容性。

在关系模型中主要有3类完整性约束,即实体完整性、参照完整性和用户定义的完整性,其中前两个约束称为关系的不变性,是关系模型必须满足的完整性约束条件,由系统自动实现。用户定义的完整性是业务应用时需要遵循的规则,由实际应用条件确定。

2.2.1 实体完整性

实体完整性(Entity Integrity)规则。如果属性A(单一属性或属性组)是基本关系R的主属性,则属性A不能取空值。

由于主键是记录的唯一标识(调用的指定位置),如果主属性为空将导致记录不可区分,这与实体的定义矛盾。例如,学生数据表的“学号”不能为空,如果为空则表明学生不存在,后续的学生选课和学生选课成绩就无从谈起。

实体完整性要求每个关系(二维表)有且仅有一个主键,而且每个主键的值必须唯一,不能为空值或重复,以确保数据操作的正确、完整、可靠。978-7-111-66147-4-Chapter02-18.jpg

978-7-111-66147-4-Chapter02-19.jpg知识拓展

实体的完整性规则

2.2.2 参照完整性

现实世界中的某些实体(事务)之间具有一定的联系,在关系模型中实体及其之间的联系可用关系表示。如用户查询数据时经常需要关系(数据表)之间的关联或引用,即多表间的数据选取及调用。在关系数据库中,多表之间的关联或引用需要将一个表中的主键作为另一个表中的外键,确保数据一一对应,如学生表中的“学号”为主键,是选课表的外键。

参照完整性(Referencial Integrity)形式化的定义:如果F是关系R的一个或一组属性,但不是R的键,K是关系S的主键。若F与主键K相对应,则称F是关系R的外键(Foreign Key)。并称关系R为参照关系(Referencing Relation),关系S为被参照关系(Referenced Re-lation)或目标关系(Target Relation)。

参照完整性体现在两方面:实现多表之间的联系,外键的取值必须是另一表的主键的有效值或空值。

978-7-111-66147-4-Chapter02-20.jpg注意:在实际应用中,外键不一定与对应主键同名。在关系模式中,主键常用下画线标出,外键常用波浪线标出。此外,外键值是否允许为空,应视具体问题而定。如外键是主键中的属性即主属性,则不能取空值。

参照完整性规则是外键和主键之间的引用规则。若属性或属性组F是关系R的外键,F与关系S的主键K相对应(关系R和S不一定是不同关系),则对于R中每个记录在F上的值为空,或等于S中某个记录的主键。

【案例2-8】高校学生实体和专业实体之间的联系。学生(学号,身份证号,姓名,性别,专业编号,出生日期,家庭地址),其中学号为主键(PK)。专业(专业编号,专业名称)其中专业编号为主键(PK)同时是“学生”关系的外键。

学生和专业两个关系存在属性的引用,即学生关系引用了专业关系的主键“专业编号”,此处学生关系中的“专业编号”的取值需要参照专业关系中的“专业编号”,即对学生关系中“专业编号”的取值或为空值(表明学生还没分配专业),或取某个具体值。例如,在插入数据时,关系数据库中DBMS负责验证外键是否合法,并决定是否插入该记录。

【案例2-9】企业职员数据表。职员(职员编号,姓名,性别,民族,出生年月,所在部门,籍贯,政治面貌,家庭地址,联系电话,主管)。职员关系中,“职员编号”为主键,“主管”属性表示该员工主管的编号,它引用了本关系“职员编号”,因为主管也是职员中有一员,只是职位不同。所以职员关系中主管必须是“职员编号”(列/字段)中的某个值,或者为空值(表示尚未分配主管)。

2.2.3 用户定义的完整性

关系数据库系统除了必须满足实体完整性和参照完整性之外,还需要遵循特定应用领域的约束条件(实际应用要求),保证数据在规定的范围内取值。用户定义的完整性(User-defined Integrity)是指针对某一具体关系数据库的约束条件,是某一具体实际应用所涉及的数据必须满足的语义要求。例如,学生百分制成绩取值范围为0~100。

用户定义的完整性是对数据表中字段属性的约束(要求),包括属性的值域、类型、宽度和小数点位数等约束,是由确定关系结构时所定义字段的属性决定的。例如,在客户申请银行卡时,银行会对身份证进行合法验证,要求身份证字段长度为18位。

978-7-111-66147-4-Chapter02-21.jpg讨论思考:

1)在关系模型中具体有哪3类完整性约束?

2)关系模型中为什么必须满足实体完整性和参照完整性?

3)试举例说明用户定义的完整性。