关系数据库和关系模型(1)

昨天补充了DBMS概况的存储管理层面,今天来详细介绍数据库管理系统中常见且应用广泛的关系型数据库(简称关系数据库),比如postgreSQL、MySQL、Oracle Database。

关系模型

关系模型是数据库中如何进行存储和组织数据的理论基础。用C语言类比就是:我们输入一个值之前需要先用一个变量来替代实际的这个值并且同时给这个变量定义一个具体的数据类型;如下:

int a;//定义变量和数据类型
scanf_s(“%d”,&a);//输入a的值

我们在输入一个关系实例之前(比如选课表,有学号、选的课程名和课程号),先是要有一个关系(理解成表)来替代实际的值并且同时给这个关系定义一个关系模式(表存储和组织数据的方式),这就是关系模型的具体应用和解释。

如下图。

16f501c715ba4ebc91baa74af4a45773.png

 

从上面我们也可以看到表和关系在一定程度上可以理解成是同一个东西。关系数据库实际上是表的集合关系数据库也是由于数学上关系的概念密切相关才因此得名。

但是日常生活中的表和数据库中的表语义上有很多不同:

0526d77539dc4838ad21c092f5957e30.png

比如下图

93daa619d10746f88c201438c7e6afa8.png

Student (Sno,Sname,Sgender,Sage Sdept)是关系模式,关系模式由关系名和属性名集合组成
Student表是关系名
这一整个表是关系
每一行的数据是元组
每一列的数据是属性
每一列的列名是属性名
每一列的列值是属性值
记录和列相交的部分就是分量如上图中的每一个学号
关系实例是元组的集合,会根据业务状态也就是实际情况会发生变化——比如学生表会因为多一个转学来的而多一个元组。

关系模型包含三个部分——关系数据结构、关系操作、关系完整性约束。

关系数据结构

实际上前面已经包含了关系数据结构的部分内容——关系模式的解释(新术语的引入),接下来介绍另外的关系数据结构。每一个关系中有不同的属性,这些属性都有对应的属性值,比如Sage,表示学生的年龄,很明显,学生的年龄是有范围的,也叫作域,即关系中的每一个属性都存在一个合法的取值集合,而且属性下的每一个值都来自于同一个域,比如Sage属性的值应该是整数或者是空值(NULL),而不会是日期等其他数据类型。

超键、候选键、复合键

当某一个属性能明显区分元组之间的区别时(可以唯一地标识不同的元组),这样的属性或者几个这样的属性(即属性集合)叫做超键,比如Sno属性是超键,(Sno、Sname)属性集合也是一个超键

学号是不可能会出现重复的情况的,这样的也叫作候选键即超键中(当有多个时)没有多余的冗余的属性,如果(Sno、Sname)中Sname属性取值是唯一的(即没有出现同名情况)那么这个(Sno、Sname)超键也是候选键。注意:候选键得先是超键。

候选键中的属性也叫作主属性,之外的叫非主属性。比如Student关系主属性是Sno

有时候单个属性并不能区分元组之间的区别,得有两个或者两个以上的属性,比如想要标识“每个学生这门课程的成绩”就不仅需要学生学号,也需要课程号。这样的属性集合叫复合键。

01fe5cdb76744305a1839a8da46380be.png 

主键、外键

一个关系中可能会有多个候选键,比如当学生姓名不出现重复时,那么Sno和Sname都可以是候选键,这时候需要选择一个最合适的候选键即主键,例如Student关系的主键是Sno

上面例子中复合键包括两个属性,这两个属性分别是Student关系和Course关系的主键,此时在SC关系中这两个属性叫做外键。

关系操作

有查询和数据更新操作,数据更新包含数据的删除、插入、修改,查询操作是关系操作中最核心的部分。关系操作用关系运算来表示,关系运算本质上是一种关系查询语言,它和SQL都是关系数据库语言。SQL不给出运算过程,直接描述数据本身的特征即可,和关系运算中的关系演算一样都是属于非过程化语言,关系运算中还存在过程化语言——关系代数,会给出运算过程。

关系运算

faf3a4a4ffec4e00b9f7c6e05d4b909d.png

 

关系代数

关系代数包含基本、附加和扩展运算。

基本关系代数运算

