一、关系模型和关系代数,《数据库系统概念》,原书第7版

2024-09-07 14:44

本文主要是介绍一、关系模型和关系代数,《数据库系统概念》,原书第7版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • @[toc]
    • 一、引言
      • 1.1 什么是数据库
      • 1.2 数据完整性
      • 1.3 数据库的操作
      • 1.4 数据库的持久性
      • 1.5 数据库管理系统
      • 1.6 数据模型
      • 1.7 早期DBMS
    • 二、关系模型
      • 2.1 什么是关系模型
      • 2.2 关系数据库的结构
      • 2.3 键
      • 2.4 约束
      • 2.5 数据操纵语言(DML)
      • 2.6 关系代数
        • 2.6.1 选择运算
        • 2.6.2 投影运算
        • 2.6.3 合并运算
        • 2.6.4 交运算
        • 2.6.5 差运算
        • 2.6.6 笛卡尔积运算
        • 2.6.7 连接运算
        • 2.6.8 额外的运算
      • 2.7 思考
    • 三、小结

一、引言

1.1 什么是数据库

**数据库(Database)**是一个描述现实世界某些事物的互相关联的数据集合,数据库是大多数计算机应用程序的核心部分。

比如我们要创建一个类似于 music store 的数据库来记录音乐家和它们的专辑

我们需要记录两个基础信息:

  • 音乐家的信息
  • 音乐家发布的专辑

我们的数据库以 CSV(comma-seperated value,逗号分隔值) 文件的形式来存储

  • 每一个实体都有一个csv文件
  • 应用程序每次想要查询/更新记录时,都必须解析文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们对上述解析逻辑给出Python3代码

for line in file.readlines():record = parse(line)if record[0] == 'GZA':print(int(record[1]))

上述逻辑有很多问题:

首先,显然这是一个效率很低的方式,不过对于增添操作,我们只需在末尾添加,效率其也还行。

其次,数据库的模式、关系是隐式表示的,上面直接 record[0] == ‘GZA’ 类似的逻辑是很差的

延续上面的例子,我们有几个方面的问题

1.2 数据完整性

  1. 上面展示的是音乐家和专辑1对1的关系,但是许多专辑可能是同一位音乐家,我们如何确保一对多的关系呢?
  2. 如果有人用非法字符串重写了的专辑年份呢?
  3. 如果一个专辑有多位音乐家呢?
  4. 如果我们删除了某位有专辑的音乐家,会发生什么?

上面的问题都是关于数据完整性的问题?

1.3 数据库的操作

  1. 如何找到某个特定的记录?
  2. 我们如何创建一个新的拥有相同数据库应用程序 以及 应用程序在不同的设备上运行会怎样?
  3. 如果两个线程同时尝试写同一文件又会怎样?

1.4 数据库的持久性

  1. 如果我们更新记录时机器崩溃了该如何处理?
  2. 如何将数据库扩展到多个机器来应对高频访问?

1.5 数据库管理系统

**数据库管理系统(Database Management System,DBMS)**由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。DBMS主要目标是提供一种可以方便、高效地存取数据库信息的途径。

一个通用的 DBMS 支持定义或明确内在实现方式,包括 创建、查询、更新、如何管理数据库等操作。

1.6 数据模型

**数据模型(Data model)**是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。

  • Relational

大多数DBMS采用

  • Key / Value
  • Graph
  • Document/XML / Object
  • Wide-Column / Column-family

一般为NoSQL(非关系型数据库)采用。

  • Array/Matrix/Vectors

机器学习采用较多

  • Hierarchical
  • Network
  • Multi-Value

目前已过时

1.7 早期DBMS

1960s,早期数据库应用程序很难在DMBS上构建和维护。

这时期的DBMS有:IDS, IMS, CODASYL

