下面是由希赛小编整理的中级通信互联网技术知识点精讲之关系的完整性,希望能帮助学友们。具体内容如下:
关系的完整性
关系模型的完整性规则是对关系的某种约束条件?关系模型中可以有3类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中,实体完整性和参照完整性是关系模型第8章数据库基础1261必须满足的完整性约束条件,被称做是关系的两个不变性,应该由关系系统自动支持。
1.实体完整性(EntityIntegrity)
规则8.1实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。
例如在关系“SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)”中,“研究生姓名”POSTGRADUATE属性为主码(假设研究生不会重名),则“研究生姓名”不能取空值。
实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是主码整体不能取空值。
例如,学生选课关系“选修(学号,课程号,成绩)”中,“学号、课程号”为主码,则“学号”和“课程号”两个属性都不能取空值。
2.参照完整性(Referentiallntegrity)
现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的。这样就自然存在着关系与关系间的引用。
【例8.1】学生实体和专业实体可以用下面的关系表示,其中主码用下划线标识:
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
这两个关系之间存在着属性的引用,即学生关系引用了专业关系的主码“专业号”。显然,学生关系中的“专业号”值必须是确实存在的专业的专业号,即专业关系中有该专业的记录。
也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值。
【例8.2】学生、课程、学生与课程之间的多对多联系可以如下3个关系表示:
学生(学号,姓名,性别,专业号,年钤)
课程(课程号,课程名,学分)
选修(学号,课程号,成缋)
这3个关系之间也存在着属性的引用,即选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。同样,选修关系中的“学号”值必须是确实存在的学生的学号,即学生关系中有该学生的记录:选修关系中的“课程号”值也必须是确实存在的课程的课程号,
即课程关系中有该课程的记录。换句话说,选修关系中某些属性的取值需要参照其他关系的属性取值。
不仅两个或两个以上的关系间可以存在引用关系,同一关系内部属性间也可能存在引用关系。
【例8.3】在关系学生2(学号,姓名,性别,专业号,年龄,班长)中,“学号”属性是主码,“班长”属性表示该学生所在班级的班长的学号,它引用了本关系“学号”厉性,即“班长”必须是确实存在的学生的学号。
定义8.S设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(ForeignKey),并称基本关系R为参照关系(ReferencingRelation),基本关系S为被参照关系(ReferencedRelation)或目标关系(TargetRelation)。关系R和S不一定是不同的关系。
显然,目标关系S的主码和参照关系的外码F必须定义在同一个(或一组)域上。在例8.1中,学生关系的“专业号”属性与专业关系的主码“专业号”相对应,因此“专业号”属性是学生关系的外码。这里专业关系是被参照关系,学生关系为参照关系。
在例8.2中,选修关系的“学号”属性与学生关系的主码“学号”相对应,“课程号”属性与课程关系的主码“课程号”相对应,因此“学号”和“课程号”属性是选修关系的外码。这里学生关系和课程关系均为被参照关系,选修关系为参照关系。
在例8.3中,“班长”属性与本身的主码“学号”属性相对应,因此“班长”是外码。这里学生2关系既是参照关系也是被参照关系。
规则8.2参照完整性规则:设属性组A是关系R的外码且A与关系S的主码对应,则对于R中的每一个元组在属性A上的值必须为空值(对应于A中每个属性值都为空值)或者等于S中某一元组的主码值。
需要指出的是,外码并不一定要与相应的主码同名(如例3)。不过,在实际应用当中,为了便于识别,当外码与相应的主码属于不同关系时,往往给它们取相同的名宇。
参照完整性规则就是定义外码与主码之间的引用规则。
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,它由关系数据库管理系统(RDBMS)自动支持。
3.用户自定义的完整性(User-definedIntegrity)
这是针对某一具体数据的约束条件,由应用环境决定。用户定义的完整性具体应用涉及数据必须满足的语义要求。系统提供定义和检验这类完整性的统一处理方法,不再由应用程序承担这项工作。例如,我们可以写一条规则,把学生每门课程的学习成绩限制在0-100分。现在的商品化RDBMS都提供了定义和检査这类完整性约束的机制。
相关推荐: