数据库原理及应用·关系数据库

3.1 概念模型的E-R表示法

3.1.1  关系

现实生活中的关系:指人与人之间,人与事物之间,事物与事物之间的相互联系,采用自然语言直接进行描述。 比如张三是李四的老师,王五是赵六的老师,常常表述为张三和李四是师生关系,王五和赵六是师生关系。

离散数学中的关系:定义为集合间笛卡尔积的子集,采用有序多元组的方式进行描述。 如果所有的教师构成一个集合T,所有的学生构成一个集合S,那么所有的师生关系R一定是T×S这个集合的子集,即R⊆T×S。上面两对师生关系一定属于这个子集,即:(张三,李四)∈R,(王五,赵六)∈R。

关系型数据库中的关系:指的是多个集合间笛卡尔积的子集,但描述方式采用的是表格的描述方式。 每个表有个表名(关系名),表头(关系的定义,每列称为一个属性,列标题为属性名),表格内容(每行代表一个元素,也称为一个元组或一条记录),前面所述的师生关系可描述为下表。
 

表3-1 师生关系
表3-2 学生关系

3.1.2 关系模式

关系的描述称为关系模式。对关系的描述,一般表示为:关系名(属性1,属性2.....属性n)

前面的师生关系可描述为:师生(教师,学生);
前面的学生关系可描述为:学生(学号,身份证号,姓名,生日,性别,院系编号)。

3.1.3 关系数据库

建立在关系理论基础上的数据库,在关系数据库中,实体和实体之间的联系均以关系(表格)的形式进行描述。

关系数据库相关概念:
元组:关系中的每一行数据称为一个元组或一条记录。如表3-1有2个元组,表3-2有4个元组。
属性:关系中的每一列称为一个属性,列的名字称属性名。如表3-1有2个属性,表3-2有6个属性。
:属性的取值范围称为该属性的域。例如属性“性别”的取值范围是【男,女】,属性“院系编号”的取值范围是学校所有的院系编号。
:也称为键,指的是取值具有唯一性的属性,可以唯一确定表中的一个元组,它可以由一个属性组成,也可以由多个属性共同组成。如表3-2中的学号和身份证号都是码,因为他们的取值具有唯一性,不同学生的学号一定不同,不同学生的身份证号也一定不同。
主码:一个关系中所有的码构成候选码,为了管理上的方便,选定一个候选码作为元组标识,这个候选码称为主码,主码的取值具有唯一性且不能为空。
 外码: 如果关系模式R中的某属性(集)k不是R的主键,而是另一个关系S的主键,则该属性(集)是关系模式R的外键。外键把不同的关系(表)联系起来,用于表达实体与实体之间的联系,并实现相应的强制性约束。 外码必须与其所参照的主码必须具有相同的域,且外码的取值只能引用参照表中主码的值或使用空值。

3.2 关系的完整性

3.2.1 关系的完整性约束

关系完整性约束是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。

完整性通常包括域完整性实体完整性参照完整性用户定义完整性,其中域完整性,实体完整性和参照完整性,是关系模型必须满足的完整性约束条件。

域完整性:域完整性指属性的值域的完整性,包括数据类型、格式、取值范围、是否允许空值等。通过域完整性可限制属性的值,把属性取值限制在一个有限的集合中。如果某个属性的域完整性是0到100范围的整数,那么它就不能是-1,55.5,200这些值。

实体完整性:实体完整性指的是关系数据库中所有的表都必须有主码,而且表中不允许存在如下两种情况的记录:(1)无主码值的记录。(2)与其他记录的主码值相同的记录。

表3-3 不满足实体完整性约束的学生关系

参照完整性:参照完整性指外码的取值必须参照主码的取值,参照的完整性要求关系中不允许引用不存在的记录。 若关系R中的属性A参照关系S中的属性B,则对于R中的每个元组在属性A上的值必须为下面两种之一:(1) 空值。(2)S中某个元组的属性B的取值。

表3-4 院系关系

