【数据库系统概论】第二章关系数据库

news2024/10/7 6:42:12

2.1关系数据结构及其形式化定义

前面说过,数据模型由以下三部分构成

  • 数据结构
  • 数据操作
  • 数据的完整性约束条件

而如今最为重要的数据模型便是关系模型。本书所学的关系数据库就是支持关系模型的数据库系统,因此本章重点研究的也是以下三个部分

一:关系

前面说过,关系模型建立在严格的数学概念之上,只包含单一的数据结构——关系,在用户看来关系就是一张二维表

(1)域

域:是一组具有相同数据类型的值的集合

如自然数、整数、实数

(2)笛卡尔积

笛卡尔积:是一种域上面的集合运算,得到每个域中元素的所有可能的组合,它可以表示为一张二维表
a3a7da4fb5dc4e75b939fa787edcb41b.png
如果让他们做笛卡尔积,也就是排列组合,那么就会形成下面一张二维表
5de8aa8a4c94416888d9a9477cc389fc.png
由此可知,该笛卡尔积的基数为2×2×3=12,也即有12个元组

(3)关系

image.png
R:关系名
n:关系的目或度(n=1时称为单元关系,n=2时称为二元关系)
关系既然是笛卡尔积的子集(有限子集),所以关系也是一张二维表

表的每一行对应一个元组,表的每一列对应一个域
由于域可以相同,为了区分,必须对每列起一个名字,称为属性(比如上面的表中研究生和导师都是人,为了区分,所以才取了不同的名字)

码相关概念:

以下面关系为例
image.png
候选码:若关系中的某一属性组(注意是组不是某单个属性,当然有时属性组也可能只有一个属性)能唯一地标识一个元组,而其子集不能,则该属性组称之为候选码
至于什么是元组嘛,这是笛卡尔积当中的概念:
image.png
上面关系中,学号是无法区分的,因为学号虽然不重复,但一个学生可能会对应多个课程,这就导致学号无法唯一标识一个元组。因此这里(学号,课程名)可以作为一个候选码

需要注意的是候选码不一定只有一个,可能有多个,只要满足条件即可,但在本例中确实只有一个

超码:能够唯一标识一条记录的属性或属性集,超码是候选码的扩充,候选码是最小的超码
上面关系中,(学号、课程名)是候选码,那么它的超集,例如(学号、课程名、姓名)、(学号、课程名、性别)就是超码

主码:某个能够唯一标识一条记录的最小属性集(候选码中的“人选之子”)
候选码可能有多个,但是数据库设计者在设计时会根据实际需求选择一个候选码作为主码

外码:不是主码且在别的关系中存在

全码:这是一种特殊情况:关系的所有属性组是这个关系模式的候选码

主属性和非属性:包含在候选码中的属性(注意是集合,不是某个候选码)称为主属性;不包含在候选码中的属性称为非主属性

上面关系中,姓名、性别和期末分数都是非主属性

关系的三种类型

关系可以有三种类型

  • 基本关系(又称为基本表):实际存在的表,是实际存储数据的逻辑表示
  • 查询表:查询结果对应的表
  • 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据

二:关系模式

  • 型(type):对某一类数据的结构和属性的说明
  • 值(value):是型的一个具体赋值

在关系数据库中,关系模式就是型,关系就是值,关系模式是对关系的描述,具体来说要描述以下方面

  • 元组集合的结构(由哪些属性构成、这些属性来自哪些域、属性与域之间的映像关系)
  • 元组语义以及完整性约束
  • 属性之间的数据依赖关系

image.png
image.png

2.2关系操作

(1)基本的关系操作

关系模型常用关系操作如下。
ce7b1b5ce24e4a9982040a3d16c4b455.png

(2)关系数据语言的分类

关系数据语言可分为三类,如下

  • 关系代数语言
  • 关系演算语言
  • 结构化查询语言

2.3关系的完整性

关系完整性规则是对关系的某种约束条件,这些约束条件实际上是现实世界的要求,例如性别只能有男、女两种取值

关系模型中有如下三类完整性约束:

  • 实体完整性(entity integrity)
  • 参照完整性(referential integrity)
  • 用户自定义完整性(user-defined integrity)

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

(1)实体完整性

实体完整性:若属性A是基本关系R RR的主属性,则属性A不能取空值

例如“选修(学号,课程号,成绩)”关系中,若(学号,课程号)为主码,则学号和课程号都不能取空值

(2)参照完整性

A:参照关系

