《数据库原理与应用(第3版)》——3.4 关系模型的完整性约束

简介:

本节书摘来自华章出版社《数据库原理与应用(第3版)》一 书中的第3章,第3.4节,作者:何玉洁,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 关系模型的完整性约束

数据完整性是指数据库中存储的数据是有意义的或正确的。关系模型中的数据完整性规则是对关系的某种约束条件。它的数据完整性约束主要包括三大类:实体完整性、参照完整性和用户定义的完整性。

3.4.1 实体完整性

实体完整性是保证关系中的每个元组都是可识别的和唯一的。
实体完整性是指关系数据库中所有的表都必须有主键,而且表中不允许存在无主键值的记录和主键值相同的记录。
因为若记录没有主键值,则此记录在表中一定是无意义的。由于关系模型中的每一行记录都对应客观存在的一个实例或一个事实。比如,表3-1中的第一行数据描述的就是“李勇”这个学生。如果将表3-1中的数据改为表3-6所示的数据,可以看到,第1行和第3行数据没有主键值,查看其他列的值发现这两行数据的其他各列的值都是一样的,这会产生这样的疑问:到底是在计算机系中存在名字、年龄、性别完全相同的两个学生,还是重复存储了李勇学生的信息?这就是缺少主键值时造成的情况。如果为其添加主键值为表3-7所示数据,则可以判定在计算机系有两个姓名、年龄、性别完全相同的学生。如果为其添加主键值为表3-8所示数据,则可以判定在这个表中有重复存储的记录,而在数据库中存储重复的数据是没有意义的。
screenshot

当在表中定义了主键时,数据库管理系统会自动保证数据的实体完整性,即保证不允许存在主键值为空的记录以及主键值重复的记录。
关系模型中使用主键作为记录的唯一标识,在关系数据库中主属性不能取空值。关系数据库中的空值是特殊的标量常数,它代表未定义的(不适用的)或者有意义但目前还处于未知状态的值。比如当向表3-2所示的“选课”关系中插入一行记录时,在学生还没有考试之前,其成绩是不确定的,因此,我们希望此列上的值为空。空值用“NULL”表示。
3.4.2 参照完整性
参照完整性也称为引用完整性。现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系来表示的,这样就自然存在着关系与关系之间的引用。参照完整性就是描述实体之间的联系的。
参照完整性一般是指多个实体或表之间的关联关系。
例3-1 学生实体和班实体可以用下面的关系模式表示,其中主键用下划线标识:
学生(学号,姓名,性别,班号,年龄)
班(班号,所属专业,人数)
这两个关系模式之间存在着属性的引用,即“学生”关系中的“班号”引用了“班”关系的主键“班号”。显然,“学生”关系中的“班号”的值必须是确实存在的班的班号的值,即在“班”关系中有该班号的记录。也就是说,“学生”关系中的“班号”的取值参照了“班”关系中的“班号”的取值。这种限制一个关系中某列的取值受另一个关系中某列的取值范围约束的特点就称为参照完整性。
例3-2 学生、课程以及学生与课程之间的选课关系可以用如下三个关系模式表示,其中主键用下划线标识:
学生(学号,姓名,性别,专业,年龄)
课程(课程号,课程名,学分)
选课(学号,课程号,成绩)
这三个关系模式间也存在着属性的引用。“选课”关系中的“学号”引用了“学生”关系中的主键“学号”,即“选课”关系中的“学号”的值必须是确实存在的学生的学号,也就是在“学生”关系中有这个学生的记录。同样,“选课”关系中的“课程号”引用了“课程”关系中的主键“课程号”,即“选课”中的“课程号”也必须是“课程”中存在的课程号。
与实体间的联系类似,不仅两个或两个以上的关系间可以存在引用关系,同一个关系的内部属性之间也可以存在引用关系。
例3-3 有关系模式:职工(职工号,姓名,性别,直接领导职工号)
在这个关系模式中,“职工号”是主键,“直接领导职工号”属性表示该职工的直接领导的职工号,这个属性的取值就参照了该关系中“职工号”属性的取值,即“直接领导职工号”必须是确实存在的一个职工。
进一步定义外键:设F是关系R的一个或一组属性,如果F与关系S的主键相对应,则称F是关系R的外键(Foreign Key,也称为外码),并称关系R为参照关系(Referencing Relation),关系S为被参照关系(Referenced Relation)或目的关系(Target Relation)。关系R和关系S不一定是不同的关系。
显然,目标关系S的主键Ks和参照关系R的外键F必须定义在同一个域上。
在例3-1中,“学生”关系中的“班号”属性与“班”关系中的主键“班号”对应,因此,“学生”关系中的“班号”是外键,引用了“班”关系中的“班号”(主键)。这里,“班”关系是被参照关系,学生关系是参照关系。
可以用图3-3所示的图形化方法形象地表达参照和被参照关系。“班”和“学生”的参照与被参照关系的图形化表示如图3-4a所示。
在例3-2中,“选课”关系中的“学号”属性与“学生”关系中的主键“学号”对应,“课程号”属性与“课程”关系的主键“课程号”对应,因此,“选课”关系中的“学号”属性和“课程号”属性均是外键。这里“学生”关系和“课程”关系均为被参照关系,“选课”关系为参照关系,其参照关系图如图3-4b所示。
在例3-3中,职工关系中的“直接领导职工号”属性与本身所在关系的主键“职工号”属性对应,因此,“直接领导职工号”是外键。这里,“职工”关系即是参照关系也是被参照关系,其参照关系图如图3-4c所示。

