《数据库技术原理与应用教程》一3.5.3关系模型的数据结构、操纵和约束

简介:

本节书摘来华章计算机《数据库技术原理与应用教程》一书中的第3章 ,第3.5.3节,徐洁磐 操凤萍 编著更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5.3关系模型的数据结构、操纵和约束

关系是一种数学理论,运用这种理论所得到的逻辑模型称关系模型,关系模型由关系数据结构、关系操纵及关系约束三部分组成。

1 关系数据结构
(1)表结构
关系模型统一采用二维表结构。二维表由表框架(frame)及表元组(tuple)组成。表框架由n个命名的属性组成,n称为属性元数(arity),每个属性有一个取值范围(即值域)。
在表框架中可以按行存放数据,每行数据称为一个元组,或称表的实例(instance)。实际上,一个元组由n个元组分量组成,每个元组分量是表框架中每个属性的投影值。一个表框架可以存放m个元组,m称为表的基数(cardinality)。
一个n元表框架及框架内m个元组构成了一个完整的二维表。表34给出了二维表的一个例子,这是一个有关学生(S)的二维表。
表3-4二维表的一个实例


image

二维表一般满足下面七个性质:

  • 二维表中元组个数是有限的——元组个数有限性。
  • 二维表中元组均不相同——元组的唯一性。
  • 二维表中元组的次序可以任意交换——元组的次序无关性。
  • 二维表中元组的分量是不可分割的基本数据项——元组分量的原子性。
  • 二维表中属性名各不相同——属性名唯一性。
  • 二维表中属性与次序无关——属性的次序无关性(但属性次序一经确定就不能更改)。
  • 二维表中属性列中分量具有与该属性相同值域——分量值域的同一性。

(2)关系
关系(relation) 是二维表的一种抽象,它是关系模型的基本数据单位。具有n个属性的关系称n元关系,n=0时称空关系。每个关系有一个名称(即关系名),关系名及关系中的属性构成了关系框架。设关系名为R,其属性为a1, a2, …, an,则该关系的框架是:
R(a1, a2, …,an)
表34所示的关系框架可以表示成:
S(sno,sn,sd,sa)
每个关系有m个元组,设关系的框架为R(a1, a2,…, an),则其元组必具有下面的形式:
(a11, a12, … , a1n)
(a21, a22, … , a2n)

(am1, am2, … , amn)
其中aij(i∈{1,2,…,n},j∈{1,2,…,m})为元组分量。
按关系框架所组成的关系元组集合可构成一个关系。如表34所示的关系R可表示为:R={(98001,张曼英,CS,18),(98002,丁一明,CS,20),(98003,王爱国,CS,18),(98004,李强,CS,21)}。
一个语义相关的关系集合构成一个关系数据库(relational database)。而语义相关的关系框架集合则构成关系数据库模式(relational database schema),简称关系模式(relational schema)。
关系模式支持子模式,关系子模式是关系数据库模式中用户所见到的那部分数据描述。关系子模式也是二维表结构,它对应着用户数据库,即视图(view)。
关系与二维表是一个概念的两种不同表示形式,一般在理论研究中用关系讨论而在实际应用中则用二维表表示,在本书中基本上按此方法但并不严格区分。
(3)键
键是关系模型中的一个重要概念,它具有标识元组、建立元组间联系等重要作用。

  • 键(key):二维表中凡能唯一最小标识元组的属性集称为该表的键。
  • 候选键(candidate key):二维表中可能有若干个键,它们称为该表的候选键。
  • 主键(primary key):从二维表的所有候选键中选取一个作为用户使用的键称为主键。主键一般也简称键。
  • 外键(foreign key):若表A中的某属性集是表B的键,则称该属性集为A的外键。

表一定有键,因为如果表中所有属性子集均不是键则至少表中属性全集必为键,因此也一定有主键。
(4)关系与ER模型
虽然关系的结构简单,但它的表示范围广,ER模型中的属性、实体(集)及联系均可用它表示,表35给出了ER模型与关系间的比较。

image

在关系模型中,关系既能表示实体集又能表示联系。表36给出了某公司职工间上下级联系的关系表示。