用户自定义完整性:用户自定义完整性指针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求,其实就是业务规则,如一个人口登记系统添加一个公民,其出生日期不能晚于当前日期;银行取款时的取款金额不能大于当前余额等。

3.3 关系代数

3.3.1 关系代数运算符

集合运算符: 并(∪),交(∩),差(-),笛卡尔积(×);
专门关系运算符号:选择(σ),投影(π),连接(⋈),除(÷);
算术比较符号:大于(>),大于等于(≥),小于(<),小于等于(≤),等于(=),不等于(≠);
逻辑运算符: 与(∧),或(∨),非(¬);
其他运算符:更名运算符(ρ),赋值运算符( ←)。

关系代数操作的一个序列形成关系代数表达式,其运算对象是关系,运算结果也是一个关系。

3.3.2 传统的集合运算

并相容性的概念 :
关系R和S并相容指R与S必须具有相同的属性个数,并且每个相对应的属性对都具有相同的域。
R和S的对应属性名不一定要一致,若不一致,则以R关系(前一个关系)的属性名作为运算结果的属性名。

并:关系R与S的并指的是属于关系R或属于关系S的元组组成的集合,如图3-1所示,即:R∪S ={ t | t∈R∨t∈S },因为并运算是集合运算,所以运算结果中的重复元组会被消除。

图3-1 并运算

 

差:差运算由属于关系R而不属于关系S的元组组成的集合,如图3-2所示,R-S ={ t | t∈R∧t  S }。 

图3-2 差运算

   

交:关系R与关系S交运算的结果是属于关系R又属于关系S的元组组成的集合,如图3-3所示,R∩S ={ t | t∈R∧t∈S }。注意,交运算可由差运算导出,即R∩S=R-(R-S)。

图3-3 交运算

   

笛卡儿积:笛卡尔积运算作用于两个关系,R(A1, A2, . . ., An) × S(B1, B2, . . ., Bm) 的结果为关系Q ,Q具有 n + m 个属性,属性次序为Q(A1, A2, . . ., An, B1, B2, . . ., Bm)。Q对于来自R的一个元组和来自S的一个元组的每一种组合,都有一个相对应的元组。因此, 如果R 有nR 个元组,S 有nS个元组, 则R ×S有nR * nS个元组。

3.3.3 专门的关系运算

选择运算:选择运算用于从一个关系中选出满足选择条件的元组的一个子集。

表示方法为: σ<选择条件>(R)
σ(sigma) 表示选择操作,<选择条件>是作用于关系R的一个布尔表达式。

选择运算是从行的角度进行的运算,如图3-4所示。

图3-4 选择运算

投影运算:投影运算用于从一个关系中选择某些列(属性)并丢弃掉其它列(属性)而得到一个新的关系。

表示方法:π<属性列表>(R)
投影运算得到的结果关系仅包含有<属性列表>中列出的属性,并且其顺序和属性列表的顺序一致。

投影运算是从列的角度进行的运算,如图3-5所示。

图3-5 投影运算

如果属性列表只包含R的非键属性,那么结果关系中就有可能会出现重复的元组,这时投影运算将会去除结果中任何重复的元组,以保证得到的结果关系是一个有效的关系,这种做法叫重复消除。因此,投影运算得到的结果关系的元组数小于等于关系R的元组个数。

      

连接运算:每一个条件都是一个逻辑表达式,如果逻辑表达式的形式为AiθBj,则称为θ连接,其中Ai 是关系R的一个属性,Bj 是关系S的一个属性,Ai 和Bj 具有相同的域,θ是一个比较运算符{=, <,≤ , >,≥  ,≠ }。

θ为“=”的连接运算则称为等值连接,等值连接是使用最广泛的一种连接。

如果两个有共通属性(同名属性)的关系做等值连接,则可简化为自然连接,运算符为*。自然连接会将两个关系中同名的属性(组)自动设为相等并作为连接条件进行等值连接,同时将连接结果中同名的属性去掉一列。

连接运算主要是用于将两个有联系的关系关联起来,用于处理关系间的联系。R(A1, A2, . . ., An) 和S(B1, B2, . . ., Bm) 的连接表示为: R⋈<连接条件>S