【例1】如下两个关系中,学生关系引用了专业关系的主码“专业号”,也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值
62c4d790353a4d1fb10de4b7674e8b7c.png
【例2】如下三个关系中,选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”,也就是说,选修关系中某些属性的取值需要参照其他关系的属性取值
f7b8fea4854f4946b33c3bc346418b1c.png
【例3】还有,同一关系内部也可能存在引用关系。比如在学生(学号,姓名,性别,专业号,年龄,班长)关系中,“学号”属性是主码,“班长”属性表示该学生所在班级的班长的学号,它引用了本关系“学号”属性,即“班长”必须是确实存在的学生的学号
7e72d2b8fe1447d3a217d2688881065d.png
详解参照完整性规则:(要么没有,如果有一定是在存在的元素中去找)

  • 要么取空值(此时F的每个属性值均为空值)
  • 要么等于S中某个元组的主码值

因此对于【例1】,学生关系中每个元组的专业号只能取下面两类值

  • 空值:表示该学生尚未分配专业
  • 非空值(且该值必须是专业关系中某个元组的专业号值):表示该学生不能分配到一个不存在的专业中

而对于【例2】,按照道理来说“学号”和“课程号”也可以取两类值,但是“学号”和“课程号”它作为的是选修关系的主码,所以如果取空值的话将会违背实体完整性规则

(3)用户自定义完整性

用户自定义完整性1针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,例如某个属性必须取唯一值,某个非主属性不能取空值等等

2.4关系代数

传统的集合运算

(1)并(union)

并:对于关系R和S,并操作就是将两个关系上下拼在一起形成一个新的关系,记为R∪S
1e445308de584ef6a66c42614c130844.png

(2)差(except)

差:对于关系R和S,求他们的差,就是在R中去掉两个关系中所有相同的行,形成一个新的关系,记为R-S
5365c0ef651f4b2ea34e296bf6abccb8.png

(3)交(intersection)

交:对于关系R和S,求他们的交,就是选出两个关系中所有相同的行,形成一个新的关系,记为R∩S
所以R∩S=R -( R − S )
3122590b5043409f931639db282ca34c.png

(4)笛卡尔积(cartersian product)

笛卡尔积:对于关系R和S,求他们的笛卡尔积,就是两个关系所有元组的不同排列组合,形成一个新的关系,记为R×S
b3cbbddfaa284693ad281a8b9763ec56.png

专门的关系运算

注意:在下面的叙述中有时会用到如下三种关系

  • 学生关系Student
  • 课程关系Course
  • 选修关系SC

11d35f18f05743dc9588c3359af84b9c.png

(1)选择(selection)

选择:从行的角度出发,在关系R RR中选择满足条件的元组然后组成新的关系。“满足条件”意味着有条件表达式,其运算符如下
a66cc32f63a84e52944846cacdbbbf3d.png
此表格中,都是选择符号下面,建立关系可以用到的运算符

**例如:**可在关系Student中查询所有IS系的学生,查询结果形成一个关系,记为$σ
Sdept=

IS

(Student)$
2e860e364e8a415c94730268626ca3af.png
再比如可在关系Student中查询所有年龄小于20的学生
σ S a g e < 20 ( S t u d e n t ) σ Sage<20 (Student) σSage<20(Student)
037d251aaa244e4c9bc329d6164c9cc6.png

(2)投影(projection)

选择:从列的角度出发,选择满足条件的若干属性列组成新的关系
投影之后取消了原关系中的某些列,当然也有可能会取消某些元祖(因为一旦取消了某些属性列后就极有可能出现重复行),所以一定注意消除完全相同的行(有消除重复行的功能)


比如在关系Student中查询都有哪些系
$∏ S d e p t ( S t u d e n t )
$
注意投影要取消重复的CS元组
75b7d103b71f4215ab762ed1cd4b22db.png

(3)连接(join)

A:等值连接和自然连接

等值连接:可以按照如下步骤考虑,最终形成新的关系,记为

  • 首先找到关系R和S中属性相同的列
  • 然后找到两列中相同的元素
  • 将相同元素所在的行组成新的一行,需要用【关系.属性】的格式区两个关系中相同的属性

342697b6e2264e60b79d305ccd209119.png

自然连接:它是一种特殊的等值连接,在等值连接的结果中去掉重复列即可
46cd1e28461d46e3ae592d80bbdca48c.png

B:外连接

悬浮元组的概念:R和S在做自然连接时,R中某些元组有可能在S中不存在公共属性上值相等的元组,就会造成R RR中这些元组在操作时被舍弃(反过来S SS也是这样)。例如上图自然连接中就舍弃了R RR的第4个元组和S SS的第5个元组


