关系数据库——关系操作和关系完整性

简介: 关系数据库——关系操作和关系完整性

一、关系操作

1.基本的关系操作

常用的关系操作

查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作两大部分。

关系的查询表达能力很强,是关系操作中最主要的部分。

查询操作又可以分为:

选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、差(Except)、交(Intersection)、笛卡尔积等。

其中选择、投影、并、差、笛卡尔积是5种基本操作。

其他操作是可以用基本操作来定义和导出的。就像乘法可以用加法来定义和导出一样。

关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合(set-at-a-time)的方式。相应地,非关系数据模型的数据操作方式则为一次一记录(record-at-a-time)的方式。

2.关系数据语言的分类

关系代数语言

用对关系的运算来表达查询要求

代表:ISBL

关系演算语言

谓词来表达查询要求。

  1. 元组关系演算语言:谓词变元的基本对象是元组变量
    代表:APLHA,QUEL
  2. 域关系演算语言:谓词变元的基本对象是域变量
    代表:QBE

具有关系代数和关系演算双重特点的语言

代表:SQL (Structured Query Language)


二、关系的完整性

关系模型中有三种完整性:实体完整性、参照完整性和用户定义的完整性。

其中,实体完整性和参照完整性是关系模型中必须满足的完整性约束条件,被称作是关系的两个不变性

名词解释

  1. 候选码:属性组(单个属性也可做一组),该属性组的值能唯一地标识一个元组,而其子集不能。
  2. 主属性:候选码里的诸属性。
  3. 非码属性:不在任何候选码中的属性。
  4. 主码:若有多个候选码,选定其中一个为主码(即主码是候选码中的一个)。
  5. 外码:一个或一组属性。不是本关系的码,且是另一个关系的主码。本关系为参照关系,另一个关系为被参照关系。

1.实体完整性(Entity Integrity)

实体完整性规则

若属性A是基本关系R的主属性,则A不能取空值

若主码由若干属性组成,则所有这些主属性都不能取空值。

空值

“不知道”、“不存在”、“无意义”……不是0

说明

  1. 实体完整性的规则是针对基本关系而言的。一个基本表通常对应显示世界的一个实体集
  2. 现实世界中的实体是可区分的,即它们有某种唯一性标识
  3. 相应的,关系模型中以主码作为唯一标识
  4. 主码中的属性即主属性不能取空值

2.参照完整性(Referential Integrity)

参照完整性规则

若属性或属性组F是基本关系R的外键,它与基本关系S的主键Ks相对应(基本关系R和S不一定是不同的关系),则对于R中的每个元组在F上的值必须为:

(1)空值,F的每个属性值均为空值。

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

参照的关系中的属性值必须能够在被参照关系找到或者取空值,否则不符合数据库的语义。

在实际操作时如更新、删除、插入一个表中的数据,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确,不正确则拒绝操作。

参照关系—→被参照关系(目标关系)

显然,目标关系S的主码Ks和参照关系R的外码F必须定义在同一个(或同一组)域上。

引用关系

同一关系

在参照完整性规则中,R和S可以是同一个关系。

在学生(学号,姓名,性别,年龄,专业号,班长)关系中,“学号”属性是主键,“班长”属性表示该学生所在班级的班长的学号,因此它应用的本关系“学号”属性。按照参照完整性规则,“班长”属性可以取以下两类值:

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

(2)非空值,该值必须是本关系中某个元组的学号值,即某个当选班长的学生的学号值。

两个关系间

如学生实体和专业实体可以用下列关系模式来表示,其中学号是学生的主键,专业号是专业的主键:

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

专业(专业号,专业名)

这两个关系之间存在着属性的引用(含有相同的属性“专业号”),学生关系引用了专业关系的主键“专业号”,专业号则是学生关系的外键。而且按照参照完整性规则,学生关系(并非专业关系)中的每个元组的“专业号”属性只能取两种值:

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

(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中去。就是说学生关系中的某个属性的取值需要参照专业关系的属性取值。

两个以上的关系

两个以上的关系也可以存在引用关系,学生、课程、选课(学生与课程)之间的联系可以用下列三个关系来表示:

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

专业(专业号,专业名)

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

这里的“学号”和“课程号”属性都是选课关系的外键,但只有“学号”和“课程号”联合起来才能确定选课的关系,所以这里存在一个复合主键关系,(学号,课程号)是选课关系的主键。虽然按照参照完整性可以取两类值,但是由于实体完整性,复合主键中的每个属性均不能取空值。所以选课关系中的”学号“和”课程号”属性实际上只能取被参照关系(学生关系和专业关系)中已经存在的主键值。即选课关系中的“学号”值必须是确实存在的学生的学号,学生关系中有该学生的记录;选课关系中的“课程号”值也必须是确定存在的课程的课程号,即课程关系中有该课程的记录。

3.用户定义的完整性(User-defined Integrity)

用户自定义完整性指针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求

某个属性必须取唯一值、某个非主属性也不能取空值的

用户定义完整性可以涵盖实体完整性、域完整性、参照完整性等完整性类型。

例如某个属性必须取唯一值,某个非主属性也不能取空值,某个属性的取值范围在0-100之间等

相关文章
|
4月前
|
关系型数据库 数据库
关系型数据库的数据完整性
关系型数据库通过一系列机制和技术手段来确保数据的完整性,从而为用户提供准确、一致和可靠的数据服务。这些措施对于保障数据的质量、满足用户需求以及维护系统的稳定运行具有重要意义。
41 5
|
4月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
2月前
|
存储 SQL 关系型数据库
数据库事务:确保数据完整性的关键20
【7月更文挑战第20天】事务是数据库操作的基本逻辑单位,确保数据一致性。ACID原则包括:原子性(操作全成或全败),一致性(事务前后数据合法性),隔离性(并发操作互不影响),持久性(提交后更改永久保存)。MySQL的InnoDB引擎支持事务,通过undo log实现回滚,redo log确保数据持久化。开启事务可使用`BEGIN`或`START TRANSACTION`,提交`COMMIT`,回滚`ROLLBACK`。
161 70
|
4月前
|
关系型数据库 数据库 数据安全/隐私保护
关系型数据库的数据完整性保障
【5月更文挑战第9天】关系型数据库的数据完整性保障
79 1
|
4月前
|
存储 安全 算法
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
100 0
|
2月前
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
存储 数据管理 数据库
理解数据库中的参照完整性
【6月更文挑战第13天】数据库设计旨在创建和维护企业的数据管理系统,确保数据完整性和消除冲突。好的数据库设计应减少冗余,保证信息准确完整,并满足处理和报告需求。设计工具包括E-R图和UML等。
136 2
理解数据库中的参照完整性
|
2月前
|
存储 关系型数据库 MySQL
|
3月前
|
缓存 分布式计算 关系型数据库
数据管理DMS操作报错合集之当进行RDS实例的可用区迁移时,提示“缓存清理”是什么意思
数据管理DMS(Data Management Service)是阿里云提供的数据库管理和运维服务,它支持多种数据库类型,包括RDS、PolarDB、MongoDB等。在使用DMS进行数据库操作时,可能会遇到各种报错情况。以下是一些常见的DMS操作报错及其可能的原因与解决措施的合集。
|
3月前
|
存储 数据采集 NoSQL
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
126 1