- 实体完整性
- 参照完整性
- 用户定义完整性
附录2数据库的三种完整性
关系模型的完整性规则是对关系的某种约束条件,关系模型中有三类完整性约束:
实体完整性
参照完整性
用户定义完整性
其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
>实体完整性
规则:若属性A是基本关系R的主属性,则属性A不能取空值
如在关系学生(学号,姓名,年龄,所属班级)中取学号为主码,则学号属性不能为空值
同时,实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是主码的整体不能取空值
如在关系选课(学号,课号)中取学号,课号为主码,则学号,课号属性不能为空值,
对实体完整性规则说明如下:
(1)实体完整性规则是针对基本关系(查询表,视图表)而言的,一个基本表通常对应现实世界的
一个实体集
(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3)相应的,关系模型中以主码作为唯一性标识。
(4)主码的属性即主属性不能取空值。如果主属性取空值,就说明存在某个不可标识的实体,即存
在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性
>参照完整性
现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这
样就自然存在着关系与关系间的引用。例如:有如下关系
学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)
这三个关系之间存在着属性的引用,即选修关系引用了学生关系的主码“学号”和课程关系的主码“课程
号”也就是说,选修关系中的“学号”值必须是确实存在的学生的学号,即学生关系中有该学生的记录
同样,选修关系中的“课程号”值必须是确实存在的课程的课程号,即课程关系中有该课程的记录。
需要注意的是,不仅两个或两个以上的关系间可以存在引用关系,同一关系内部属性间也可能存在引用
关系。
例如:在关系
工程人员(工号,姓名,职称,所属项目,项目主管)
中,“工号“属性是主码,“项目主管”属性表示该工程人员所属的项目的主管工程人员的工号,它引用了
本关系“工号”属性,即项目主管必须是切实存在的工程人员的工号,
通过上面的例子,我们可以给出外键和参照关系的定义
定义,设F是基本关系R的一个或一组属性,但不是关系R的键,如果F与基本关系S的主键Ks相
对应,则称F是基本关系R的外键,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。关系R和S不一定是不同的关系。显然,目标关系S的主键Ks和参照关系的外键F必须定义在同
个域上。
需要指出的是,外码并不一定要与相应的主码同名,不过在实际的应用中,为了便于识别,当外码与相
应的主码属于不同关系时,往往给它们取相同的名字。
参照完整性规则就是定义外码与主码之间的引用规则,下面我们给出参照完整性规则的定义。
定义:若属性(或属性组)F是基本关系R的外键,它与基本关系S的主键Ks相对应(基本关系R和
S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
·或者取空值
·或者等于S中某个元组的主码值
例如,对于下面的两个基本关系:
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
学生关系中每个元组的“专业号”属性只能取下面两类值:
(1)空值,表示尚未给该学生分配专业
(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能被分配到一个不
存在的专业中。
对于前面学生选修课的例子
学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)
学号”和“课程号”属性也可以取两类值:空值或目标关系中已经存在的值。但由于“学号”和课程号”是
选修关系中的主属性,按照实体完整性规则,他们均不能取空值。所以选修关系中的“学号”和“课程号”
属性实际上只能取相应被参照关系中已经存在的主码值。
>用户定义完整性
任何关系数据库系统都应该支持实体完整性和参照完整性,除此之外,不同的关系数据库系统根据其应
用环境的不同,往往还需要一些特殊的约束条件,用户定义完整性就是针对某一具体关系数据库的约束
条件。他反映某一具体应用所涉及的数据必须满足的语义要求。
如:
·某个属性必须取唯一值(观众订票)
·某个属性的取值范围在0-100之间(人的年龄)
·某些属性值之间应满足一定的函数关系(年龄属性与生日属性之间)