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

2.3 关系的键和关系模型的完整性

2.3.1 关系的键

关系的键主要用于区分一个关系中的不同元组,或建立不同关系之间联系的属性或属性集,它主要有以下几类。

(1)候选键:能唯一标识关系中元组的最小属性集。

候选键的取值不能为空,且不能重复,如学生关系中的学号、课程关系中的课程号。

(2)主键/主码:从多个候选键中选择一个作为查询、插入或删除元组的操作变量,它被称为主键(或主码)。

(3)外键:如果关系 R 的一个属性 X 不是 R 的主键,而是另一个关系 S 的主键,则该属性 X 称为关系 R 的外键,并称 R 为参照关系, S 为被参照关系。

2.3.2 关系模型的完整性

关系模型的完整性是关系的某种约束条件。关系模型中有3种完整性约束:实体完整性、参照完整性和用户自定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束,被称作关系的两个不变性,由关系数据库系统自动支持。

1.实体完整性

实体完整性(Entity Integrity)规则:若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值。

何为主属性?主属性是指候选键中的属性。关系中定义了候选键,而候选键是不能取重复值的,且候选键中的属性不能取空值。

实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是候选键整体不能取空值。例如,score(sno,cno,grade)中,若定义(sno,cno)为主键,则sno和cno两个属性都不能取空值。关于实体完整性规则的说明如下。

(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如,学生关系对应学生的集合。

(2)现实世界中的实体是可区分的,即它们具有某种唯一标识。

(3)相应地,关系模型中以主键作为唯一标识。

(4)主键中的属性即主属性不能取空值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与(2)相矛盾。

2.参照完整性

F 是关系 R 的一个或一组属性,如果 F 与关系 S 的主键相对应,则称 F 是基本关系 R 的外键,并称 R 为参照关系,基本关系 S 为被参照关系,下面举几个例子来说明。

【例2.5】 学生实体和专业实体可以用下面的关系表示,其中主键用下画线标识。

学生( 学号 ,姓名, 专业号 ,年龄)

专业( 专业号 ,专业名)

学生关系的专业号属性与专业关系的主键专业号相对应,因此专业号属性是学生关系的外键。这里专业关系是被参照关系,学生关系为参照关系。

【例2.6】 学生、课程、学生与课程之间的多对多联系可以用如下3个关系表示。

学生( 学号 ,姓名,性别,专业号,年龄)

课程( 课程号 ,课程名,学分)

成绩( 学号,课程号 ,成绩)

成绩关系的学号属性与学生关系的主键学号相对应,课程号属性与课程关系的主键课程号相对应,因此学号和课程号属性是成绩关系的外键。这里学生关系和课程关系均为被参照关系,成绩关系为参照关系。

【例2.7】 在学生关系( 学号 ,姓名,性别,专业号,年龄, 班长 )中,学号属性是主键,班长属性表示学生所在班级的班长的学号,它引用了本关系的学号属性,即班长必须是确实存在的学生的学号。

班长属性与关系本身的主键学号属性相对应,因此班长是外键。这里学生关系既是参照关系也是被参照关系。

注意: 外键并不一定要与相应的主键同名(见【例2.7】)。不过,在实际应用当中,为了便于识别,当外键与相应的主键属于不同关系时,往往给它们取相同的名字。

参照完整性(Referential Integrity)规则:若属性(或属性集) F 是基本关系 R 的外键,它与基本关系 S 的主键 K 相对应(基本关系 R S 不一定是不同的关系),则对于 R 中每个元组,在 F 上的值必须为

(1)空值;

(2) S 中某个元组的主键值。

例如,对于【例2.5】,学生关系中每个元组的专业号属性只能取下面两类值。

(1)空值,表示尚未给该学生分配专业。

(2)非空值,这时该值必须是专业关系中某个元组的专业号值,表示该学生被分配到一个已存在的专业中,即被参照关系专业中一定存在一个元组,它的主键值等于参照关系学生中的外键值。

对于【例2.6】,按照参照完整性规则,学号和课程号属性也可以取两类值:空值或目标关系中已经存在的值。但由于学号和课程号是成绩关系中的主属性,按照实体完整性规则,它们均不能取空值。所以成绩关系中的学号和课程号属性实际上只能取相应被参照关系中已经存在的主键值。

参照完整性规则中, R S 可以是同一个关系。例如对于【例2.7】,按照参照完整性规则,班长属性可以取两类值:

(1)空值,表示该学生所在班级尚未选出班长;

(2)非空值,这时该值必须是本关系中某个元组的学号值。

3.用户自定义的完整性

任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件,用户自定义的完整性(User-defined Integrity)就是针对某一具体关系数据库的约束条件,它反映的是某一具体应用所涉及的数据必须满足的语义要求。用户自定义的完整性规则包括

(1)列值非空(NOT NULL短语);

(2)列值唯一(UNIQUE短语);

(3)列值需满足一个布尔表达式(CHECK短语)。

例如,把退休职工的年龄定义为男性60岁以上,女性50岁以上,把学生成绩定义在0到100,要求学生姓名不能为空,等等。 jnQaYcHsK/hEf7DKc6IYcdnq0oK1mWb8NjccCYICaaipFW4H1YGGgZLI00mbUkmq

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