image

2关系操纵
关系模型的数据操纵就是建立在关系上的一些操作,一般有查询、删除、插入及修改四种操作。
(1)数据查询
用户可以查询关系数据库中的数据,它包括一个关系内的查询以及多个关系间的查询。
1)一个关系内查询的基本单位是元组分量,其基本过程是先定位后操作。所谓定位,包括纵向定位与横向定位,纵向定位就是指定关系中的一些属性(称列指定),横向定位就是选择满足某些逻辑条件的元组(称行选择)。通过纵向与横向定位后就可确定一个关系中的元组分量了。在定位后即可进行查询操作,即将定位的数据从关系数据库中取出并放入至指定内存。
2)多个关系间的数据查询可分为3步进行。第1步将多个关系合并成一个关系,第2步对合并后的一个关系进行定位,最后进行查询操作。其中,第2步与第3步可看作一个关系内的查询,故我们只介绍第1步。多个关系的合并可分解成两个关系的逐步合并,如果有3个关系R1、R2与R3,那么合并过程是先将R1与R2合并成R4,然后再将R4与R3合并成最终结果R5。
因此,对关系数据库的查询可以分解成三个基本定位操作与一个查询操作:

  • 一个关系内的属性指定。
  • 一个关系内的元组选择。
  • 两个关系的合并。
  • 查询操作。

(2)数据删除
数据删除的基本单位是元组,用于将指定关系内的指定元组删除。它也分为定位与操作两部分,其中定位部分只需要横向定位而无需纵向定位,定位后即是执行删除操作。因此,数据删除可以分解为两个基本操作:

  • 一个关系内的元组选择。
  • 关系中元组的删除操作。

(3)数据插入
数据插入仅用于一个关系,即在指定关系中插入一个或多个元组。插入数据时不需定位,只需将元组插入关系。因此,数据插入只有一个基本操作:
关系中的元组插入操作。
(4)数据修改
数据修改是在一个关系中修改指定的元组与属性值。数据修改不是一个基本操作,它可以分解为两个更基本的操作:先删除需修改的元组,然后插入修改后的元组。
(5)关系操作小结
以上四种操作的对象都是关系,而操作结果也是关系,因此它们都是建立在关系上的操作。这四种操作可以分解成6种基本操作。这样,关系模型的数据操纵可以总结如下:
1)关系模型数据操纵的对象是关系,而操纵结果也是关系。
2)关系模型基本操作有如下六种(其中三种为定位操作,三种为查询、插入及删除操作):

  • 关系属性的指定。
  • 关系元组的选择。
  • 两个关系合并。
  • 关系的查询操作。
  • 关系中元组的插入操作。
  • 关系中元组的删除操作。

(6)空值处理
在关系元组的分量中允许出现空值(null value)以表示信息的空缺,空值的含义如下:

  • 未知的值。
  • 不可能出现的值。

在出现空值的元组分量中一般可用NULL表示。目前的关系数据库系统都支持空值,但是它们都具有如下两个限制:
1)关系的主键中不允许出现空值。因为主键是关系元组的标识,如主键为空值则失去了其标识的作用。
2)需要定义有关空值的运算。在算术运算中如果出现空值则其结果为空值,在比较运算中如果出现空值则其结果为F(假)。此外,在统计时,如果SUM、AVG、MAX、MIN中有空值输入,其结果也为空值,而在作COUNT时如有空值输入则其值为0。
3 关系中的数据约束
关系模型允许定义三类数据约束,分别是实体完整性约束、参照完整性约束以及用户定义的完整性约束。此外,关系的安全性约束、故障恢复与多用户的并发控制实际上也是数据约束,其具体说明可见第5章。