包含一元的(对单个关系)运算——选择、投影、重命名;二元的(对两个关系)运算——并、差、笛卡尔积。

一元:

选择运算σ

(1)假如你想查询计算机系所有学生的信息,用关系代数是这么表示的

a7e881188cdb44fe96805489f4315140.png 

Student是关系名,CS属性值表示计算机系,Sdept表示属性名。

查询结果会是:

cac891c7761d46ae8d70942a763db694.png 

(2)再比如你想查询计算机系年龄大于等于18以及所有数学系的学生信息:

ebda33edb02f4df39a732b4e5026b33d.png 

MA属性值表示数学系,∧是与运算,∨是非运算,前者是交集后者是并集。

查询结果:

d3ea16cfcec941b186501c471dc7a633.png

投影运算∏

假如你想查询计算机系所有学生的姓名和学号:

6fe25a6ba18a48049eca782bf0360ad4.png 

结果:

998eebabb4314e93aec82d07f38b7c55.png

重命名ρ

8633d6752090401a8f661a2232736256.png  

表示将原来的关系名从SC改成StudentCourse,并且属性栏改成了Snon Cno Score (原来是Snon Cno Grade)

结果

78f70594e07648aea7c01e4cf21b4474.png 

二元:

并运算U

查询所有17岁或18岁学生的信息:

ec7d814e09fd4a229e747be8e45d0bc5.png 

可以看到包含选择运算σ,先是σ对两个关系一一做进行查询操作然后再做两个关系的并运算。

结果:

c6113d0fed7c484faa3ae5aeb5e9f39f.png 

差运算-

查询计算机系中未成年同学的信息

6954ed41e10c42c39b854a0551231799.png

 

8822bef36e0546b484bd5ba14f646e8d.png 

结果:

2d54fb43515e4327b1d4658f925cab53.png

 

笛卡尔积运算×

bce6a122047845eda07f43b9d2e0e576.png

 

明天继续学习其他运算和关系完整性约束

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

掌控物体运动艺术:图扑 Easing 函数实践应用

现如今,前端开发除了构建功能性的网站和应用程序外,还需要创建具有吸引力且尤为流畅交互的用户界面,其中动画技术在其中发挥着至关重要的作用。在数字孪生领域,动画的应用显得尤为重要。数字孪生技术通过精确模拟现实世界中的对象…

虚幻引擎GAS入门学习笔记(一)

