关系模型的数据结构及其形式化定义
关系的形式化定义及其有关概念
- 域(Domain):域是一组具有相同数据类型的值的集合。
- 笛卡尔积(Cartesian Product):一个记录叫做一个元组(tuple),元组中每一个属性值,叫一个分量。允许其中某些域是相同的。
D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn =
{(d1,d2,…,dn)|diDi,i=1,2,…,n}
所有域的所有取值的一个组合不能重复 - 基数(Cardinal number):域的元素个数
关系的性质
关系是一种规范化了的二维表中行的集合
· 每一列中的分量必须来自同一个域,必须是同一类型的数据。
· 不同的属性可来自同一个域,不同的属性必须有不同的名字。
· 列的顺序可以任意交换。
· 关系中元组的顺序(即行序)可任意。
· 关系中不允许出现相同的元组。
· 关系中每一分量必须是不可分的数据项
关系模式
关系的码与关系的完整性
候选码(键)与主码(键)
- 候选码(Candidate key)
若关系中的某一属性组的值能唯一地标识一个元组,其真子集不行,则称该属性 组为候选码。(最少属性的集合) - 全码(All-key)
最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key) - 主码(Primary Key)
从多个候选码中选择一个作为查询、插入或删除元组的操作变量,被选用的候选码称为 主码。
注意:每个关系必须选择一个主码 ,且不能随意改变。 - 主属性(Prime Attribute)与非码属性(Non-Prime Attribute)
主属性:包含在主码中的各个属性称为主属性
非码属性:不包含在任何候选码中的属性称为非主属性(或非码属性)
外码
依赖于另一个关系的主码
例子:
外码并不一定要与相应的主码同名
当外码与相应的主码属于不同关系时,往往取相同的名 字,以便于识别
关系的完整性
数据库的完整性
数据库的完整性是指数据库中数据的正确性和相容性。为了保证数据库的完整性,数据库管理系统(DBMS)提供了各种机制,包括实体完整性、参照完整性、用户定义的完整性和域完整性。
-
实体完整性:确保每个表都有一个主键,并且主键列中的值是唯一的和非空的。实体完整性可以防止表中出现重复的记录。
插入或对主码列进行更新操作时,关系数据库管理系统按照实体完整性规则自动进行检查。包括:- 检查主码值是否唯一,如果不唯一则拒绝插入或修改
- 检查主码值是否唯一,如果不唯一则拒绝插入或修改
-
参照完整性:确保外键列中的值必须与参照它的主键列中的某个值相匹配,或者为空。参照完整性可以防止引用不存在的记录。
例如,对表SC和Student有四种可能破坏参照完整性的情况 :- SC表中增加一个元组,该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。
- 修改SC表中的一个元组,修改后该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。
- 从Student表中删除一个元组,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。
- 修改Student表中一个元组的Sno属性,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等 。
-
用户定义的完整性:由用户定义的完整性规则,它反映了应用领域中的特定约束。例如,某个属性值必须在一定范围内,或者两个属性值必须满足某种关系。
-
域完整性:确保表中列的数据类型和约束是有效的。例如,某个列的数据类型为整数,那么这个列只能接受整数值。
数据库完整性对于维护数据的准确性和一致性至关重要,特别是在处理关键任务和敏感数据时。它还有助于减少数据冗余,提高数据查询的效率,并确保数据的可靠性。
关系代数
关系代数是一种抽象的查询语言 ;
关系代数的运算对象与运算结果都是关系。
关系代数的分类及其运算符
-
传统的集合运算:
把关系看成元组的集合,以元组作为集合中元素来进行运算,其运算是从关系的“水平”方向即行的角度进行的。
包括并、差、交和笛卡尔积等运算 -
专门的关系运算:
不仅涉及行运算,也涉及列运算,这种运算是为数据库的应用而引进的特殊运算。
包括选取、投影、连接和除法等运算。
传统的集合运算
设给定两个关系R、S,若满足:
(1) 具有相同的列数(或称度数)n;
(2) R中第i个属性和S中第i个属性必须来自同一个域。
则说关系R、S是相容的。除笛卡尔积外,其他的集合运算要求参加运算的关系必须满足上述的相容性定义。
-
并(Union)
R 和S:
具有相同的目n(即两个关系都有n个属性)
相应的属性取自同一个域
结果去重
R∪S :
仍为n目关系,由属于R或属于S的元组组成R∪S={t∣t∈R∨t∈S}
-
差(Difference)
R和S
具有相同的目n
相应的属性取自同一个域
R - S
仍为n目关系,由属于R而不属于S的所有元组组成R−S={t∣t∈R∧t∈/S}
-
交(Intersection)
R和S
具有相同的目n
相应的属性取自同一个域
R∩S
仍为n目关系,由既属于R又属于S的元组组成R∩S={t∣t∈R∧t∈S} R∩S=R–(R−S)
-
笛卡尔积
严格地讲应该是广义的笛卡尔积(Extended Cartesian Product)
R: n目关系,k 1 个元组
S: m目关系,k2 个元组
R×S
列:(n+m)列元组的集合
元组的前n列是关系R的一个元组
后m列是关系S的一个元组
行:k1 × k2 个元组R × S = { t r t s ^ ∣ t r ∈ R ∧ t s ∈ S } R×S = \{\widehat{tr \ ts} |tr \in R ∧ ts \in S \} R×S={ tr ts∣tr∈R∧ts∈S}
专门的关系运算
由于传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算。
在讲专门的关系运算之前,为叙述上的方便先引入几个概念。
- R,t∈R,t[Ai]
设关系模式为R(A1,A2,…,An)
employer(no,name,age)
t∈R表示t是R的一个元组。 例如 {t/t∈R}
t[Ai]则表示元组t中相应于属性Ai的一个分量 - A,t[A]
若A={Ai1,Ai2,…,Aik},其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则A称为属性列或属性组。
t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元组t在属性列A上诸分量的集合。 - tr ts
R为n目关系,S为m目关系。
tr ∈R,ts∈S, tr ts称为元组的连接。
tr ts是一个n + m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。 - 象集Zx
给定一个关系R(X,Z),X和Z为属性组。
当t[X]=x时,x在R中的象集(Images Set)为:
Zx={t[Z]|t ∈R,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z上分量的集合
选取
投影
连接
- 一般连接
-
等值连接
-
自然连接(Natural join)
注意:
1、自然连接一定是等值连接,但等值连接不一定是自然连接。
2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量必须是公共属性。
3、等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
- 除法(Division)