📖 前言:关系模型的数据结构非常简单,只包含单一的数据结构关系。也就是说,现实世界中的实体以及实体间的各种联系都可以用单一的结构类型即关系(二维表)来表示。在第1章中已经非形式化地介绍了关系模型及其有关基本概念。而关系模型是建立在严格的数学理论基础之上的,这里将从集合论角度给出关系数据结构的形式化定义。
🕒 0. 思维导图
🕒 1. 关系形式化定义及其有关概念
🕘 1.1 什么是关系
- 单一的数据结构----关系
现实世界的实体以及实体间的各种联系均用关系来表示 - 逻辑结构----二维表
从用户角度,关系模型中数据的逻辑结构是一张二维表 - 建立在集合代数的基础上
🕘 1.2 域(Domain)
- 域是一组具有相同数据类型的值的集合。例:
姓名:{佳玮、俊杰、子涵、育锐}
性别:{男,女}
专业:{行政管理,英语,网络工程}
成绩:0-100的整数集合
………
🕘 1.3 笛卡尔积(Cartesian Product)
给定一组域
D
1
,
D
2
,
…
,
D
n
D_1,D_2,…,D_n
D1,D2,…,Dn,这些域中可以有相同的。
D
1
,
D
2
,
…
,
D
n
D_1,D_2,…,D_n
D1,D2,…,Dn的笛卡尔积为:
D
1
×
D
2
×
…
×
D
n
=
{
(
d
1
,
d
2
,
.
.
.
,
d
n
)
∣
d
i
∈
D
i
,
i
=
1
,
2
,
.
.
.
,
n
}
D_1×D_2×…×D_n = \{ (d_1,d_2,...,d_n) | d_i∈D_i, i=1,2,...,n \}
D1×D2×…×Dn={(d1,d2,...,dn)∣di∈Di,i=1,2,...,n}
- 所有域的所有取值的一个组合;
- 不能重复
设有三个域, D1为学生姓名集合,D2为性别集合,D3为院系集合:
D1 ={俊杰、子涵、育锐}
D2 ={男,女}
D3 ={信科院,人文院}
学生姓名 ( D 1 ) 性别 ( D 2 ) 院系 ( D 3 ) 俊杰 男 信科院 俊杰 男 人文院 俊杰 女 信科院 俊杰 女 人文院 子涵 男 信科院 子涵 男 人文院 子涵 女 信科院 子涵 女 人文院 育锐 男 信科院 育锐 男 人文院 育锐 女 信科院 育锐 女 人文院 \begin{array}{c|c|c} \hline \text { 学生姓名 }\left(\mathbf{D}_{1}\right) & \text { 性别 }\left(\mathbf{D}_{2}\right) & \text { 院系 }\left(\mathbf{D}_{3}\right) \\ \hline \text { 俊杰 } & \text { 男 } & \text { 信科院 } \\ \hline \text { 俊杰 } & \text { 男 } & \text { 人文院 } \\ \hline \text { 俊杰 } & \text { 女 } & \text { 信科院 } \\ \hline \text { 俊杰 } & \text { 女 } & \text { 人文院 } \\ \hline \text { 子涵 } & \text { 男 } & \text { 信科院 } \\ \hline \text { 子涵 } & \text { 男 } & \text { 人文院 } \\ \hline \text { 子涵 } & \text { 女 } & \text { 信科院 } \\ \hline \text { 子涵 } & \text { 女 } & \text { 人文院 } \\ \hline \text { 育锐 } & \text { 男 } & \text { 信科院 } \\ \hline \text { 育锐 } & \text { 男 } & \text { 人文院 } \\ \hline \text { 育锐 } & \text { 女 } & \text { 信科院 } \\ \hline \text { 育锐 } & \text { 女 } & \text { 人文院 } \\ \hline \end{array} 学生姓名 (D1) 俊杰 俊杰 俊杰 俊杰 子涵 子涵 子涵 子涵 育锐 育锐 育锐 育锐 性别 (D2) 男 男 女 女 男 男 女 女 男 男 女 女 院系 (D3) 信科院 人文院 信科院 人文院 信科院 人文院 信科院 人文院 信科院 人文院 信科院 人文院
🕤 1.3.1 元组(Tuple)
- 笛卡尔积中每一个元素( d 1 , d 2 , … , d n d_1,d_2,…,d_n d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple)
- (育锐,男,网络工程)、(子涵,女,英语)等都是元组
🕤 1.3.2 分量(Component)
- 笛卡尔积元素( d 1 , d 2 , … , d n d_1,d_2,…,d_n d1,d2,…,dn)中的每一个值 d i d_i di叫作一个分量
- 育锐、男、网络工程等都是分量
🕤 1.3.3 基数(Cartesian Product)
- 可以把基数看做笛卡尔积元素的个数,及元组的个数
- 若 d i d_i di(i=1,2,…,n)为有限集,其基数为 m i m_i mi(i=1,2,…,n),则 D 1 , D 2 , … , D n D_1,D_2,…,D_n D1,D2,…,Dn的基数M为:
M = ∏ i = 1 n m i M=\prod_{i=1}^n m_i M=i=1∏nmi
其中
m
i
m_i
mi为第
i
i
i个域基数,
n
n
n为域的个数
上例基数为:3×2×2=12
🕤 1.3.4 笛卡尔积的表示方法
- 笛卡尔积可表示为一个二维表
- 表中的每行对应一个元组,表中的每列对应一个域
🕘 1.4 关系(Relation)
笛卡尔积 D 1 × D 2 × … × D n D_1×D_2×…×D_n D1×D2×…×Dn的子集叫作在域 D 1 , D 2 , … , D n D_1,D_2,…,D_n D1,D2,…,Dn上的关系,表示为: R ( D 1 , D 2 , … , D n ) R\left(D_1, D_2, \ldots, D_n\right) R(D1,D2,…,Dn)
- R R R:关系名
- n n n:关系的目或度(Degree),即列
学生姓名
(
D
1
)
性别
(
D
2
)
院系
(
D
3
)
俊杰
男
信科院
俊杰
男
人文院
俊杰
女
信科院
俊杰
女
人文院
子涵
男
信科院
子涵
男
人文院
子涵
女
信科院
子涵
女
人文院
育锐
男
信科院
育锐
男
人文院
育锐
女
信科院
育锐
女
人文院
\begin{array}{c|c|c} \hline \text { 学生姓名 }\left(\mathbf{D}_{1}\right) & \text { 性别 }\left(\mathbf{D}_{2}\right) & \text { 院系 }\left(\mathbf{D}_{3}\right) \\ \hline \text { 俊杰 } & \text { 男 } & \text { 信科院 } \\ \hline \text { 俊杰 } & \text { 男 } & \text { 人文院 } \\ \hline \text { 俊杰 } & \text { 女 } & \text { 信科院 } \\ \hline \text { 俊杰 } & \text { 女 } & \text { 人文院 } \\ \hline \text { 子涵 } & \text { 男 } & \text { 信科院 } \\ \hline \text { 子涵 } & \text { 男 } & \text { 人文院 } \\ \hline \text { 子涵 } & \text { 女 } & \text { 信科院 } \\ \hline \text { 子涵 } & \text { 女 } & \text { 人文院 } \\ \hline \color{red} \text { 育锐 } &\color{red} \text { 男 } &\color{red} \text { 信科院 } \\ \hline \text { 育锐 } & \text { 男 } & \text { 人文院 } \\ \hline \text { 育锐 } & \text { 女 } & \text { 信科院 } \\ \hline \text { 育锐 } & \text { 女 } & \text { 人文院 } \\ \hline \end{array}
学生姓名 (D1) 俊杰 俊杰 俊杰 俊杰 子涵 子涵 子涵 子涵 育锐 育锐 育锐 育锐 性别 (D2) 男 男 女 女 男 男 女 女 男 男 女 女 院系 (D3) 信科院 人文院 信科院 人文院 信科院 人文院 信科院 人文院 信科院 人文院 信科院 人文院
D1,D2,…,Dn的笛卡尔积的某个子集才有实际含义
例:如上表,D1、D2和D3的笛卡尔积没有实际意义,取出有实际意义(如育锐只能有一个)的元组来构造关系
🕤 1.4.1 元组(Tuple)
关系中的每个元素是关系中的元组,通常用t表示。
下图所示才是正确的关系
学生姓名 ( D 1 ) 性别 ( D 2 ) 院系 ( D 3 ) 俊杰 男 行政管理 子涵 女 英语 育锐 男 网络工程 \begin{array}{c|c|c} \hline \text { 学生姓名 }\left(\mathbf{D}_{1}\right) & \text { 性别 }\left(\mathbf{D}_{2}\right) & \text { 院系 }\left(\mathbf{D}_{3}\right) \\ \hline \text { 俊杰 } & \text { 男 } & \text { 行政管理 } \\ \hline \text { 子涵 } & \text { 女 } & \text { 英语 } \\ \hline \text { 育锐 } & \text { 男 } & \text { 网络工程 } \\ \hline \end{array} 学生姓名 (D1) 俊杰 子涵 育锐 性别 (D2) 男 女 男 院系 (D3) 行政管理 英语 网络工程
🕤 1.4.2 单元关系与二元关系
当n=1时,称该关系为单元关系(Unary relation)或一元关系 ;
当n=2时,称该关系为二元关系(Binary relation)
🕤 1.4.3 关系的表示
- 关系也是一个二维表
- 表中的每行对应一个元组,表中的每列对应一个域
🕤 1.4.4 属性
- 关系中不同列可以对应相同的域,但一个列的值不可以来自不同的域
- 为了加以区分,必须对每列起一个名字,称为属性(Attribute);
- n目关系必有n个属性
🕤 1.4.5 三类关系
在关系数据模型中,有三类关系:
- 基本关系(基本表或基表)
实际存在的表,是实际存储数据的逻辑表示 - 查询表
查询结果对应的表 - 视图表
由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。
🕤 1.4.6 基本关系的性质
- 列的同质性(Homogeneous)
- 异列同域性,即不同的列可出自同一个域
- 其中的每一列称为一个属性
- 不同的属性要给予不同的属性名
- 列的无序性,即列的顺序可以任意交换.
- 行的无序性,即行的顺序可以任意交换
- 元组不重复性,即关系中任意两行(元组)不能相同
- 分量必须取原子值(不可再分)(即不允许表中有表)
这是规范条件中最基本的一条
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页
🕒 2. 码的定义
🕘 2.1 候选码(Candidate key)
- 若关系中的某一属性或属性组的值能唯一地标识一个元组,而其任意真子集都不能,则称该关系中所有满足此要求的属性或属性组为候选码。
- 最简单的情况是,候选码只有一个属性。
- 而候选码也可能为一个属性组。例如,选课关系SC(学号,课程号,成绩)
- 对于组成候选码的属性或属性组K,具有以下两个特性:
- 唯一性,即关系R的任意两个不同元组,其候选码的属性或属性组K的值是不同的;
- 最小性,即属性组K作为候选码,任一属性都不能从属性集K中删除掉,否则将破坏唯一性。
🕘 2.2 全码(All-key)
- 最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码
- 例如供应关系(供应商号,零件号,工程号)
🕘 2.3 主码(Primary key)
- 若一个关系有多个候选码,则选定其中一个为主码
- 不可以取空值
🕘 2.4 主属性(Prime attribute)
- 候选码的诸属性称为主属性
不包含在任何侯选码中的属性称为非主属性( Non-Prime attribute)或非码属性(Non-key attribute) - 主码举例:
Student(学号,姓名,性别,年龄,院系)
SC(学号,课程编号,成绩)
🕤 2.4.1 码举例
选课关系(假设学生姓名,课程名都不会有重复)
学号
姓名
课程号
课程名
成绩
\begin{array}{|l|l|l|l|l|} \hline \text { 学号 } & \text { 姓名 } & \text { 课程号 } & \text { 课程名 } & \text { 成绩 } \\ \hline & & & & \\ \hline \end{array}
学号 姓名 课程号 课程名 成绩
供应关系
供应商号
零件号
工程号
\begin{array}{|l|l|l|} \hline \text { 供应商号 } & \text { 零件号 } & \text { 工程号 } \\ \hline & & \\ \hline \end{array}
供应商号 零件号 工程号
选课:
候选码:{学号,课程号};
{姓名,课程号} ;
{学号,课程名};
{姓名,课程名}
主码: {学号,课程号};
主属性:学号-课程号;姓名-课程名
非码属性:成绩;
供应关系:
主码:{供应商号,零件号,工程号} 即为全码
🕘 2.5 外码
- 若一个关系R2中的一个属性子集S是另一个关系R1的主码所对应的属性组,则称S为R2的外码,并称关系R2为参照关系(Referencing Relation),关系R1为被参照(Referenced Relation)关系或目标关系(Target Relation)。
- 在SC关系中,学号是它的外码,其取值依赖于STUDENT关系中的学号字段。
- Student(学号,姓名,性别,年龄,院系)
- SC(学号,课程编号,成绩)
🕘 2.6 码概念辨析
- 主码(主键、主关键字):若一个关系有多个候选码,选择其中一个为主码。
- 候选码(关键字):可由一个或多个其值能唯一标识该关系模式中任何元组的属性组成
- 主属性:候选码包含的属性(一个或多个属性)。
- 码:唯一标识实体的属性或属性组合称为码。
🕒 3. 关系模式与关系数据库
🕘 3.1 什么是关系模式
关系模式(Relation Schema)是型;关系是值
关系模式是对关系的描述:
- 元组集合的结构
- 属性构成
- 属性来自的域
- 属性与域之间的映象关系
- 元组语义以及完整性约束条件
- 属性间的数据依赖关系集合
🕘 3.2 定义关系模式
关系模式可以形式化地表示为:R(U,D,DOM,F)
- R 关系名
- U 组成该关系的属性名集合
- D 属性组U中属性所来自的域
- DOM 属性向域的映象集合
- F 属性间的数据依赖关系集合
例:
- 在Student关系模式中,学号和姓名均来自于同一个域,即字符串域,根据需要,两个属性列取了不同的属性名,在模式的定义中,还需要定义属性向域的映像,即说明它们分别出自哪个域,如:
- DOM(学号)= DOM(姓名)= CHAR
关系模式通常可以简记为
R
(
U
)
R (U)
R(U) 或
R
(
A
1
,
A
2
,
…
,
A
n
)
R (A_1,A_2,…,A_n)
R(A1,A2,…,An)
R
R
R: 关系名
A
1
,
A
2
,
…
,
A
n
A_1,A_2,…,A_n
A1,A2,…,An: 属性名
注:域名及属性向域的映象常常直接说明为属性的类型、长度
🕘 3.3 关系模式与关系
关系模式
- 对关系的描述
- 静态的、稳定的
关系
- 关系模式在某一时刻的状态或内容
- 动态的、随时间不断变化的
关系模式和关系往往统称为关系,通过上下文加以区别
在数据库学科中可以把关系模式理解为表的结构、属性之间的关系、约束条件,把关系理解为二维表
🕒 4. 关系数据库
- 关系数据库
在一个给定的应用领域中,所有关系的集合构成一个关系数据库 - 关系数据库模式包括
若干域的定义;
在这些域上定义的若干关系模式 - 关系数据库的型与值
关系数据库的型:关系数据库模式,对关系数据库的描述。
关系数据库的值:关系模式在某一时刻对应的关系的集合,简称为关系数据库
🕒 5. 课后习题
-
【单选题】下面对于关系的叙述中,不正确的是_______。
A、关系中的每个属性是不可分解的
B、在关系中元组的顺序是无关紧要的
C、任意的一个二维表都是一个关系
D、每一个关系只有一种记录类型 -
【单选题】一个关系数据表中的各条元组____。
A、前后顺序不能任意颠倒,一定要按照输入的顺序排列
B、前后顺序可以任意颠倒,不影响库中的数据关系
C、前后顺序可以任意颠倒,但排列顺序不同,统计处理的结果就可能不同
D、前后顺序不能任意颠倒,一定要按照关键字段值的顺序排列 -
【判断题】关系模型的一个特点是,实体及实体间的联系都可以使用相同的结构类型来表示。( )
-
【判断题】同一个关系模型中可以出现值完全相同的两个元组( )。
-
【判断题】在一个关系中,不同的列可以对应同一个域,但必须具有不同的列名( )。
-
【判断题】主码是一种候选码,主码中的属性个数没有限制( )。
-
【判断题】关系模型中,非主属性不可能出现在任何候选码中。( )
答案:1.C 2.B 3.√ 4.× 5.√ 6.√ 7.√
OK,以上就是本期知识点“关系数据结构及形式化定义”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页