这一时期的DBMS存在问题:每当需要在逻辑层和物理层对模式进行修改时,都几乎得重写应用程序,因为程序员不知道清除数据库后数据在磁盘上的表示方式发生了怎样的变化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1960s,IBM的数学家Ted Codd 看到了IBM的工程师每次修改数据库的模式和布局都要重写数据库后,于1969年设计了关系模型(relational model),这也是本节的主题。

二、关系模型

2.1 什么是关系模型

**关系模型(relational model)**基于关系来定义数据库抽象,从而避免过多的维护。

核心逻辑:

  • 用简单的数据结构存储数据集合
  • 保留数据本身的物理表示,如磁盘或者内存中的实际位和字节
  • 通过高级语言查询数据,但具体的底层查询方式由DBMS来决定

关系模型的三大关键包括:

  • 结构(structure):即如何定义数据库的实际构成,关系中包含哪些内容,它们的属性以及类型
  • 完整性(integrity):确保数据库中的数据是合法的
  • 操作(Manipulation):如何去访问和修改数据

2.2 关系数据库的结构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关系数据库由**表(table)**的集合组成,每张表被赋予唯一一个名称。

如上面的Artist表,一共有三个列标题,表中每一行记录了一位Artist的相关信息。

关系模型中,**关系(relation)**用来指代表。**元组(tuple)**用来指代行。**属性(attribute)**用来指代列。

**关系实例(table instance)**这个术语来指代一个关系的特定实例,如上表,就是一个Artist的实例。

  • 每个关系的每个属性都有一个允许取值的集合,该集合称为该属性的域(domain)
  • 如果一个域中的元素被认为是不可再分的单元,则该域是原子的(atomic)。如一个人可能有多个电话号码,那么我们建立一个以电话号码为属性的表,那么电话号码的表就不是原子的,因为一个元素是电话号码的集合。
  • **空值(null value)**是一个特殊的值,表示未知或者并不存在。如果允许的话,我们认为控制是每一个域的成员。

2.3 键

**主键(primary key)**在一个关系中用来区分不同元组。

  • 如果表没有定义主键,一些DBMS自动创建内部的主键

DBMS 能够通过一列自动生成一个主键。

  • IDENTITY(SQL Standard)
  • SEQUENCE(PostgreSQL/Oracle)
  • AUTO_INCREMENT(MySQL)

外码(foreign key) 特指一种映射到另一个关系的一个元组的属性,

即,一个关系中的一个属性,是另一个表的主键。

如下图,我们有一个ArtistAlbum表,一个Artist表,一个Album表

在ArtistAlbum中,artist_id 和 album_id 分别是Artist 和 Album 的主键

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.4 约束

用户定义的条件必须对每一个数据库示例都成立。

  • 对特定属性或者全局范围内都有效
  • DBMS 会组织违反任意约束的修改操作

SQL中可以进行全局断言,不过很少使用,因为效率太低。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.5 数据操纵语言(DML)

数据操纵语言(DML) 是 从数据库存储获取信息的方式。

一般分为过程化(Procedural)非过程化(Non-Procedural)

过程化语言 基于集合,关注找到结果的策略。——关系代数

而过程化语言 只关注 什么数据是想要的,并不关注如何找到它。——关系演算

2.6 关系代数

**关系代数(relation algebra)**是在关系中获取和操作元组的基础操作。

  • 基于集合代数

关系代数有很多的运算,每一个运算以一个或者多个关系来作为其输入,并输出一个新的关系。

  • 我们可以通过复合多个运算来实现更为复杂的运算

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.1 选择运算

**选择(select)**运算从一些元组中选出一个满足给定谓词的元组的集合,它是一个一元运算。

我们使用小写希腊字母 σ 来代表选择。

语法: σ p r e d i c a t e ( R ) \sigma_{predicate}(R) σpredicate(R)

下面是 选择运算的示例,以及SQL语言表示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.2 投影运算

**投影(project)**运算也是一个一元运算,可以生成一个只包含特定属性的元组的关系。

  • 可以重新排列属性的顺序
  • 可以移除我们不想要的属性
  • 操作属性的值来生成新的派生属性(比如下面将b_id的值减去100)

