关系模型的完整性规则 是指对关系的约束条件,是数据操作中应遵守的规则,保证其正确相容性。 主要有三类完整性约束 :实体完整性约束、参照完整性约束和用户定义的完整性约束。前两个称为 关系的不变性 ,是关系模型必须满足的完整性约束条件,由系统自动实现。用户定义的完整性是业务应用时实际遵循的规则。
实体完整性(Entity Integrity)规则: 如果属性 A (单一属性(组))是基本关系 R 的主属性,则属性 A 不能取空值。
主键是记录的唯一标识(调用的指定位置),如果主属性为空,则将导致记录不可区分,这与实体的定义矛盾。例如,学生数据表的“学号”不能为空,如果为空则表明学生不存在,后续的学生选课和学生选课成绩就无法查找与进行数据处理。
实体完整性要求 保证每个关系(二维表)有且仅有一个主键,而且每个主键的值必须唯一,不能为空值或重复,以确保数据操作的正确、完整、可靠。
知识拓展
实体的完整性基本规则
在实际应用中,关系模型中的实体及其之间的联系可用关系表示。例如,用户查询数据时经常需要通过主键和外键进行多表之间数据的关联或引用。
参照完整性(Referencial Integrity)形式化的定义 :如果 F 是关系 R 的一个或一组属性,但不是 R 的键, K 是关系 S 的主键,若 F 与主键 K 相对应,则称 F 是关系 R 的外键,并称 关系 R 为参照关系,关系 S 为被参照关系 或 目标关系 。
参照完整性体现在两方面 :实现多表之间的关联,外键的取值必须是另一表主键的有效值或是空值(暂时未定)。
注意: 在关系模式中,外键不一定与对应主键同名,外键常用下画曲线标出。外键的值是否允许为空,应视具体问题而定。
参照完整性规则 是外键和主键之间的引用规则。若属性(组) F 是关系 R 的外键, F 与关系 S 的主键 K 相对应(关系 R 和 S 不一定是不同关系),则 R 中每个元组在 F 上的值或为空,或等于 S 中某个元组的主键。
【案例2-8】 高校学生实体和专业实体之间的联系。在学生( 学号 ,身份证号,姓名,性别,专业编号,出生日期,家庭地址)中,学号为主键( PK )。在专业( 专业编号 ,专业名称)中,专业编号为主键( PK ),同时是“学生”关系的外键。
学生和专业关系存在属性的引用,即学生关系引用了专业关系的主键“专业编号”,此处学生关系中的“专业编号”的取值需要参照专业关系中的“专业编号”,即学生关系中“专业编号”的取值或为空值(表明学生还没确定专业),或取某个具体值。例如,在插入数据时,DBMS负责验证外键是否合法,并决定是否插入该记录。
【案例2-9】 企业职员数据表 。职员( 职员编号 ,姓名,性别,民族,出生年月,所在部门,籍贯,政治面貌,家庭地址,联系电话,主管)中,“职员编号”为主键,“主管”属性表示该员工主管的编号,它引用了本关系“职员编号”,因为主管也是职员中的一员,只是职位不同。所以职员关系中的主管必须是“职员编号”(列/字段)中的某个值,或者为空值(表示尚未分配主管)。
用户定义的完整性(User-defined Integrity) 是指对数据表中字段属性的约束(实际要求),包括属性的值域、类型、宽度和小数点位数等,是由确定关系结构时所定义的字段属性决定的。例如,在客户申请银行卡时,银行对身份证进行合法验证,要求其字段长度为18位。
域完整性(Domain Integrity) 是指属性(列)值域的完整性,如数据类型、格式、值域范围、是否允许空值等,是针对某一具体数据库的约束条件,保证表中的某些列不能输入无效的值。域完整性限制了某些属性中的值,将属性限制在一个有限集合。例如,通常,正式职工的年龄在18~60之间。
讨论思考:
1)在关系模型中具体有哪几类完整性约束?
2)关系中为何满足实体完整性和参照完整性?
3)试举例说明用户定义的完整性应用案例。
微课视频
课程视频2.3