连接运算是笛卡尔积运算的导出运算,其主要区别是:两个关系所有元组的组合都会出现在笛卡尔积的结果中,而只有符合连接条件的元组才会出现在连接结果中。

  

除运算:除运算的运算符为÷,其含义可以通过如下描述定义:
(1)关系R的属性为(A1,…,Ak,B1,…,Bm),关系S的属性为(B1,…,Bm,C1,…,Cn),与R与S相同的属性为(B1,…,Bm);
(2)如果R中属性(A1,…,Ak)取值相同的所有元组,其(B1,…,Bm)属性取值得到一个集合RB;
(3)关系S的在属性(B1,…,Bm )上所有取值得到一个集合SB;
(4)如果SB⊆RB,则R中这个在属性(A1,…,Ak)上的这个取值便构成R÷S的一个元组 所有满足上面运算的元组便构成R÷S关系。

   

3.3.4 其他运算

赋值运算:如果关系表达式的结果没有能够引用的名字,在后面的运算则无法引用这个结果,为了在后面的运算能够引用这个运算结果,需要指定一个关系名并将将运算赋值给这个关系名,后续的进一步运算便可直接使用这个关系名代表运算结果关系,赋值运算符为:←,表示方法为: 关系名←关系代数表达式

通过赋值运算还可以将运算结果的属性名进行修改,修改方式为: 关系名<属性名1,属性名2,…,属性名n>←关系代数表达式

注意:属性名的个数必须与关系代数表达式返回关系的属性个数相同。

更名运算:更名运算和赋值运算一样,用于给关系代数表达式运算结果命名。更名运算符为:ρ,表示方法为: ρ关系名(关系代数表达式)

通过更名运算也可以将运算结果的属性名进行修改,修改方式为: ρ关系名(属性名1,属性名2,…,属性名n)(关系代数表达式)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

官方指定Jmeter配置JVM堆内存方式

1.概述 在使用Jmeter做性能测试过程中&#xff0c;可能会应为默认设置的堆内存值较小出现堆内存溢出问题&#xff0c;此时解决的方式有两种&#xff0c;分布式测试和调大堆内存。下面介绍官方推荐调整堆内存方法。 2.调整Jmeter堆内存 2.1.介绍官方推荐堆内存调整方法(jmete…

【Proteus仿真】【Arduino单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能&#xff1a; 系统运行后&am…

渗透测试和漏洞扫描有什么区别

渗透测试和漏洞扫描是网络安全领域中非常重要的两种技术手段&#xff0c;它们都可以帮助组织或企业发现和修复系统中的漏洞和弱点。然而&#xff0c;这两种技术手段在目的、深度、方法和时间和成本等方面存在显著的区别。 首先我们来了解下渗透测试和漏洞扫描分别是什么&#x…

2023优秀开源项目获选榜名单(开放原子开源基金会)|JeecgBoot 成功入选

JeecgBoot 是一个开源的企业级低代码开发平台&#xff0c;它成功入选2023年度生态开源项目&#xff0c;这是对其十年坚持开源的认可。作为一个开源项目&#xff0c;JeecgBoot 在过去的十年里一直秉承着开放、共享、协作的理念&#xff0c;不断推动着开源社区的发展。 2023年开放…

异步编程Promise

文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误&#xff08;error&#xff09;和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中&#xff0c;promise的使…

数据可视化---直方图

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践

作者&#xff1a;森元 需求背景 新业务上线前&#xff0c;我们通常需要对系统的不同中间件进行压测&#xff0c;找到当前配置下中间件承受流量的上限&#xff0c;从而确定上游链路的限流规则&#xff0c;保护系统不因突发流量而崩溃。阿里云 PTS 的 JMeter 压测可以支持用户上…

Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现

Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用修复建议 总结 漏洞名称 漏洞描述 在Apache Tomcat中发现了一个被归类为关键的漏洞&#xff0c;该漏洞在8.5.4(Application Server Soft ware)以下。受影响的是组…

【科技前沿】数字孪生技术改革智慧供热,换热站3D可视化引领未来