相关文章
|
11天前
|
算法 安全 测试技术
golang 栈数据结构的实现和应用
本文详细介绍了“栈”这一数据结构的特点,并用Golang实现栈。栈是一种FILO(First In Last Out,即先进后出或后进先出)的数据结构。文章展示了如何用slice和链表来实现栈,并通过golang benchmark测试了二者的性能差异。此外,还提供了几个使用栈结构解决的实际算法问题示例,如有效的括号匹配等。
golang 栈数据结构的实现和应用
|
2天前
|
消息中间件 存储 Java
数据结构之 - 深入探析队列数据结构: 助你理解其原理与应用
数据结构之 - 深入探析队列数据结构: 助你理解其原理与应用
11 4
|
24天前
|
存储 Java
【数据结构】优先级队列(堆)从实现到应用详解
本文介绍了优先级队列的概念及其底层数据结构——堆。优先级队列根据元素的优先级而非插入顺序进行出队操作。JDK1.8中的`PriorityQueue`使用堆实现,堆分为大根堆和小根堆。大根堆中每个节点的值都不小于其子节点的值,小根堆则相反。文章详细讲解了如何通过数组模拟实现堆,并提供了创建、插入、删除以及获取堆顶元素的具体步骤。此外,还介绍了堆排序及解决Top K问题的应用,并展示了Java中`PriorityQueue`的基本用法和注意事项。
24 5
【数据结构】优先级队列(堆)从实现到应用详解
|
2天前
|
关系型数据库 数据挖掘 数据库
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
9 1
|
3天前
|
存储 算法 分布式数据库
【初阶数据结构】理解堆的特性与应用:深入探索完全二叉树的独特魅力
【初阶数据结构】理解堆的特性与应用:深入探索完全二叉树的独特魅力
|
1月前
|
存储 机器学习/深度学习
【数据结构】二叉树全攻略,从实现到应用详解
本文介绍了树形结构及其重要类型——二叉树。树由若干节点组成,具有层次关系。二叉树每个节点最多有两个子树,分为左子树和右子树。文中详细描述了二叉树的不同类型,如完全二叉树、满二叉树、平衡二叉树及搜索二叉树,并阐述了二叉树的基本性质与存储方式。此外,还介绍了二叉树的实现方法,包括节点定义、遍历方式(前序、中序、后序、层序遍历),并提供了多个示例代码,帮助理解二叉树的基本操作。
48 13
【数据结构】二叉树全攻略,从实现到应用详解
|
1月前
|
存储 Java 索引
【数据结构】链表从实现到应用,保姆级攻略
本文详细介绍了链表这一重要数据结构。链表与数组不同,其元素在内存中非连续分布,通过指针连接。Java中链表常用于需动态添加或删除元素的场景。文章首先解释了单向链表的基本概念,包括节点定义及各种操作如插入、删除等的实现方法。随后介绍了双向链表,说明了其拥有前后两个指针的特点,并展示了相关操作的代码实现。最后,对比了ArrayList与LinkedList的不同之处,包括它们底层实现、时间复杂度以及适用场景等方面。
50 10
【数据结构】链表从实现到应用,保姆级攻略
|
11天前
|
存储 搜索推荐 数据挖掘
数据库的应用
数据库在众多领域发挥着重要作用。在企业管理中,它助力客户关系、人力资源和财务管理,提升决策科学性和效率;金融领域中,银行系统、证券交易和保险行业依托数据库保障交易安全、投资决策及风险管理;医疗行业则通过电子病历管理和数据分析提高诊疗准确性并优化资源配置;电子商务运用数据库实现商品、订单管理和用户行为分析,增强购物体验;教育领域中,数据库支持学生信息、教学资源管理和教育数据分析,促进家校沟通与教学质量提升;科学研究方面,数据库促进数据共享、科研项目管理和深入数据分析,加速科学进步。
18 3
|
15天前
|
Cloud Native 关系型数据库 分布式数据库
阿里云牵手海亮科技,共建“教育科技数据库创新应用中心”
近日,阿里云与世界500强旗下、国内领先的教育服务提供商海亮科技集团(以下简称“海亮科技”)达成合作,联合成立“教育科技数据库创新应用中心”。双方将充分整合优势资源,共同推进教育科技领域的数据库技术研究和国产数据库的应用与发展。
54 7
|
12天前
|
存储 数据安全/隐私保护 Python
Python常用数据结构——字典的应用
Python常用数据结构——字典的应用
14 2