数据库原理与应用(SQL)——2、关系数据库(E-R图、关系模式、关系运算、关系代数)

article/2025/9/26 14:20:41

 

目录

关系 

关系运算 

 元组、域关系演算表达式

 题目

 关系代数表达式——例

元组演算表达式——例 

域演算表达式——例


        关系数据库是以二维表形式组织数据,应用数学方法处理数据库组织的方法。目前关系数据库系统在数据管理中已占据了主导地位。

关系 

关系一个关系就是一张二维表,每个关系有一个关系名。在计算机里,一个关系可以存储为一个文件。


元组:表中的行称为元组。一行为一个元组,对应存储文件中的一个记录值。

属性:表中的列称为属性,每一列有一个属性名。属性值相当于记录中的数据项或者字段值。


属性的取值范围,即不同元组对同一个属性的值所限定的范围。例如,逻辑型属性只能从逻辑真(如.T.)或逻辑假(如.F.)两个值中取值。

关系模式:对关系的描述称为关系模式,格式为:关系名(属性名1,属性名2,...,属性名n)一个关系模式对应一个关系文件的结构。


关键字(或码):属性或属性组合,其值能够唯一的标识一个元组。


主关键字(或主码):在一个关系中可能有多个候选关键字,从中选择一个作为主关键字。主关键字在关系中用来作为插入、删除、检索元组的操作变量。


外关键(或外码):如果一个关系中的属性或属性组并非该关系的关键字,但它们是另外一个关系的关键字,则称其为该关系的外关键字。

关系是一张关系表,表的一行是一元组,所以元组的集合就是关系;

关系模式是表一行中的某些值,所以关系模式是属性的集合;

同理元组则是,属性的值的集合;

一个关系模型是若干个关系模式的集合。

 关系的数学定义:笛卡尔积( 符号X )

关系运算 

 传统的集合运算:并、交、差、除和笛卡尔积运算

关系的并:关系R和关系S的所有元组合并,再删去重复的元组,组成一个新关系,称为R和S的并


关系的差:关系R和关系S的差是由属于R而不属于S的所有元组组成的集合,即关系R中删去与S关系中相同的元组,组成一个新关系


关系的交:关系R和关系S的交是由既属于R又属于S的元组组成的集合,即在两个关系R与S中取相同的元组,组成一个新关系


