首页 > 数据库 >数据库系统------关系数据模型

数据库系统------关系数据模型

时间:2024-09-10 23:37:24浏览次数:8  
标签:关系 表格 主键 --- ------ 数据库系统 连接 数据模型 属性

关系数据模型

1

先贴一张图,挺多不理解的,这里只解释一些我能理解的概念

关系(表)

  • 关系: 其实可以理解为二维表,就是我们平时常见的 行列表,这个就是关系
  • 关系名:就是你这个二维表的名字,每个表都有唯一的名字
  • 关系模式:表头,就是表格的 列名的集合,比如学生表有 (学号,姓名,年龄,班级),学生表中的 列名的集合就是它的关系模式了
  • n元关系:关系有 n个属性

属性(列、字段)

  • 属性:其实就是二维表中的 ,也可以叫做 字段
  • 属性名:就是每个列的 列名
  • 属性值:就是 列值
  • 主属性主键 中包含的属性(字段),主属性是用于唯一标识记录的字段( 主键概念移步后面 )

元组(行、记录)

  • 元组:其实就是二维表中的 ,也可以叫做 记录

    注意,关系是元组的集合,翻译过来就是,二维表是行的集合,也就是由一条条记录组合而成

  • 分量:元组中的一个属性值就叫做 分量

实例

相当于快照,某一时刻数据库中存储数据的集合

模式

数据库的结构定义,比如这个表有什么属性,属性的类型等等

键(码)

  • 主键(主码):唯一标识表中每一行数据的字段或字段组合,主键的值必须唯一且不能为 NULL。简单来说,主键就是一列或多列的组合,并且能够通过它找到唯一行,相当于人们的身份证一样,一个表只能有一个主键,但这个主键可能是一列或多列

  • 候选键(候选码):可以唯一标识表中每一行数据的字段或字段组合,一个表可以有多个候选键,其中一个被选为主键

  • 外键(外码): 表中一个字段或字段组合,用于建立和另一个表的联系。外键的值必须与其他表中的主键值匹配,或为空

  • 超键(超码): 其实就是主键加上一些额外字段或者不加,不一定是 最简 的标识符

完整性约束

  • 实体完整性:确保表中的每一行都能够通过一个唯一标识被确认,即,主键 不能为NULL,并且必须唯一

  • 参照完整性:确保表与表之间的联系是有效的,即 外键 的值必须在被引用的表中存在或者为NULL

  • 用户定义完整性:用户 自定义 的约束

值域

一个属性可以取的所有可能值的集合

原子性

每个属性值必须是不可分割的最小的单位,简单来说属性必须短小精悍,包含一种信息最佳,多了不行

关系数据库

一种数据库模型,其中数据以表格形式组织,每个表格由行和列组成,并通过关系(通常是外键)来连接多个表格

符号表示(字母应该没错,大小写不确定)

元组

元组用 t 表示,即 tuple

属性

A1,A2, …, An 表示n个属性

值域

D1, D2, …. Dn 表示对应属性的取值范围

关系

R 表示,关系就是 D1 x D2 x … x Dn 的一个子集

关系模式

R = (A1, A2, …, An) 表示一个关系模式

K 表示超键

其他键用英文名,主键---primary key, 候选键---candiate key, 外键---foreign key

关系代数

简单介绍下符号和名称

  • 选择 --- σ
  • 投影 ---
  • 并 ---
  • 交 ---
  • 差 --- -
  • 笛卡尔积 --- ×
  • 重命名 --- ρ
  • 连接 --- ▷◁,类似这样吧,打不出来
  • 除 --- ÷
  • 聚合 --- g

特别要注意的是,关系代数其实就是一些操作的符号化,这些操作最后返回的都是表格

选择

2

首先这个 p是挑选条件,然后 r 就是被操作的表格

这样组合起来就是,从 表格 r 中挑选出符合条件 p 的行

所以这是一个 行操作,也就是筛选出我们想要的行

这里有一个例子,大家结合上面对符号的翻译在看看

2

投影

3

A1,A2.. 这些是最后投影的属性,即最后筛选出来的表格应该具有的属性,之所以叫投影,是因为它还要去除重复行(只保留一份)

r 是被操作的表格

这样组合起来就是,从表格 r 中,仅留下A1,A2..这些属性作为列,并且去除重复行

