系统文章目录
数据库的四个基本概念:数据、数据库、数据库管理系统和数据库系统
数据库系统的三级模式和二级映射
数据库系统外部的体系结构
数据模型
关系数据库中的关系操作
SQL是什么?它有什么特点?
数据定义之基本表的定义/创建、修改和删除
数据定义之索引的创建、修改与删除
数据查询之单表查询。详细解释WHERE、OEDER BY、GROUP BY 和 HAVING
关系的完整性
数据完整性就是对关系的某种约束条件。确保数据库中数据的正确性。这些约束条件实际上就是现实世界的要求。比如我们要建立一张学生表,学生(学号,姓名,性别,专业号,年龄),我们要求用户在更新这张表的数据时,遵循一些约束条件,而不是随便的更新数据。比如要求学号必须存在、专业号必须存在、年龄必须在某个范围内等等。
关系模型中有三类完整性约束:
- 实体完整性
- 参照完整性
- 用户定义的完整性
其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件。
实体完整性
我认为实体完整性就是指能够区分表中的每个元组(即一条记录)的。就像现实世界中的实体都是可区分的,毕竟我们常说世界上没有两片相同的叶子。也就是说每个实体都有唯一的标识。在关系模型中,表中的每个元组之间也是可以区分的,这里就以主码作为唯一性标识。
主码就是一个或一组属性,所有有时也叫主属性。主码能够唯一标识一个元组。所以实体完整性规则规定主码取值唯一且非空。这样我们就可以靠主码来区分每个元组(记录)了。
-
比如前面的学生表例子:学生(学号,姓名,性别,专业号,年龄)。要想在表中区分每个元组,我们就需要一个主码,在这里我们考虑让学号作为主码。那么就要求这个学号是唯一的且不能为空。就像我们的身份证号一样。
-
当然,主码也可以是一组属性。比如选修表中:选修(学号,课程号,成绩)。这三个属性都不能单独成为主码,因为一个学号代表着一个学生,这个学生可能选修了多个课程。 所以我们为了标识选修表中的每一条记录,需要将学号和课程号这两个属性当做主码。
综上,一句话说明实体完整性就是定义了主码的取值唯一且非空。
参照完整性
现实世界中的实体之间往往存在某种联系,我们也叫关系。同理,在关系模型中,实体和实体间的联系都是用关系来描述的,这就自然存在着关系和关系间的引用。简单来说就是这个表中的某各属性值的取值可能需要参考其他表中的属性值。
比如:学生(学号,姓名,性别,专业号,年龄)、专业(专业号,专业名)。这两个关系之间存在属性的引用,这里学生表中引用了专业表中的专业号。所以学生表中的专业号必须是专业表中存在的。在这里,学生表中的专业号就是学生表的外码。
所以,参照完整性就是定义了外码的取值规则,外码要么为空,要么取它的参照关系中的主码的值。
比如学生关系中每个元组的“专业号”属性只能取下面两类值:
- 空值,表示尚未给该学生分配专业;
- 非空值,这时该值必须是专业关系中某个元组的“专业号”值,即该学生不可能分配到一个不存在的专业中,也即被参照关系“专业”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。
再比如:学生(学号,姓名,性别,专业号,年龄,班长), “班长”是外码,其属性值可以取两类值:
- 空值,表示该学生所在班级尚未选出班长;
- 非空值,这时该值必须是本关系中某个元组的学号值
用户定义的完整性
用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
比如用户定义学生表中的年龄属性只能取值在16-22之间。