《数据库系统概念》第二章
第二章 关系模型介绍
2.1 关系数据库结构
-
关系数据库由表组成,每个表有唯一名字。
-
表中一行代表了一组值之间的一种
联系
,一个表就是这种联系的一个集合。数学术语中,
元组
只是一组值的序列(或列表)。- 在 n 个值之间的一种联系可在数学上用关于这些值的一个
n元组
表示。换言之,n元组
是一个有n个值的元组,它对应表中的一行。 - 关系是元组的集合。
- 元组在关系中的顺序无关紧要,但为方便说明,在显示关系时,大多数情况都按第一个属性排序。
- 在 n 个值之间的一种联系可在数学上用关于这些值的一个
-
关系模型的术语 ——
-
关系
:指代表 -
元组
:指代行 -
属性
:指代表中的列 -
关系实例
:表示一个关系的特定实例,即所包含的一组特定的行 -
域
:对于关系的每个属性,都存在一个允许取值的集合,称为该属性的域我们要求对所有关系 而言, 的所有属性的域都是
原子的
。—— 即域中元素都需为不可再分的单元。 -
空值 null
:一个特殊值,表示值未知或不存在。空值会给数据库访问和更新带来很多困难,因此应尽量避免使用空值。
-
2.2 数据库模式
-
数据库模式
🆚数据库实例
:前者是数据库的逻辑设计,后者是给定时刻数据库中数据的一个快照。 -
关系
🆚关系模式
🆚关系实例
:三者的概念对应程序设计语言中的变量、类型定义、变量的值。- 关系模式不常变化,关系实例可能随时间发生变化。
-
关系模式中使用相同属性是将不同关系的元组联系起来的一种方法。
🌰 department 关系的模式是:department(dept_name, building, budget)
instructor 关系的模式是:instructor(ID, name, dept_name, salary)
2.3 码
-
超码
:一个或多个属性的集合,可在一个关系中唯一地标识一个元组。形式化描述:设 表示关系 模式中的属性集合。若我们说 的一个子集 是 的一个超码,则限制了关系 中任意两个不同元组不会在 的所有属性上取值完全相等,即若 和 在 中且 ,则
- 若 是个超码,则 的任意超集也是超码。
-
候选码
:最小的超码,它是一组构成超码的属性集,其任意真子集都不能成为超码。- 存在几个不同的属性集都可做候选码的情况。
-
主码
:被数据库设计者选中的,主要用来在一个关系区分不同元组的候选码。-
应选择值从不或极少变化的属性作为主码。
-
习惯上把一个关系模式的主码属性列在其他属性前面,主码属性加上下划线。
🌰 department(dept_name, building, budget)
-
-
外码
:一个关系模式 在它的属性中包含另一关系模式 的主码,则此属性在 上称作参照 的外码。- 关系 称为外码依赖的
参照关系
, 称为外码的被参照关系
- 从 到 的约束称为
参照完整性约束
:要求在参照关系 中任意元组在特定属性上的取值必然等于被参照关系 中某个元祖在特定属性上的取值。
- 关系 称为外码依赖的
⚠️ 码是整个关系的一种性质,而不是单个元组的性质;关系中任意两个不同的元组都不允许同时在码属性上具有相同的值;码的指定代表了被建模的实物在现实世界中的约束。
2.4 模式图
模式图
:可表示一个含有主码和外码依赖的数据库模式。
- 关系用矩形表示,矩形上方写关系名,矩形内列出各属性,主码属性用下划线标注。
- 外码依赖用从参照关系的外码属性到被参照关系的主码属性之间的箭头表示。
- 模式图能显示外码约束,却没有表现出参照完整性约束,这需通过后面将学习的
实体-联系图
展示。


2.5 关系查询语言
查询语言
:用户用来从数据库中请求获取信息的语言。通常比标准的程序设计语言层次更高。可分为:
过程化语言
:用户指导系统对数据库执行一系列操作以计算出所需结果。非过程化语言
:用户只需描述所需信息,而不用给出获取该信息的具体过程。
实际使用的查询语言同时包含过程化方式与非过程化方式。🌰 SQL
有些”纯“查询语言:
关系代数
是过程化的,元组关系演算
、域关系演算
是非过程化的。
关系代数
:包含一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果。
关系演算
:使用谓词逻辑来定义所需结果,但不需给出获取结果的特定代数过程。
2.6 关系运算
所有的过程化关系查询语言都提供一组运算,运算施加于单个/一对关系上,结果总是单个关系。
常用的关系运算:
-
选择元组
:从单个关系中选出满足一些特定谓词的特殊元组。其结果是一个新关系,是原始关系的一个 子集。🌰 从 instructor 关系中选择满足谓词”工资大于 85000 美元“ 的元组。
-
选择属性
:从一个关系中选出特定的属性(列)。结果是一个只包含被选属性的新关系。🌰 从 instructor 关系中只希望列出教师的 ID 和工资。
-
连接运算
:把分别来自两个关系的元组对合并成单个元组,以此结合两个关系。自然连接
:两个关系上的自然连接运算所匹配的元组在两个关系共有的所有属性上取值相同。
-
笛卡尔积运算
:也是从两个关系中合并元组,但不同于连接运算,其结果包含来自两个关系元素的 所有对,无论它们的属性值是否匹配。 -
集合运算
:因为关系是集合,故可在关系上施加标准的集合运算。🌰 并、交、差运算
⚠️ 有时,查询结果中包含重复的元组。
🌰 我们从 instructor 关系中选出 dept_name 属性就可能包含重复。
一些关系语言严格遵守集合的数学定义,会去除重复;但另一些会考虑去重的大量处理,保留重复。
关系代数
是一种过程化关系查询语言:

总结

术语回顾

本文作者:Joey-Wang
本文链接:https://www.cnblogs.com/joey-wang/p/14706670.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」