外连接:若将悬浮元组保留在自然连接的结果中,而在其他属性上填NULL,那么这种连接就叫做外连接,同时

  • 左外连接:只保留左边关系R中的悬浮元组
  • 右外连接:只保留右边关系R中的悬浮元组

4c7f849ec1d2469e974f9e3d7d36044e.png

(4)除(division)

除:是笛卡尔积的逆运算,对于关系R和S,求R÷S可按如下步骤考虑

  • 研究对象是R和S中相同的属性列
  • 在R中挑选元祖,所挑选的元组一定满足它的属性均出现在S对应相同属性列的所有属性集合内

dfee8fc004f9464bb72927b7426c3816.png

除法相关例题
2.10 查询至少选修1号课程和2号课程的学生…

本章习题

image.png
image.png
image.png
image.png
image.png
image.png
image.png

student(sno,sname,ssex,sage,sdept)couse(cno,cname,cpno,credit),sc(sno,cno,grade)用关系代数表达下列查询。

  1. 查询计科系女生的学号与姓名
  2. 查询所选课程至少有一门成绩大于70分的学生的学号
  3. 查询所选课程成绩全部大于70分的学生的学号
  4. 查询既选修了1号课程又选修了3号课程的学生学号
  5. 查询选修了1号课程但没有选修3号课程的学生学号
  6. 查询选修了1号课程或选修了3号课程的学生学号
  7. 查询每门课的直接先修课程号
  8. 查询每门课的间接先修课程号
  9. 查询选修了数据库这门课的学生的学号与姓名
  10. 查询选修了全部课程的学生的学号与姓名9b6e9a7b5580b67ba9961942639835ab.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1084168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unity发布微信小游戏,未找到 game.json报错原因

unity发布微信小游戏&#xff0c;未找到 game.json报错原因 同一个问题相隔一年遇到两次&#xff0c;两次原因都不一样&#xff0c;记录一下&#xff0c;以后不要再掉坑里 原因一&#xff1a;申请的appID是小程序不是小游戏 解决方法&#xff1a;需要在程序平台修改服务类目 如…

外发文件怎么保存

文件外发是企业日常业务中常见的场景&#xff0c;外发整个流程涉及外发的渠道、外发文件的大小、外发的效率、外发的合规性、文件的保存和管理等一系列的过程。外发文件的保存可以从两个角度着手&#xff1a; 一、接收方 接收方首先要对接收到的文件进行分级和分类&#xff0…

第P9周-YOLOv5Backbone模块

CSP Bottleneck块和C3 类的设计使其非常适合目标检测任务&#xff0c;充分考虑了多尺度特征融合、梯度流动和计算效率等因素。C3 类以及CSP&#xff08;Cross Stage Partial&#xff09; Bottleneck块作为YOLOv5中的一部分&#xff0c;具有以下优势&#xff0c;相对于传统的普通…

京东商品品牌数据采集接口,京东商品详情数据接口,京东API接口

采集京东商品品牌数据的方法如下&#xff1a; 打开网页。在首页【输入框】中输入目标网址批量输入多个关键词并搜索。创建【循环列表】&#xff0c;采集所有商品列表中的数据。编辑字段。创建【循环翻页】&#xff0c;采集多页数据。设置滚动和修改【循环翻页】XPath。启动采集…

日常开发中的图片处理系列工具

一键保存谷歌浏览器当前网页的图片和视频等的插件。 视频图片音乐下载助手_3.1.3_chrome扩展插件下载_极简插件 可高效实现下载管理&#xff0c;网页图片&#xff0c;视频&#xff0c;音频等内容的嗅探和下载&#xff0c;同时扩展集成多个网站的智能脚本&#xff0c;快速提取你…

1600*C. Hamburgers(二分贪心)

Problem - 371C - Codeforces 解析&#xff1a; 二分答案&#xff0c;每次check当前能做的蛋糕数量&#xff0c;判断剩余材料和金钱能否做出来。 注意check中的乘积可能会爆long long&#xff0c;所以二分右边界需要设置1e14以内&#xff08;因为可能会乘一个10000&#xff09;…

element-plus el-cascader 级联组件清空所选数据方法

话不多说直接上代码 import {ref, Ref, reactive} from vue; const cascaderOrg:Ref ref<any>(null) //获取级联组件的ref ref名称即cascaderOrg cascaderOrg.value.cascaderPanelRef.clearCheckedNodes(); //清空所选数据借用官方文档展示该方法 相关细节描述及全…