这里有个例子,大家结合上面的符号翻译再看看

4

笛卡尔积

5

这个写得挺好,挺容易理解的,我就直接粘贴了,笛卡尔积就和简单的排列组合很相似,大家可以结合数学的排列组合进行理解

这里给个例子

5

集合运算,并交差

这个就和数学上的差不多,这里就不多提了,记下下面的这个公式

6

要注意的是,在关系代数中,这些集合操作要求参与操作的关系具有完全相同的列名和数据类型

自然连接

7

r和s分别是不同的关系,也就是不同的表,连接的意思就是将不同的表 合并 在一起

自然连接也是符合 交换律和结合律

11

我们看下面这个例子

8

上图是具体的表格,下图是符号的定义,我们来根据上面的图表解释下下面的定义

首先我们有 R和S 两张不同的表,可以看到他们的列有重合,即 B和D 是重合的,那我们的连接就是让 R和S合并,即共享一份列B和列D

具体的步骤是,先做笛卡尔积 rXs 得到一张巨大的表,然后对其进行选择操作,就是列B和列D的值相等,最后投影出获得的表格,这就是自然连接了

9

重命名

10

这里 E 是一个表达式,可以是列之间的计算或者表格或者列等等,总之它是 原名, 然后 x 是新的名字

Theta连接

12

别看符号挺复杂的,其实代表的含义就是,先做笛卡尔积,然后做选择操作

赋值操作 <-

其实就和编程中的变量赋值一个意思

x <- y 这个意思就是把y的值赋给x,只不过在关系代数中,这个值可能是一个表格

外连接

首先这里是个例子,我们根据例子,来区分自然连接和外连接

两个表格 instructor和teaches
13

自然连接
14

左外连接
15

大家对比下这两张结果图,可以发现外连接的结果多了一行

让我们解释这种差别,自然连接是根据共享属性进行连接,这里是ID属性,它返回的结果中,ID的属性值是两张表中共有的,也就是说,自然连接 只保留公共属性值相同的记录,所以我们能看到,ID为15151和76766的记录被舍去了,因为他们不是两张表共有的属性值( 注意区分共有的属性,共有的属性值 )

理解了这个后,让我们看到左外连接的结果图,它其实和自然连接很像,不同的点是,它要求保留左边表格的所有行,所以我们能看到 ID为15151(instructor表格独有) 的记录,同样的,这一条记录的 course_id为null, 也就是说,teaches表中没有匹配值

再来看看右外连接
16

它要求的是保留右边变革的所有行,所以 ID为76766(teaches表格独有) 的记录被保留了

最后来看看全外连接
17

那这就要求两张表的所有记录都要保留了

大家在好好理解外连接和自然连接的区别,还有外连接中左右全这三个的区别

外连接扩展(符号定义)

以下是左外连接的定义
19

这个解释挺好的
18

我们要解析这个定义,首先要明白,左外连接与自然连接的关系

首先自然连接是左外连接的一部分

然后,我们在获取到左边表格没有被自然连接的记录(用差和投影)

然后再将这些记录连接一些null值(这些null值就表示右边的表格没有匹配值),最后做一个并集就是左外连接的结果了

其他两个也差不多

这个挺复杂的,对于 r ÷ s,可以把它翻译成 找出关系 r 中哪些元组(属性值集合)与关系 s 的每个元组(属性值集合)都匹配,匹配的意思是结合的元组在关系 r 中存在

20

也就是说 s 中的每条记录都必须在 r 中存在(s 的列数不大于 r的列数)

直接看例子吧,

21

根据我们的翻译,这个例子的 r ÷ s 翻译成,找出关系 r 中哪些属性A的属性值能和关系 s 的属性B的所有值匹配,即结合成的元组在关系 r 中存在

再来看个例子
22

根据我们的翻译,这个例子的 r ÷ s 翻译成,找出关系 r 中哪些属性ABC的属性值集合能和关系 s 的所有元组匹配,即结合成的元组在关系 r 中存在

广义投影

投影的列可以是属性键的计算值(比如可以投影 A+B 这种数学运算的结果),同时会保留重复的记录

聚合

  • 聚合函数:就是取一组值然后返回一个数,主要有5个
    24

