关系型数据库
关系的形式化定义
域
域是一组有相同数据类型的值的集合,例如整数域、实数域、字符串域等。一般用D表示域,D中的元素用d
(分量)表示。域中所包含元素的个数被称为域的基数,记作m
。如:
D = {1,2,3,4,5,6,7,8,9,0}
m = 10
笛卡尔积
给定一组域D1,D2,…,Dn,其笛卡尔积D1×D2×…×Dn是由D1中的每个元素d1与D2中的每个元素d2,…,Dn中的每个元素dn组成的有序对(d1,d2,…,dn)的集合。
D1 = {1,2,3}
D2 = {a,b,c}
D1×D2 = {(1,a),(1,b),(1,c),(2,a),(2,b),(2,c),(3,a),(3,b),(3,c)}
上述每个元素 (d1,d2,…,dn) 称为一个元组,其中d1称为元组的第一个分量,d2称为元组的第二个分量,…,dn称为元组的第n个分量。这是一个 n-元组
。
笛卡尔积的基数为:
m = m1*m2*…*mn
即 Π(i=1,n)mi
。在上述例子中,m = 3*3 = 9
。
同时,笛卡尔积可以表示成一个二维表的形式。设D1={李力,王平,刘伟},D2={男,女},则D1×D2的笛卡尔积为:
D1×D2 = {(李力,男),(李力,女),(王平,男),(王平,女),(刘伟,男),(刘伟,女)}
表示为二维表:
姓名 | 性别 |
---|---|
李力 | 男 |
李力 | 女 |
王平 | 男 |
王平 | 女 |
刘伟 | 男 |
刘伟 | 女 |
关系
在笛卡尔积中的任意一个子集称为定义在笛卡尔积上的一个关系。
R(D1,D2) = {(李力,男),(李力,女),(王平,男),(王平,女),(刘伟,男),(刘伟,女)}
笛卡尔积D1×D2×…×Dn
上的关系R(D1,D2,…,Dn)
被称为定义在域D1,D2,…,Dn
上的n元关系。
如上面的例子有这样的关系:
姓名 | 性别 |
---|---|
李力 | 男 |
王平 | 女 |
刘伟 | 男 |
关系的基数是关系中元组的个数。
- n=1,称为一元关系。
- 关系中的每个元素是关系中的元组,通常用 t 来表示。
- 关系也可以看作一个二维表,每个元组对应表中的一行,每个分量对应表中的一列。
- 具有相同关系框架的关系称为同类关系。
关系可分为关系的头和关系的体。一般关系的头保持不变,关系的体不断增长。在产生的关系中,并不是所有的关系符合逻辑。
关系模式
关系模式是对关系的描述,关系模式需要指出元组的结构,即由哪些属性组成,属性取自哪个域,属性和域之间存在映射关系。关系模式可以形式化为:
R(U,D,DOM,F)
其中:
- R是关系的名称,是一个非空有限集合。
- U是关系的属性集合,是一个非空有限集合。
- D是属性来自的域。
- DOM是属性和域之间的映射关系。
- F是属性数据的依赖关系集合。
简记为:
R(U)或R(A1,A2,…,An)
// 其中,A1,A2,…,An是属性的名称
关系模式是型,关系是值。
关系数据库
在给定的领域中,所有实体以及实体之间的联系所对应的关系的集合构成一个关系的数据库。
- 关系数据库
- 关系模式
- 关系
关系数据库的模式是对关系数据库的描述,关系数据库的模式是关系模式的集合。
候选码、主码和外码
候选码
关系候选码是能够标识关系中元组唯一性的一个属性或属性组合。候选码有唯一性和最小性。
如学生表中,学号是唯一的,所以学号是候选码。但是在选课关系中,学号和课程号组合起来才能唯一标识一个选课记录,所以学号和课程号组合起来是候选码。
主码
从多个候选码中选择一个作为查询、修改、删除记录的最主要依据,称为主码。比如学生表中,学号是主码。或者在姓名不重复的情况下,姓名也可以作为主码。
- 主属性。包含在主码中的各个属性称为关系的主属性。
- 非主属性。不包含在主码中的属性称为非主属性。
- 全码。所有属性的组合是关系的候选码。
举一个全码的例子,在教师、学生、课程三种关系中,教师号、学号、课程号三个属性的组合是全码。这个全码构成了教师教课的关系、学生选课的关系。
外码
如果关系R2的一个或一组属性不是关系R2的主码,而是另一个关系R1的主码,则称这个属性或属性组合为关系R2的外码。
关系的完整性
关系的完整性有三类约束:实体完整性、参照完整性和用户自定义完整性。
实体完整性
主码的值不能为空或者部分为空。否则就会违背现实世界的情况。
参照完整性
参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。参照完整性又称引用完整性。
用户自定义完整性
用户自定义完整性是用户根据实际需要定义的完整性约束条件。比如在成绩表中,成绩不能小于0或者大于100。
关系代数
关系代数是一种抽象的查询语言,关系代数的运算对象和运算结果都是关系。下面是一些关系代数的运算符。
关系运算符
集合运算符:
- 并运算:
R ∪ S
- 交运算:
R ∩ S
- 差运算:
R - S
- 笛卡尔积:
R × S
关系运算符:
- 选择:
σ
- 投影:
π
- 连接:
⋈
- 除:
÷
比较运算符:
- 等于:
=
- 不等于:
≠
- 小于:
<
- 小于等于:
≤
- 大于:
>
- 大于等于:
≥
逻辑运算符:
- 与:
∧
- 或:
∨
- 非:
¬
传统的集合运算
若关系 R 和关系 S 有相同的度数。
关系R和关系S的并运算:
R ∪ S = {r ∪ s | r ∈ R, s ∈ S}
关系R和关系S的交运算:
R ∩ S = {r ∩ s | r ∈ R, s ∈ S}
关系R和关系S的差运算:
R - S = {r - s | r ∈ R, s ∈ S}
广义笛卡尔积:
R × S = {r × s | r ∈ R, s ∈ S}
举例:
R = {1, 2, 3},S = {a, b, c},则:
R ∪ S = {1, 2, 3, a, b, c}
R ∩ S = {}
R - S = {1, 2, 3}
R × S = {(1, a), (1, b), (1, c), (2, a), (2, b), (2, c), (3, a), (3, b), (3, c)}
专门的关系运算
设关系模式为R(A1, A2, ..., An),他的一个关系为R,t 是 R 的一个元组,t = (a1, a2, ..., an)。t[Ai] 表示 t 的第 i 个分量,即 ai。
属性列
若 A={Ai1, Ai2, ..., Ain}
,其中 Ai1, Ai2, ..., Ain
是 A1, A2, ..., An
的一部分,那么 A 就称为属性列或域列。A上加一个波浪线表示在A1, A2, ..., An中去除A后剩下的属性。
连接
R为m目