语法: ∏ A 1 , A 2 , . . . , A n ( R ) \prod_{A1,A2,...,An}(R) A1,A2,...,An(R)

下面是示例以及SQL语言表示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.3 合并运算

合并(Union)运算生成一个包含在任意输入关系中的元组的关系。

语法: R ∪ S R \cup S RS

下面是示例以及SQL语句表示

值得注意的是,在SQL中UNION会自动去重,如果保留重复项以提高效率,应该使用UNION ALL

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.4 交运算

交(intersect)运算生成只在两个输入中都出现的元组的关系。

语法: R ∩ S R \cap S RS

下面是示例以及SQL语句表示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.5 差运算

差(differentiate)运算生成一个只在第一个输入中出现并非在第二个输入中出现的元组的关系。

语法:(R - S)

下面是示例以及SQL语句表示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.6 笛卡尔积运算

笛卡尔积(product)运算会生成第一个输入和第二个输入的元组间的所有二元组合的关系。

Syntax:(R × S)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.7 连接运算

连接(join)运算生成两个输入所有有一个或者多个公共值的元组的组合。

语法: R ⋈ S R \Join S RS

下面是示例以及一些SQL语句的表示

我们可以在SQL语句中 指定 公共值(一个或多个)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6.8 额外的运算

Ted Codd在设计关系模型时并未考虑到实际应用中的不足,所以人们又完善了一些额外操作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

赋值(assignment)运算 ← \leftarrow 来表示,很多时候我们需要将关系代数表达式中的一部分赋值给临时的关系变量。

比如我们有课程表,我们想要获取在2017年秋季和2018年春季都开设的课程ID

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**更名(rename)**运算,用小写希腊字母 ρ 来表示。

语法: ρ x ( A 1 , A 2 , . . . , A n ) ( E ) \rho_{x(A1,A2,...,An)(E)} ρx(A1,A2,...,An)(E),表示返回以x 命名的表达式E的结果,并且将其属性重命名为A1,A2,…,An

很多时候我们需要多次使用相同的关系,那么我们就可以通过更名操作来指代某些关系。

**除法(division)**运算定义如下:

r® 和 s(S) 代表关系,并且 S ⊆ R S \subseteq R SR,即,模式S的每个属性也在模式R内。

给定元组 t,令t[S] 代表元组t 在 S中属性上的投影。

那么r ÷ s 是 R - S模式上的一个关系,元组t 在 r ÷ s 中的充分必要条件是:

  • t 在 ∏ R − S ( r ) \prod _{R - S}(r) RS(r)
  • 对于s 中的每个元组 t s t_s ts,在r 中存在一个元组 t r t_r tr 同时满足如下条件:
    • t r [ S ] = t s [ S ] t_r[S] = t_s[S] tr[S]=ts[S]
    • t r [ R − S ] = t t_r[R - S] = t tr[RS]=t

语言过于抽象,下面是示例:

2.7 思考

关系代数定义了高层级语言对于如何计算查询的命令:

  • 比如: σ b i d = 102 ( R ⋈ S ) \sigma_{b_id=102}(R\Join S) σbid=102(RS) vs R ⋈ ( σ b i d = 102 ( S ) ) R \Join (\sigma_{b_id=102}(S)) R(σbid=102(S))
  • 二者的计算量不同,效率自然也不同

一个更好的方式是声明你希望DBMS去计算的答案。

  • Example:Retrieve the joined tuples from R and S where b_id equals 102

这也是为什么我们希望有SQL这样的声明式语言。

三、小结

  • 数据库无处不在
  • 关系代数是关系型数据库中处理查询的基本原语
  • 关系代数将成为交互的核心基础,这也决定了我们如何构建系统组件以及执行查询。

这篇关于一、关系模型和关系代数,《数据库系统概念》,原书第7版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145352

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p