换热站作为供热系统不可或缺的一部分&#xff0c;其能源消耗对城市环保至关重要。在双碳目标下&#xff0c;供热企业可通过搭建智慧供热系统&#xff0c;实现供热方式的低碳、高效、智能化&#xff0c;从而减少碳排放和能源浪费。通过应用物联网、大数据等高新技术&#xff0c;…

PaddleOCR Docker 容器快捷调用,快捷调用OCR API

文章目录 搞环境命令行测试Python调用测试转fastapi服务打包成镜像服务快速启动paddleOCR paddleOCR迎来大更新&#xff0c;搞一把新的api接口&#xff0c;直接用起来。 搞环境 搞容器&#xff1a; FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 ENV DEBIAN_FRONTENDno…

亚马逊云科技-如何缩容/减小您的AWS EC2根卷大小-简明教程

一、背景 Amazon EBS提供了块级存储卷以用于 EC2 实例&#xff0c;EBS具备弹性的特点&#xff0c;可以动态的增加容量、更改卷类型以及修改预配置的IOPS值。但是EBS不能动态的减少容量&#xff0c;在实际使用中&#xff0c;用户也许会存在此类场景&#xff1a; 在创建AWS EC2…

CleanMyMac X2024(Mac清理工具) 4.15苹果MAC电脑版

CleanMyMac X中文2024版是一款mac系统清理垃圾软件&#xff0c;CleanMyMac已经完成了向全面清理&#xff0c;优化和管理工具的转变。它的算法和功能变得更加智能&#xff0c;但外观仍然像您预期的那样简单。CleanMyMac X以极其快速和时尚的方式为您提供及时的建议&#xff0c;组…

WEB渗透—PHP反序列化(六)

Web渗透—PHP反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩…

高级算法设计与分析(一) -- 算法引论

系列文章目录 高级算法设计与分析&#xff08;一&#xff09; -- 算法引论 高级算法设计与分析&#xff08;二&#xff09; -- 递归与分治策略 高级算法设计与分析&#xff08;三&#xff09; -- 动态规划 未完待续【 高级算法设计与分析&#xff08;四&#xff09; -- 贪…

客服聊天机器人的设计方法

本文会来讨论基于文本的客服聊天机器人的设计方法。 两种客服模式 人工客服 传统的人工客服&#xff0c;完全由人工来提供客服服务&#xff0c;就是客服坐在电脑旁边&#xff0c;同时开n个聊天窗口回复客户。这种方式需要投入很多的人力&#xff0c;效率比较低下。人工客服经…

零售EDI:如何与EDEKA 建立EDI连接?

艾德卡EDEKA 是德国最大的食品零售商&#xff0c;因其采用“指纹付款”的方式进行结算&#xff0c;成为德国超市付款方式改革的先驱。 与EDEKA建立EDI连接&#xff0c;首先需要填写EDEKA提供的调查问卷&#xff0c;其中包括公司信息、EDI负责人信息、EDI供应商信息、销售部门信…

Jmeter实现CSV数据批量导入

CSV&#xff1a;逗号分隔值&#xff0c;是一种简洁且常见的数据存储格式。 1、参数化&#xff1a; 在Jmeter中&#xff0c;可以通过“用户自定义的变量”来实现参数化使操作方便&#xff0c;使用语法位&#xff1a;${参数名}&#xff0c;如下图&#xff1a; 而CSV也同理&…

android11-开机自启脚本

1. 编写myshell脚本 diff --git a/device/rockchip/rk356x/ok3568_r/myshell.sh b/device/rockchip/rk356x/ok3568_r/myshell.sh new file mode 100644 index 0000000000..c78b6d93bd --- /dev/nullb/device/rockchip/rk356x/ok3568_r/myshell.sh-0,0 1,4 #!/vendor/bin/shec…

ThinkPad E550c

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

C语言—每日选择题—Day56

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 以下叙述中正确的是&#xff08;&#xff09; A&#xff1a;\0 表示字符 0 B&#xff1a;"a" 表示一个字符常量 C&#xff1a;表…