关系的除:设有关系R (X,Y)与关系S (Z),其中,X、 Y、Z为属性集合。假设X、Y和Z具有相同的属性个数,且对应属性出自相同域。

        关系R(X,Y)除以S(Z〉所得的商关系是关系R在属性X上投影的一个子集,该子集和S(Z)的笛卡尔积必须包含在R(X,Y)中。(这个定义看起来很复杂,难懂,其实很好理解的,大家去网上搜一下有很多的相关知识理解!)

专门的关系运算:选择、投影、连接运算。

选择: 从关系中找出满足给定条件的所有元组称为选择。其中的条件是以逻辑表达式给出的,该逻辑表达式的值为真的元组被选取。

        这是从行的角度进行的运算,即水平方向抽取元组。经过选择运算得到的结果元组可以形成新的关系,其关系模式不变,但其中元组的数目小于或等于原来的关系中元组的个数,它是原关系的一个子集。

投影:从关系中挑选若干属性组成新的关系称为投影。

        这是从列的角度进行的运算,相当于对关系进行垂直分解。经过投影运算可以得到一个新关系,其关系所包含的属性个数往往比原关系少,或者属性的排列顺序不同。如果新关系中包含重复元组,则要删除重复元组。

自然连接:自然连接是除去重复属性的等值连接,它是连接运算的一个特例,是最常用的连接运算。

 元组、域关系演算表达式

把数理逻辑中的谓词演算应用到关系运算中,就得到了关系演算

关系演算分为元组关系演算和域关系演算,前者以元组为变量,后者以域为变量。

元组关系演算:

 在元组关系演算系统中,称 {t|Φ(t)} 为元组演算表达式。其中 t 是元组变量, Φ(t) 为元组关系演算公式,简称公式。 
它由原子公式和运算符组成。

     原子公式有三类:

    (1) R(t):  R 是关系名, t 是元组变量。 R(t) 表示 t 是 R 中的元组。

于是,关系 R 可表示为: {t|R(t)}

    (2) t[i] θ u[j] :   t 和 u 是元组变量, θ 是算术比较运算符。 t[i] θ u[j] 表示断言 “ 元组 t 的第 i 个分量与元组 u 的第 j 个分量满足比较关系 θ ” 。

例如, t[2] < u[3] 表示元组 t 的第 2 个分量小于元组 u 的第 3 个分量。

    (3) t[i] θ c 或  c θ t[i] : 这里 c 是常量,该公式表示 “t 的第 i 个分量与常量 C 满足比较关系 θ” 。

例如: t[4]=3 表示元组 t 的第 4 个分量等于 3 。

        在关系演算中定义了 “ 自由元组变量 ” 和 “ 约束元组变量 ” 的概念。这些概念和谓词演算中的概念完全一样。

        若公式中的一个元组变量前有 “ 全称量词 ” 或 “ 存在量词 ” ,则称该变量为约束元组变量,否则称自由元组变量。

域关系演算:

域演算表达式是形为{t1…tk∣P(t1,…,tk)}的表达式,其中P(t1,…,tk)是关于自由域变量t1,…,tk 的公式。

原子公示有两种:

 ⑴ R(x1…xk),R是一个k元关系,每个xi是常量或域变量;

 ⑵ xθy,其中x,y是常量或域变量,但至少有一个是域变量,θ是算术比较符。

公式中可使用∧、∨、┐和=>等逻辑运算符,也可用(∃x)和(∀x)形成公式,但变量x是域变量,不是元组变量。

在公式中各种运算符之间也有着优先级,从高到低依次是:算术运算符量词(全称量词、存在量词)逻辑运算符

 题目

(1)检索"程军"老师所授课程的课程号(C#)和课程名(CNAME)。

(2)检索年龄大于21的男学生学号(S#)和姓名(SNAME)。

(3)检索至少选修"程军"老师所授全部课程的学生姓名(SNAME)。

(4)检索"李四"同学不学课程的课程号(C#)。

(5)检索至少选修两门课程的学生学号(S#>。

(6)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。

(7〉检索选修课程包含"程军"老师所授课程之一的学生学号(S#)。

(8)检索选修课程号为k1和k5的学生学号(S#)。

(9)检索选修全部课程的学生姓名( SNAME)。

( 10)检索选修课程包含学号为2的学生所修课程的学生学号(S#)。

(11)检索选修课程名为"语言"的学生学号(S#)和姓名(SNAME)。

 关系代数表达式——例

元组演算表达式——例 

(还是用上面那三个表):

(1)检索选修课程号为k5的学生学号和成绩。

(2)检索选修课程号为k8的学生学号和姓名。

(3)检索选修课程名为"语言"的学生学号和姓名。

(4)检索选修课程号为k1或k5的学生学号。
(5)检索选修课程号为k1和k5的学生学号。

(6)检索不选修k8课程的学生姓名和年龄。

(7)检索选修全部课程的学生姓名。
(8)检索所选修课程包含1号学生所选课程的学生学号。

域演算表达式——例 

(1)检索选修课程号为k5的学生学号和成绩。

(2)检索选修课程号为k8的学生学号和姓名。


http://chatgpt.dhexx.cn/article/658RE430.shtml

相关文章

Oracle约束 SQL语句分类 集合运算 索引 相关知识点讲解

ORACLE 约束&#xff1a; 数据库用来确保数据满足业务的手段&#xff0c;强制数据符合某些特定条件或者规范才可以插入 主键约束&#xff1a; primary key PK唯一约束&#xff1a;unique非空约束&#xff1a;not null外键约束&#xff1a;foreign key FK检查约束&#xff1a;…

SQL对数据进行统计、常用集合函数

学生表&#xff1a; 1、统计记录个数 1&#xff09; count&#xff08;【all】*&#xff09;【as 列别名】 返回表中的记录数 执行&#xff1a;SELECT COUNT (* ) FROM 学生表 结果为&#xff1a; 执行&#xff1a;SELECT COUNT (* ) as 学生总人数 FROM 学生表…

关系数据库SQL数据查询

关系数据库SQL数据查询 数据查询 一、单表查询 1.查询仅涉及一个表&#xff0c;选择表中的若干列 [例1] 查询全体学生的学号与姓名。SELECT Sno,SnameFROM Student; [例2] 查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM Student;查询全部列 选出所有属…

样本轮廓系数(原理、sklearn.metrics.silhouette_score、silhouette_samples参数介绍)

一、轮廓系数含义&#xff1a; 轮廓系数&#xff08;Silhouette Coefficient&#xff09;&#xff0c;是聚类效果好坏的一种评价方式。 最佳值为1&#xff0c;最差值为-1。接近0的值表示重叠的群集。负值通常表示样本已分配给错误的聚类&#xff0c;因为不同的聚类更为相…

java上位机开发(开篇)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前对于java语言&#xff0c;很多人都认为太简单。其实这是不对的&#xff0c;因为某种意义上来说所&#xff0c;java语言就像学习日语一样&#…

Qt之上位机开发实战(一)

一、Qt三大金刚 1、qt下的串口编程 2、qt下的网络编程 3、qt下的GPIO 本章节先介绍一下qt下的串口编程&#xff0c;首先我们新建一个Widget项目 其中接受框使用Plain Text Edit&#xff08;设置只读&#xff09;&#xff0c;串口号等按钮使用Combo Box&#xff0c;发送框使…

C# | 上位机开发新手指南(二)上位机通信

上位机开发新手指南&#xff08;二&#xff09;上位机通信 文章目录 上位机开发新手指南&#xff08;二&#xff09;上位机通信前言串口通信应用场景与控制器通信与传感器通信与仪器仪表通信与智能家居设备通信 常见协议ModbusCAN&#xff08;Controller Area Network&#xff…

C# 西门子PLC上位机开发环境搭建

一、安装软件 1. TIA_Portal_STEP7 15 博途&#xff0c;西门子的自动化开发软件 2. SIMATIC_S7PLCSIM_V15_1 西门子的仿真软件 3. NetToPLCsim C#程序是不能和仿真通信的&#xff0c;只有利用此软件&#xff0c;C#程序才能连接到仿真 二、配置软件 1. 博途 点击 创建新…

java上位机开发(网络编程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所谓的网络编程&#xff0c;一般就是指UDP、TCP编程。传统的方法就是用api或者sdk直接编程&#xff0c;这种方法对于简单的协议是可以的。但是对于…

上位机开发(详细设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 所谓软件详细设计,它的上面对应的是架构设计,下面对应的是程序开发。架构设计有可能涉及多个软件,比如既可能涉及上位机这端,也可能涉及到mcu这端。详细设计的话,一般要落实到…

android ble 上位机,BLE的Android上位机开发(下)

原标题&#xff1a;BLE的Android上位机开发(下) ELLO! 大家好&#xff01;马上就更新下篇了呢~哈哈&#xff01;(上篇的地址&#xff1a;BLE的Android上位机开发(上))废话不多说了&#xff0c;先上主角吧&#xff01;代码如下&#xff01; [Java] 纯文本查看复制代码 ? 01 02 …

java上位机开发(java基础)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 java基础就是把java环境安装好&#xff0c;把基础程序构建起来。至少说让开发的同学来说有一点信心。从这一点来说&#xff0c;就算编写一个“Hell…

上位机开发的意义

上位机开发的意义 常见的上位机定义为一台可以发出特定操控命令的计算机&#xff0c; 通过操作预先设定好的命令&#xff0c;将命令传递给下位机&#xff0c;通过下位机来控制设备完成各项操作。此定义着重于强调控制指令的发送&#xff0c;实际上除了发送控制命令&#xff0c…

Qt之上位机开发实战(三)

UDP编程 udp相对于tcp来说相对简单&#xff0c;udp不分客户端和服务器&#xff0c;只需要使用一个QUdpSocket类&#xff0c;首先完成布局 Pro文件下加QT core gui network&#xff0c;.h文件下加#include <QUdpSocket> .h文件public下创建对象 QUdpSocket *udpSocket;…

C# | 上位机开发新手指南(三)框架

上位机开发新手指南&#xff08;三&#xff09;框架 文章目录 上位机开发新手指南&#xff08;三&#xff09;框架.NETWinFormsWPFUnity3D CQTMFC 其他语言LabVIEW .NET WinForms 在上位机开发中&#xff0c;Windows Forms是使用最广泛的C#框架之一。Windows Forms是.NET Fra…

哈喽上位机(上位机开发指南)

哈喽&#xff0c;上位机&#xff01; -------上位机开发指南 作者&#xff1a;Robert Zhang本博客以一个程序猿的角度解答了: - 有关上位机开发的疑惑 - 上机软件开发需要学习哪些知识 - 开发一个完整商业软件所需的技术与实现方法 - 怎样美化软件&#xff0c;那些漂亮的软件…

C#上位机开发常遇问题

C#上位机开发常遇问题 C#引用C动态库/静态库静态库动态库 unsafe和fixed关键字的应用unsafefixed Path类的使用写在结尾 最近完成了一个小项目的开发&#xff0c;在开发中遇到了一些问题&#xff0c;我感觉这些问题其他人在开发的时候也会遇到&#xff0c;所以我在这边总结一下…

C# 三菱PLC上位机开发环境搭建

一、安装软件 用到两个三菱的软件&#xff1a; 1. MX Component&#xff08;下载地址 也可以直接在官网上搜索&#xff0c;注意MX后面有空格&#xff09; 用于连接PLC 2. GX Works2&#xff08;下载地址 用GX Works3也行&#xff09; 这个软件主要是电气做PLC编程&#xf…

USB上位机开发

上位机开发采用图形化界面&#xff0c;使用C#语言进行开发。调用C编写的Dll动态库&#xff0c;实现与STM32进行USB通信的目的。 首先&#xff0c;编写Dll动态库。 开发环境采用VS2017&#xff0c;语言C 将lusb0_usb.h和libusb.lib文件拷贝到工程目录下。 libusb-win32-bin-…

Matlab上位机开发

Matlab上位机开发 1 了解上位机1.1 上位机的作用1.2 常用上位机开发方式1.2.1 Windows上位机&#xff08;基于串口通信&#xff09;1.2.2 Android上位机&#xff08;基于网络通信&#xff09; 1.3 教程概况1.3.1 C#上位机开发教程1.3.2 IoT App开发1.3.3 Matlab上位机开发 2 He…