posts - 91,comments - 0,views - 12645

关系数据模型

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值

posted on   Dylaris  阅读(1189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示