screenshot
需要说明的是,外键并不一定要与相对应的主键同名(如例3-3)。但在实际应用中,为了便于识别,当外键与相应的主键属于不同的关系时,一般给它们取相同的名字。
参照完整性规则就是定义外键与被参照的主键之间的引用规则。
对于外键,一般应符合如下要求:
1)或者值为空。
2)或者等于其所参照的关系中的某个元组的主键值。
例如,对于职工与其所在的部门可以用如下两个关系模式表示,主键用下画线标识:
职工(职工号,职工名,部门号,工资级别)
部门(部门号,部门名)
其中,“职工”关系的“部门号”是外键,它参照了“部门”关系的“部门号”。如果某新来职工还没有被分配到具体的部门,则其“部门号”就为空值;如果职工已经被分配到了某个部门,则其部门号就有了确定的值(非空值)。
主键要求必须是非空且不重的,但外键无此要求。外键可以有重复值,这点我们从表3-2可以看出。

3.4.3 用户定义的完整性

用户定义的完整性也称为域完整性或语义完整性。任何关系数据库系统都应该支持实体完整性和参照完整性,除此之外,不同的数据库应用系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性就是针对某一具体应用领域定义的数据库约束条件,它反映某一具体应用所涉及的数据必须满足应用语义的要求。
用户定义的完整性实际上就是指明关系中属性的取值范围,也就是属性的域,即限制关系中的属性的取值类型及取值范围,防止属性的值与应用语义矛盾。例如,学生的考试成绩的取值范围为0~100,或取{优、良、中、及格、不及格}。

相关文章
|
3月前
|
关系型数据库 MySQL 数据库
MySQL数据库——约束
MySQL数据库——约束
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
28 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
99 1
|
13天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
13天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
22天前
|
存储 安全 算法
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
56 0
|
3月前
|
数据库
如何解决逻辑删除is_del与数据库唯一约束冲突
如何解决逻辑删除is_del与数据库唯一约束冲突
33 0
|
1月前
|
数据库
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表5、数据库操作——3、索引(Indexing)——4、约束(Constraints)
MySQL技能完整学习列表5、数据库操作——3、索引(Indexing)——4、约束(Constraints)
37 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表4、数据库设计——2、数据库规范化(Normalization)——3、实体-关系模型(ER Modeling)
MySQL技能完整学习列表4、数据库设计——2、数据库规范化(Normalization)——3、实体-关系模型(ER Modeling)
55 0

热门文章

最新文章