看个例子,左边是原表,右边是结果,g 的左边是属性名,右边是聚合函数(聚合函数会对每个分组执行),然后就是操作的原表了
25

26

可以加个as对聚合函数的值进行重命名

数据库的修改操作

27

这里就是说,可以通过赋值操作和集合运算操作实现对数据库的删除、插入、更新

关于NULL值

28

这里是说进行一些 未知 的操作会产生NULL值

标签:关系,表格,主键,---,------,数据库系统,连接,数据模型,属性
From: https://www.cnblogs.com/winter-z/p/18407190

相关文章

  • C语言的正则表达式
    C标准库不支持正则表达式,但大部分Linux发行版本都带有第三方的正则表达式函数库。以常见的<regex.h>为例:/*regcomp将正则表达式编译成适合后续regexec函数搜索的形式preg指向模式缓冲区,传出参数regex字符串,传入参数cflag决定编译类型,可位或:-REG_EXTENDED扩展正则表达式......
  • mysql 8.0数据类型 json
    mysql8.0新增数据类型json。5.7通过blob等类型来保存json格式的数据,为什么还要专门增加这一数据格式的支持呢?  1.保证了JSON数据类型的强校验:JSON数据列会自动校验存入此列的内容是否符合JSON格式,    非正常格式则报错,而varchar类型和text等类型本身是不存在这......
  • sql相关
    基础语句:模糊匹配:%任意字符,_占位符like'_t%';多字段排序:selectwinner,yr,subjectfromnobelwherewinnerlike'Sir%'orderbyyrdesc,winnerasc按照特殊排序,把chemistry,physics排在后面selectwinner,subjectfromnobelwhereyr=1984orderbysubjectin......
  • LayerMask 的介绍和使用
    LayerMask实际上是一个位码操作,在Unity3D中一共有32个Layer层,并且不可增加。Unity中的使用:LayerMaskmask=1<<3;表示开启Layer3。LayerMaskmask=0<<8;表示关闭Layer8。LayerMaskmask=1<<1|1<<9;表示开启Layer1和Layer9。LayerMaskmask=0<<4|0<<5;表示关闭L......
  • MySQL数据类型
    MySQL支持SQL数据类型的几个类别:数字类型、日期和时间类型、字符串(字符和字节)类型、空间类型和JSON数据类型。==========================================数据类型 ==========================================MySQL支持所有标准的SQL数值数据类型。这些类型包括精确的数值......
  • RabbitMQ的 RPC 消息模式你会了吗?
    前文学习了如何使用工作队列在多个工作者之间分配耗时的任务。若需要在远程计算机上运行一个函数并等待结果呢?这种模式通常被称为远程过程调用(RPC)。本节使用RabbitMQ构建一个RPC系统:一个客户端和一个可扩展的RPC服务器。由于我们没有耗时的任务可以分配,因此我们将创建一......
  • 1818. 绝对差值和
    题目链接1818.绝对差值和思路排序+二分题解链接运用「二分」找最佳替换方案关键点转换为查找最小值delta:对nums1进行排序后,从中二分查找nums2[i]的最接近值(考虑到绝对值,需要检查left&right两个位置)时间复杂度\(O(n\logn)\)空间复杂度\(O(n)\)代......
  • 今天学习和总结
    学习了简单的算法知识排序中的快速排序,利用分治的思想来实现快速排序,对于前后大小有问题的进行swap的交换位置,这是基本的模版和源码includeusingnamespacestd;defineN1000100intA[N];voidquick_sort(inta,intb){if(a>=b)return;inti=a-1,j=b+1,x=A[a+b>>1];......
  • 博弈论
    ICG博弈所讨论的博弈问题满足以下条件:  玩家只有两个人,轮流做出决策。  游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输。  对任何一种局面,胜负只决定于局面本身,而与轮到哪位选手无关。经典的三种玩法一、巴什博奕(BashGame)二、尼姆......
  • Python 加密算法详解与应用
    引言随着互联网的普及,数据传输与存储中的安全性问题变得尤为重要。加密算法是一种有效保护数据的方法,广泛应用于文件加密、网络通信以及身份认证等场景中。Python作为一种易于上手且功能强大的编程语言,提供了多种加密库供开发者使用,如cryptography、pycryptodome等库。本篇文章将详......