虚幻引擎GAS入门(一) Gameplay Ability System(GAS) 是一个模块化且强大的框架,用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability(定义和执行能力)、Gameplay Effect(应用和管理…

mit6824-01-MapReduce详解

文章目录 MapReduce简述编程模型执行流程执行流程排序保证Combiner函数Master数据结构 容错性Worker故障Master故障 性能提升定制分区函数局部性执行缓慢的worker(slow workers) 常见问题总结回顾参考链接 MapReduce简述 MapReduce是一个在多台机器上并行计算大规模数据的软件架…

Electron 主进程与渲染进程、预加载preload.js

在 Electron 中,主要控制两类进程: 主进程 、 渲染进程 。 Electron 应⽤的结构如下图: 如果需要更深入的了解electron进程,可以访问官网 流程模型 文档。 主进程 每个 Electron 应用都有一个单一的主进程,作为应用…

webpack插件 --- webpack-bundle-analyzer【查看包体积】

const UglifyJsPlugin require(uglifyjs-webpack-plugin) // 清除注释 const CompressionWebpackPlugin require(compression-webpack-plugin); // 开启压缩// 是否为生产环境 const isProduction process.env.NODE_ENV production; const { BundleAnalyzerPlugin } requi…

【AI大模型】使用Embedding API

一、使用OpenAI API 目前GPT embedding mode有三种,性能如下所示: 模型每美元页数MTEB得分MIRACL得分text-embedding-3-large9,61554.964.6text-embedding-3-small62,50062.344.0text-embedding-ada-00212,50061.031.4 MTEB得分为embedding model分类…

rabbitMQ 简单使用

安装 rabbitMQ 下载地址:rabbitmq-3.12.0 安装 windows rabbitMQ 需要的命令 进入 rabbitMQ 的 sbin 目录后 cmd (需要管理员权限) rabbitmq-plugins.bat enable rabbitmq_management随后重启 rabbitMQ #关闭服务 net stop rabbitmq #开…

openpnp - juki吸嘴尺寸

文章目录 openpnp - juki吸嘴尺寸概述笔记吸嘴可以对应的最小元件尺寸END openpnp - juki吸嘴尺寸 概述 在网上买的juki吸嘴的商品页面,并没有具体的吸嘴尺寸。 现在贴片时,要根据吸嘴外径大小来决定具体元件要用哪种吸嘴,先自己量一下。 …

2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面

uni-app官网uni-app,uniCloud,serverless,快速体验,看视频,10分钟了解uni-app,为什么要选择uni-app?,功能框架图,一套代码,运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作:HBuilder X 软件 HBuilder X 官网下载&#xf…

迁移学习案例-python代码

大白话 迁移学习就是用不太相同但又有一些联系的A和B数据,训练同一个网络。比如,先用A数据训练一下网络,然后再用B数据训练一下网络,那么就说最后的模型是从A迁移到B的。 迁移学习的具体形式是多种多样的,比如先用A训练…

LeetCode讲解篇之300. 最长递增子序列

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 这题我们可以通过动态规划求解&#xff0c;使用一个数组f&#xff0c;数组f的i号元素表示[0, i]范围内最长递增子序列的长度 状态转移方程&#xff1a;f[i] max(f[j] 1)&#xff0c;其中 0 < j < i 题…

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…

大模型应用新领域:探寻终端侧 AI 竞争核心|智于终端

2024年过去2/3&#xff0c;大模型领域的一个共识开始愈加清晰&#xff1a; AI技术的真正价值在于其普惠性。没有应用&#xff0c;基础模型将无法发挥其价值。 于是乎&#xff0c;回顾这大半年&#xff0c;从互联网大厂到手机厂商&#xff0c;各路人马都在探索AI时代Killer AP…

【超级详细解释】力扣每日一题 134.加油站 48. 旋转图像

134.加油站 力扣 这是一个很好的问题。这个思路其实基于一种贪心策略。我们从整个路径的油量变化来理解它&#xff0c;结合一个直观的“最低点法则”&#xff0c;来确保找到正确的起点。 问题的核心&#xff1a;油量差值的累积 对于每个加油站&#xff0c;我们有两个数组&…

1、如何查看电脑已经连接上的wifi的密码?

在电脑桌面右下角的如下位置&#xff1a;双击打开查看当前连接上的wifi的名字&#xff1a;ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后&#xff0c;按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后&#xff0c;按一下回车&…

51单片机的水质检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器ph传感器浑浊度传感器蓝牙继电器LED、按键和蜂鸣器等模块构成。适用于水质监测系统&#xff0c;含检测和调整水温、浑浊度、ph等相似项目。 可实现功能: 1、LCD1602实时显示水温、水体ph和浑浊度 2、温…

Studying-多线程学习Part3 - condition_variable与其使用场景、C++11实现跨平台线程池

来源&#xff1a;多线程学习 目录 condition_variable与其使用场景 生产者与消费者模型 C11实现跨平台线程池 condition_variable与其使用场景 生产者与消费者模型 生产者-消费者模式是一种经典的多线程设计模式&#xff0c;用于解决多个线程之间的数据共享和协作问题。…

基于PHP的校园二手书交易管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园二手书交易管理系统 一 介绍 此二手书交易管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注…

k8s中pod的管理

一、资源管理 1.概述 说到k8s中的pod&#xff0c;即荚的意思&#xff0c;就不得不先提到k8s中的资源管理&#xff0c;k8s中可以用以下命令查看我们的资源&#xff1a; kubectl api-resources 比如我们现在需要使用k8s开启一个东西&#xff0c;那么k8s通过apiserver去对比etc…

《从零开始大模型开发与微调》真的把大模型说透了!零基础入门一定要看!

2022年底&#xff0c;ChatGPT震撼上线&#xff0c;大语言模型技术迅速“席卷”了整个社会&#xff0c;人工智能技术因此迎来了一次重要进展。与大语言模型相关的研发岗薪资更是水涨船高&#xff0c;基本都是5w月薪起。很多程序员也想跟上ChatGPT脚步&#xff0c;今天给大家带来…