3.简单场景构建

在新建的项目中&#xff0c;默认存在 Main Camera 和 Directional Light两个对象。若是缺失&#xff0c;可通过选择菜单中的 Game Object->Camera 和 Geme Object->Light->Directional Light进行创建。 1.添加地形及底图 通过在Cesium面板中选择 Cesium World Terrai…

redis如何实现缓存预热

在业务系统中&#xff0c;我们需要在程序启动的时候加载一些常用的数据到内存数据库中&#xff0c;从而减少业务数据库的压力。这就是我们常提到的缓存预热。官方一点的解释是这样的&#xff1a; 缓存预热是一种在程序启动或缓存失效之后&#xff0c;主动将热点数据加载到缓存中…

使用注解新开事务 @Transactional

使用注解新开事务 Transactional(propagation Propagation.REQUIRES_NEW)

QSS样式表的使用

QSS样式表的使用 Chapter1 【Qt】样式表的使用——设置样式的方法一、简述二、开始总结1、先谈谈我们设置样式有几种方法2、再谈谈这几种设置样式方法的优缺点 个人建议 Chapter2 Qt样式表总结Chapter3 【QT】史上最全最详细的QSS样式表用法及用例说明Chapter4 Qt样式表使用总结…

计算机的计算单位

文章目录 前言一、容量单位二、速度单位1.网络速度2.CPU频率 总结 前言 今天给大家介绍计算机的计算单位&#xff0c;分为两个板块&#xff1a;容量单位、速度单位。 一、容量单位 对于容量单位&#xff0c;大家在日常生活中应该都有所了解&#xff0c;比如说 768M 的光盘、4…

内网穿透的应用-使用eXtplorer本地搭建免费在线文件管理器并实现远程登录

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件&#xff0c;是互联网最重要的应用之一&#xff0c;无论是…

PMP考试知识点(干货码住)

一、需要记忆的公式 1. 三点估算是指通过期望值、标准差和方差来进行估算的方法&#xff1b; 2. 关键路径计算包括ES、EF、LS、LF、总浮动时间和自由浮动时间等指标&#xff1b; 3. 挣值计算是一种常用的项目管理方法&#xff0c;包括CPI、SPI、ETC、EAC和TCPI等指标&#x…

为什么MyBatis是Java数据库持久层的明智选择

在Java应用程序的开发中&#xff0c;选择合适的数据库持久层框架至关重要。一个明智的选择可以帮助开发人员更好地管理数据库交互、提高性能和简化开发工作。 &#xff08;一&#xff09;为什么要选MyBatis JDBCHibernate / JPAMyBatis简单直接ORM轻量动态SQL关联查询开发效率…

VAE模型(详细推导+实例代码)

文章目录 EM算法思路E步M步直观感觉 GMM模型VAEVAE思想从GMM到VAE公式推导重参数VAE神经网络另一个视角的VAE思想为什么引入encoder为什么要重参数噪声与重建 Discrete VAE 本文会从EM算法&#xff0c;GMM模型一步一步的的推导&#xff0c;在过渡到VAE模型&#xff0c;如果有熟…

博华网龙设备命令执行漏洞复现 [附POC]

文章目录 博华网龙设备命令执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 博华网龙设备命令执行漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&…

【Vue】之Vuex的入门使用,取值,修改值,同异步请求处理---保姆级别教学

一&#xff0c;Vuex入门 1.1 什么是Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理库。它用于管理应用程序中的共享状态&#xff0c;它采用集中式存储管理应用的所有组件的状态&#xff0c;使得状态的管理变得简单和可预测 官方解释&#xff1a;Vuex 是一个专为 Vue.js 应…

Python数据分析实战-实现Kruskal-Wallis H检验(附源码和实现效果)

实现功能 当需要比较多个&#xff08;大于两个&#xff09;独立样本之间的差异时&#xff0c;可以使用非参数的Kruskal-Wallis H检验。Kruskal-Wallis H检验是一种非参数的方差分析方法&#xff0c;用于检验多个独立样本是否来自于相同的总体分布。 在Python中&#xff0c;你…

英国生物技术公司【AstronauTx】完成4800万英镑A轮融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于英国伦敦的生物技术公司【AstronauTx】今日宣布已完成4800万英镑A轮融资 。 本轮融资由诺华风险基金领投&#xff0c;布兰登资本&#xff08;Brandon Capital&#xff09;、MPM Capital、…