本篇文章主要讲解关系数据库基础中的基本概念,包括关系模型概述、关系的完整性约束等等内容。
同时想要了解更多数据库系统概论知识的朋友可以看下我的上一篇文章数据库系统概论①——数据库系统基本概念
文章目录
1、关系数据库的基本概念
1.1 关系模型概述
关系模型是数据库系统中最重要的一种模型。它由
数据结构
、
关系操作
和
完整性约束
三部分组成。
最早提出关系模型的是美国IBM公司的E.F.Codd (埃德加·科德)博士。
- 1970年提出关系数据模型 - E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”, 《Communication of the ACM》,1970
- 之后,提出了关系代数和关系演算的概念
- 1972年提出了关系的第一、第二、第三范式
- 1974年提出了关系的BC范式
(1)数据结构
单一的数据结构----**
关系
**,现实世界的实体以及实体间的各种联系均用关系来表示
数据的逻辑结构----**
二维表
**, 从用户角度,关系模型中数据的逻辑结构是一张二维表。
(2)关系操作
关系操作采用
集合操作方式
,即操作的对象和结果都是
集合
。这种方式也称为
一次一集合
的方式。
非关系数据模型的数据操作方式则为
一次一记录
的方式。
关系模型中常用的关系操作:
- 查询操作:选择、投影、连接、除、并、交、差。
- 更新操作:增加、删除、修改。
表达关系操作的
关系数据语言
:
(1)关系代数语言。(用对关系的运算来表达查询要求的方式。)
(2)关系演算。(用谓词来表达查询要求的方式。 )
(3)介于关系代数和关系演算之间的语言SQL。
(3)完整性约束
- 实体完整性 - 通常由关系系统自动支持
- 参照完整性 - 通常由关系系统自动支持
- 用户定义的完整性 - 反映应用领域需要遵循的约束条件,体现了具体领域中的语义约束- 用户定义后由系统支持
关系模型建立在集合代数的基础上
1.2 关系数据结构
关系数据结构的基本概念
- 关系
- 关系模式
- 关系数据库
1.2.1 关系
(1)域
定义:
域
是一组具有
相同数据类型
的值的
集合
。域一般用大写字母D表示,如
D
1
,
D
2
,
…
,
D
n
D1,D2,…,Dn
D1,D2,…,Dn等。其中域中数据的个数叫域的
基数
。
举例:
- 整数
- 实数
- 指定长度的字符串集合
- 介于某个取值范围的整数
- {‘男’,‘女’}
- 介于某个取值范围的日期
(2)笛卡尔积(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
3
={(
d
1
,
d
2
,
…
,
d
n
)|
d
i
∈
D
i
,
i
=
1
,
2
,
…
,
n
}
D_1×D_2×…×D_3={(d_1,d_2,…,d_n)|d_i∈D_i,i=1,2,…,n}
D1×D2×…×D3={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
说明:
- 所有域的所有取值的一个组合
- 不能重复
笛卡尔积可表示为一个二维表。
举例:
设
D
1
=
{
a
,
b
}
,
D
2
=
{
c
,
d
,
e
}
,
D
3
=
{
f
,
g
}
D1=\{a,b\}, D2=\{c,d,e\}, D3=\{f,g\}
D1={a,b},D2={c,d,e},D3={f,g}。
D
1
×
D
2
×
D
3
=
{
(
a
,
c
,
f
)
,
(
a
,
c
,
g
)
,
(
a
,
d
,
f
)
,
(
a
,
d
,
g
)
,
(
a
,
e
,
f
)
,
(
a
,
e
,
g
)
,
(
b
,
c
,
f
)
,
(
b
,
c
,
g
)
,
(
b
,
d
,
f
)
,
(
b
,
d
,
g
)
,
(
b
,
e
,
f
)
,
(
b
,
e
,
g
)
}
。
D1×D2×D3=\{(a,c,f), (a,c, g) , (a,d, f) , (a,d, g) ,\\(a,e,f) , (a,e,g) , (b,c,f) , (b,c, g) ,\\ (b,d, f) ,(b,d, g) , (b,e, f) , (b,e, g) \}。
D1×D2×D3={(a,c,f),(a,c,g),(a,d,f),(a,d,g),(a,e,f),(a,e,g),(b,c,f),(b,c,g),(b,d,f),(b,d,g),(b,e,f),(b,e,g)}。
结果用二维表格表示如下表所示:
(3)元组
笛卡尔积中每一个元素(d1,d2,… ,dn)叫作一个n元组(n-tuple)或简称元组,即行。
例: (a,c,f)
(4)分量(Component)
元素(d1,d2,… ,dn)中的每一个值叫作一个分量,即列。
(5)基数
如果
D
i
(
i
=
1
,
,
…
,
n
)
D_i(i=1,,…,n)
Di(i=1,,…,n)为有限集,其基数为
m
i
(
i
=
1
,
2
,
…
,
n
)
,
m_i(i=1,2,…,n),
mi(i=1,2,…,n), 则
D
1
×
D
2
×
…
×
D
n
D_1×D_2×…×D_n
D1×D2×…×Dn的基数
=
m
1
×
m
2
×
…
×
m
n
,
=m_1×m_2×…×m_n,
=m1×m2×…×mn,即笛卡尔积的基数等于所有域的基数累乘。
举例:
D
1
D_1
D1(表示导师的集合)={张清玫、刘逸 }
D
2
D_2
D2(表示专业的集合)={计算机专业、信息专业}
D
3
D_3
D3(表示研究生的集合)={李勇、刘晨、王敏}
在上面的例子中:
D
1
D_1
D1的基数
m
1
=
2
m_1=2
m1=2
D
2
D_2
D2的基数
m
2
=
2
m_2=2
m2=2
D
3
D_3
D3的基数
m
3
=
3
m_3=3
m3=3
D
1
×
D
2
×
D
3
D_1×D_2×D_3
D1×D2×D3的基数
=
m
1
×
m
2
×
m
3
=
2
×
2
×
3
=
12
=m_1×m_2×m_3=2×2×3=12
=m1×m2×m3=2×2×3=12。
D
1
×
D
2
×
D
3
D_1×D_2×D_3
D1×D2×D3的笛卡尔集为:
(6)关系(Relation)
假设:
导师与专业:1:1
导师与研究生:1:n
定义:
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(D_1,D_2,…,D_n)
R(D1,D2,…,Dn)表示。这里R表示关系的名字,n是关系的
目或度
(Degree)。
说明:
- 关系中的每个元素是关系中的
元组
,通常用t表示。 - 当n=1时,称该关系为
单元关系
。 - 当n=2时,称该关系为
二元关系
。
可见关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。N目关系必有n个属性,属性的名称要唯一。
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidate key)。
若一个关系有多个候选码,则选定其中一个为主码(Primary key)。主码的诸属性称为主属性(Prime attribute)。
不包含在任何侯选码中的属性称为非码属性(Non-key attribute)。在最简单的情况下,侯选码只包含一个属性。
在最极端的情况下,关系模式的所有属性组是这个关系模式的侯选码,称为全码(All-key)。
举例:
学生选课数据库中有三个关系:
- 学生( 学号 ‾ \underline{学号} 学号,姓名,性别,年龄,籍贯,班级,系别)
- 课程( 课号 ‾ \underline{课号} 课号,课名)
- 成绩( 学号 ‾ , 课号 ‾ \underline{学号},\underline{课号} 学号,课号,成绩)
其中带
下划线
的部分给出了每个关系的
候选码
(或称主码)。
关系的性质
关系是用集合代数的笛卡儿积定义的,是元组的集合,因此关系具有以下性质:
列是同质的
(Homogeneous),即每一列中的分量是同一类型的数据,来自同一个域;不同的列可出自同一个域
,称其中的每一列为一个属性,不同的属性要给予不同的属性名;列的顺序无所谓
,即列的次序可以任意交换;任意两个元组不能完全相同
;行的顺序无所谓
,即行的次序可以任意交换;所有属性值都是原子的
,即每一个分量都必须是不可分的数据项,不允许属性又是一个二维关系;
举例:
下面的工资关系(如下表)不符合关系的规范化要求,在数据库中是不被允许的,因为
表示工资的属性不是一个原子分量
。
1.2.2 关系模式
定义:
关系的描述称为关系模式(Relation Schema)。一个关系模式应当是一个五元组。它可以形式化地表示为:R(U, D, dom, F)。其中
R
为关系名,
U
为组成该关系的属性名集合,
D
为属性组
U
中属性所来自的域,
dom
为属性向域的映象集合,
F
为属性间数据的依赖关系集合。
说明:
关系模式通常可以简记为:
R
(
A
1
,
A
2
,
…
,
A
n
)
R(A_1, A_2, …, A_n)
R(A1,A2,…,An)。其中R为关系名,
A
1
,
A
2
,
…
,
A
n
A_1, A_2, …, A_n
A1,A2,…,An为属性名。而
域名
及
属性
向域的映象常常直接说明为属性的类型、长度。
举例:
一个表示学生的关系可以简记为:
学生(学号,姓名,性别,年龄,籍贯,班级,系别)
1.2.3 关系数据库
定义:
在一个给定的现实世界领域中,相应于所有实体及实体之间联系的关系的集合构成一个关系数据库。
关系数据库也有
型和值
之分。关系数据库的型也称为
关系数据库模式
,是对关系数据库的描述,是关系模式的集合。关系数据库的值也称为
关系数据库
,是关系的集合。关系数据库模式与关系数据库通常统称为关系数据库。
总结:
关系实际上就是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,关系是它的值。关系模式是
静态的
、稳定的,而关系是
动态的
、随时间不断变化的,因为关系操作在不断地
更新
着数据库中的数据。但在实际当中,常常把关系模式和关系统称为关系,可以从上下文中加以区别。
1.3 关系的完整性
1.3.1 关系的完整性的概述
定义:
数据完整性由完整性规则来定义,关系模型的完整性规则是对关系的某种约束。
在关系模型中,数据的约束条件通过三类完整性约束条件来描述,它们是:
- 实体完整性
- 参照完整性
- 用户定义的完整性
为了维护数据库中的数据完整性,在对关系数据库执行插入、删除和修改等操作时,必须遵守这三类完整性规则。
1.3.2 实体完整性规则
若属性A是基本关系R的主属性,则属性A不能取空值。
例:学生(学号,姓名,性别,年龄,籍贯,班级,系别)
- 学号作为学生关系的主属性,则
学号不能取空值
例:选课(学号,课号,成绩)
- 学号和课号一起作为选课关系的主属性,则
学号和课号都不能取空值
。
在关系数据库系统中,用户在建立关系模式时,应定义该模式的实体完整性规则。设置某些属性为主键,在这些属性中不能设置取空值,以保证关系数据库系统中的任何一个关系都满足实体完整性约束条件。
实体完整性规则的说明:
关系模型
是用关系来描述实体及实体间的关系,所以在数据库中
一个关系
对应现实世界中的
一个实体集
,关系中的
每一个元组
对应一个实体。
现实世界中的
每一个实体
都是可以区分的,在关系中用主键
唯一
地标识一个实体(元组)。例如每个人,他都有自己的身份证号,而身份证号所有人都不会重复,所以它可以作为主键唯一地标识一个人。
若一个实体(元组)的主键值为空(所谓空值是“不知道”或“不确定”的值),说明存在某个未知的实体,这和实体的概念相矛盾。
1.3.3 参照完整性
(1)关系间的引用
在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。
例: 学生实体、专业实体
- 学生( 学号 ‾ \underline{学号} 学号,姓名,性别, 专业号 ‾ \underline{专业号} 专业号,年龄)
- 专业( 专业号 ‾ \underline{专业号} 专业号,专业名)
学生关系引用了
专业关系
的
主码
“专业号”。
学生关系中的
“专业号”
值必须是确实
存在
的专业的专业号 ,即专业关系中有该专业的记录。
(2)外键(Foreign Key)
外键的定义:
设
F
F
F是基本关系
R
R
R的一个或一组属性,如果
F
F
F与基本关系
S
S
S的主码
K
S
K_S
KS相对应,则称
F
F
F是基本关系
R
R
R的
外键
(外码)。
- 基本关系
R称为参照关系
(Referencing Relation) - 基本关系
S称为被参照关系
(Referenced Relation)或目标关系
(Target Relation)
是不是刚看觉得有点绕,那么我们就拿上面的例子来说明一下,比如关系
R
R
R就是
学生
,
F
F
F是学生属性中的
专业号
,
专业
实体就是基本关系
S
S
S,那么
学生实体
中的“专业号”就与专业实体中的主码
"专业号"
相对应,所以专业号(
F
F
F)就是学生实体(基本关系
R
R
R)的外键,也就是
外码
。
专业关系是被参照关系,学生关系为参照关系
在这我们再单独举个例子:
例:
学生(
学号
‾
\underline{学号}
学号,年龄,性别);
课程(
课号
‾
\underline{课号}
课号,课名);
选修(
学号
‾
\underline{学号}
学号,
课号
‾
\underline{课号}
课号,成绩)。
“学号”和“课程号”是选修关系的外码。
- 学生关系和课程关系均为被参照关系。
- 选修关系为参照关系。
(3)参照完整性规则
若属性(或属性组)
F
F
F是基本关系
R
R
R的外码它与基本关系
S
S
S的主码
K
S
K_S
KS相对应(基本关系
R
R
R和
S
S
S不一定是不同的关系),则对于
R
R
R中每个元组在
F
F
F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
- 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上。
- 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。
例:学生关系中每个元组的“专业号”属性只取
两类值
:
空值
,表示尚未给该学生分配专业非空值
,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配一个不存在的专业
例:选修(
学号
‾
\underline{学号}
学号,课程号,成绩)
“学号”和“课程号”可能的取值 :
- 选修关系中的
主属性
,不能取空值 - 只能取相应被参照关系中已经
存在
的主码值
1.3.4 用户自定义的完整性
关系数据库系统还允许用户定义某一具体数据库所涉及的数据必须满足的约束条件。这种约束条件是对数据在语义范畴的描述,由具体应用环境来决定,这就是用户定义的完整性。
例如:限定学生关系中学生的年龄在13~35之间
- 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
- 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能
例:课程(课程号,课程名,学分)
- “课程号”属性必须取唯一值
- 非主属性“课程名”也不能取空值
- “学分”属性只能取值{1,2,3,4}
巩固基础
学习完上面的内容我们来进行一轮小测试来巩固下基础~
- 用二维表数据来表示实体之间联系的模型叫做____C____ A) 网状模型 B) 层次模型C) 关系模型 D) 实体联系模型
- 关于关系模式码的叙述中,哪一项是不正确的 © A当候选码多于一个时,选定其中一个作为主码 B主码可以是单个属性,也可以是属性组C不包含在主码中的属性称为非主属性 D若一个关系模式中的所有属性构成码,则称为全码
- 主键约束用来强制数据的(B)完整性。 A)域 B)实体 C)参照 D)ABC都可以
- 如果把学生看为实体,某个学生的姓名叫“张三”,则张三应看成是(D ) A)记录型 B)记录值 C)属性型D)属性值
- 设有关系SC(SNO,CNO,GRADE),主码是(SNO,CNO).遵 照实体完整性规则 (D) A) 只有SNO不能取空值 B) 只有CNO不能取空值 C) 只有GRADE不能取空值D) SNO与CNO都不能取空值
- 在下面的两个关系中、职工号和部门号分别为职工关系和部门关 系的主键(或称主码)。 职工( 职工号 ‾ \underline{职工号} 职工号、职工名、部门号、职务、工资) 部门( 部门号 ‾ \underline{部门号} 部门号、部门名、部门人数、工资总额) 在这两个关系的属性中,只有一个属性是外键(或称外来键、外码、 外来码)。它是 **(B)**。 A) 职工关系的“职工号” B) 职工关系的“部门号” C) 部门关系的“部门号” D) 部门关系的“部门名”
- 设有关系模式R(A,B,C)和S(E,A,F),若R.A是R的主 码,S.A是S的外码,则S.A的值或者等于R中某个元 组的主码值,或者取空(null)。这是 ( 参照 ) 完整性规则
📢博客主页:https://blog.csdn.net/m0_63007797?spm=1011.2415.3001.5343
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 心无旁骛~ 原创,首发于 CSDN博客🙉
📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
版权归原作者 心无旁骛~ 所有, 如有侵权,请联系我们删除。