关系型数据库

关系型数据库

关系数据库简介

  • 1970年IBM公司的E.F.Codd提出关系数据模型
  • 1972年提出了关系第一、第二、第三范式
  • 1974年提出了关系的BC范式

关系数据结构及形式化定义

关系

单一的数据结构 ------ 关系

现实世界的实体及实体间的各种联系均用关系来表示

逻辑结构 ------ 二维表

从用户角度 关系模型中数据的逻辑结构是一张二维表

关系模型是建立在集合代数的基础上

域 Domain

定义 : 域是一组具有相同数据类型的值的集合

例 : 整数 实数 介于某个取值范围的整数 指定长度的字符串集合 {‘男’,‘女’} 等等

笛卡尔积 Cartesian Product

定义 : 给定一组域为D1,D2,...,DnD_1,D_2,...,D_nD1,D2,...,Dn,这些域可以是相同的 D1,D2,...,DnD_1,D_2,...,D_nD1,D2,...,Dn的笛卡尔积为:
D1×D2×...×Dn = { (d1, d2, ..., dn) ∣di∈Di, i=1, 2, ...,n} D_1×D_2×...×D_n\ =\ \{\ (d_1,\ d_2,\ ...,\ d_n)\ |d_i \in D_i,\ i=1,\ 2,\ ...,n\} D1×D2×...×Dn = { (d1, d2, ..., dn) diDi, i=1, 2, ...,n}
例:

# D1学生集合为 {'张三','李四'}
# D2性别集合为 {'男','女'}
# D3专业集合为 {'计算机应用','护理','会计'}

# 则 D1 D2 D3 的笛卡尔积为
# D1×D2×D3 = {('张三','男','计算机应用'),('张三','男','护理'),('张三','男','会计'),('张三','女','计算机应用'),('张三','女','护理'),('张三','女','会计'),('李四','男','计算机应用'),('李四','男','护理'),('李四','男','会计'),('李四','女','计算机应用'),('李四','女','护理'),('李四','女','会计')}

笛卡尔积的表示方法 : 笛卡尔积可表示为一个二维表,每行对应一个元组,表中的每列对应一个域

D1×D2×D3 =

学生性别专业
张三计算机应用
张三护理
张三会计
张三计算机应用
张三护理
张三会计
李四计算机应用
李四护理
李四会计
李四计算机应用
李四护理
李四会计
元组 Tuple

笛卡尔积中的每一个元素 (d1, d2, ..., dn)(d_1,\ d_2,\ ...,\ d_n)(d1, d2, ..., dn) 称作一个nnn元组 (n−tuple)(n-tuple)(ntuple) 或简称元组(tuple)(tuple)(tuple)

分量 Component

笛卡尔积元素(d1, d2, ..., dn)(d_1,\ d_2,\ ...,\ d_n)(d1, d2, ..., dn)中的每一个did_idi称作一个分量

基数 Cardinal number

一个域允许的不同取值个数称为这个域的基数

Di(i=1, 2, ..., n)D_i (i=1,\ 2,\ ...,\ n)Di(i=1, 2, ..., n)为有限集,其基数为mi (i=1, 2, ..., n),m_i\ (i=1,\ 2,\ ...,\ n),mi (i=1, 2, ..., n),D1×D2×...×DnD_1×D_2×...×D_nD1×D2×...×Dn的基数MMM为:
M=∏i=1nmi \huge M=\prod^n_{i=1}m_i M=i=1nmi
上面的 D1×D2×D3D_1×D_2×D_3D1×D2×D3 的基数为 : 2×2×3=122×2×3=122×2×3=12

关系 Relation
(1) 关系

D1×D2×...×DnD_1×D_2×...×D_nD1×D2×...×Dn的子集称作在域D1, D2, ..., DnD_1,\ D_2,\ ...,\ D_nD1, D2, ..., Dn上的关系,表示为 :
R   (D1, D2, ..., Dn) R\ \ \ (D_1,\ D_2,\ ...,\ D_n) R   (D1, D2, ..., Dn)
RRR表示为关系名,nnn表示关系的目或度 Degree

n=1n=1n=1时 称该关系为单元关系

n=2n=2n=2时 称该关系为元二关系

(2) 元组

关系中的每个元素是关系中的元组 通常用ttt来表示

(3) 关系的表示

关系也是一个二维表 表的每行对应一个元组 表的每列对应一个域,一个属性

(4) 属性 Attribute

关系中不同的列可以对应相同的域 为了加以区分 必须对每列起一个名字 称为属性

n目关系必有n个属性

(5) 码 Key

候选码 Candidate key :

若关系中的某一属性组的值能唯一的标识一个元组 则称该属性组为候选码

最简单的情况 : 候选码只包含一个属性

全码 All-key

最极端的情况 : 关系模式中的所有属性组是这个关系模式的候选码 称为全码

主码 Primary key

若一个关系有多个候选码 则选定其中一个为主码

外码 Foreign Key

定义 : 设FFF是基本关系RRR的一个或一组属性 但不是关系RRR的码,如果FFF与基本关系SSS的主码KSK_SKS相对应 则称FFF是基本关系RRR的外码

基本关系RRR称为参照关系

基本关系SSS称为被参照关系

  • 关系R和S不一定是不同的关系
  • 目标关系S的主码K_S和参照关系的外码F必须定义在同一域上
  • 外码不一定要与相应的主码同名 当外码与相应的主码属于不同关系时 往往取相同的名字 以便于识别
主属性 Prime attribute

候选码的诸属性称为主属性

非主属性

不包含在任何候选码中的属性

(6) 三类关系
  • 基本关系 (基本表或基表) : 实际存在的表 是实际存储数据的逻辑表示
  • 查询表 : 查询结果对应的表
  • 试图表 : 由基本表或其他试图导出的表 是虚表 不对应实际存储的数据
(7) 基本关系的性质
  • 列是同质的 Homogeneous
  • 不同的列可以出自同一个域 其中的每一列称为属性 不同的属性要给予不同的属性名
  • 列的顺序无所谓 列的次序可以任意交换
  • 任意两个元组的候选码不能相同
  • 行的顺序无所谓 行的顺序可以任意交换
  • 分量必须取原子值 这是规范条件中最基本的一条 (不能拆分单元格)

关系模式

什么是关系模式

==关系模式 ( Relation Schema)==是对关系的描述 关系模式是型 关系是值

(1) 元组集合的结构

属性构成 属性来自的域 属性与域之间的

(2) 一个关系通常由赋予它的元组语义确定

(3) 现实的世界中还存在着完整性约束

定义关系模式

关系模式可以形式化的表示为 : R (U, D, DOM, F)R\ (U,\ D,\ DOM,\ F)R (U, D, DOM, F)

# R : 关系名
# U : 组成该关系的属性名的集合
# D : 属性组U中属性所来自的域
# DOM : 属性向域的映像集合
# F : 属性间的数据依赖关系集合
关系模式与关系
  • 关系模式是静态的 稳定的
  • 关系是动态的 随时间不断变化的

关系是关系模式在某一时刻的状态或内容 在实际工作中关系模式和关系往往统称为关系 需要通过上下文加以区分

关系数据库

在一个给定的应用领域中 所有关系的集合构成一个关系数据库

关系数据库的型与值

关系数据库的型 : 关系数据库模式 对关系数据库的描述

关系数据库模式 : 若干域的定义 在这些域上定义的若干关系模式

关系数据库的值 : 关系模式在某一刻对应的关系的集合简称为关系数据库

关系模型的存储结构

1. 有的关系数据库管理系统中一个表对应一个操作系统文件 将物理数据组织交给操作系统完成

2. 有的关系数据库管理系统从操作系统申请若干文件 自己划分文件空间 组织表 索引等存储结构 并进行存储管理

关系数据结构

基本关系操作

常用的关系操作

查询 : 选择 投影 连接 除 并 交 差等

其中 选择、投影、并、差、笛卡尔积是五种基本操作

数据更新 : 插入 删除 修改

查询的表达能力是其中最主要的部分

关系操作的特点

集合操作方式 : 操作的对象和结果都是集合 一次一集合的方式

关系数据库语言的分类

关系代数语言

用对关系的运算来表达查询要求 代表 : LSBL

关系演算语言

用谓词来表达查询要求

元组关系演算语言 : 谓词变元的基本对象是元组变量

域关系演算语言 : 谓词变元的基本对象是域变量

具有关系代数和关系演算双重特点的语言

代表 : SQL (Structured Query Language)

关系的完整性

关系模型中有三类完整性约束 : 实体完整性 参照完整性和用户定义的完整性

其中实体完整性 参照完整性是关系模型必须满足的完整性约束条件 称为关系的两个不变性 应该由关系系统自动支持

用户定义的完整性是应用领域中需要遵循的约束条件 体现了具体领域中的语义约束

实体完整性 Entity Integrity

实体完整性是指若属性A是基本关系R的主属性 则A不能取空值

空值就是 “不知道” 或 “不存在” 或 “无意义” 的值

实体完整性规则的说明 :

  • 实体完整性规则是针对基本关系而言的 一个基本表通常对应现实世界的一个实体集
  • 现实世界中的实体是可区分的 即它们具有某种唯一性的标识
  • 关系模型中以主码作为唯一性标识
  • 主码中的主属性不能取空值

实体完整性规则规定基本关系的所有主属性都不能取空值

参照完整性

关系间的引用

在关系模型中实体与实体之间的联系都是用关系来描述的 存在着关系和关系之间的引用

例:

# 学生 (*学号,姓名,性别,*专业号,年龄)
# 专业 (*专业号,姓名)
学生关系引用了专业关系的主码 "专业号", 学生关系中的 "专业号" 值必须是确实存在的专业号,即专业关系中有该专业的记录.
学生中的专业号是外码  那么学生表中专业号的值必须依赖于专业表中专业号的值来确定 不能出现专业表中专业号之外的值
用户定义的完整性

针对某一具体关系数据库的约束条件 反应某一具体应用所涉及的数据必须满足具体的语义要求

关系模型应提供定义和检验这类完整性的机制,以便用统一的系统方法处理它们 而不要用应用程序承担这一功能

例: 学生 (姓名,年龄,性别,分数)

# 年龄必须是正整数  0 <= n <= 100
# 性别只能取 {'男','女'}
# 分数只能是正数   0 <= n <= 100  

关系代数

关系代数是一种抽象的查询语言 是对关系的运算来表达查询

关系代数的运算对象是关系 运算结果也是关系

关系代数按运算符的不同可分为传统的集合运算和专门的关系运算

集合运算是从关系的水平方向即行的角度进行

专门的关系运算不仅涉及行而且涉及列

集合运算符
运算符含义
∪\cup
−-
∩\cap
×\times×笛卡尔积
专门的关系运算符
运算符含义
σ\sigmaσ选择
π\piπ投影
⋈\Join连接
÷\div÷
传统的集合运算
并 union

关系RRRSSS具有相同的目nnn (即两个关系都有nnn个属性),相应的属性取自同一个域

RRRSSS的并运算表示为
R∪S = {t∣t∈R∨t∈S} R\cup S\ = \ \{t|t\in R\vee t\in S\} RS = {ttRtS}
运算结果为: nnn目关系,由属于RRR或属于SSS的元组组成

例:

RRR

ABC
a1b1c1
a1b2c2
a2b2c1

SSS

ABC
a1b2c2
a1b3c2
a2b2c1

R∪SR\cup SRS

ABC
a1b1c1
a1b2c2
a2b2c1
a1b3c2
差 except

关系RRRSSS具有相同的目nnn (即两个关系都有nnn个属性),相应的属性取自同一个域

RRRSSS的差运算表示为
R−S = {t∣t∈R∧t∉S} R- S\ = \ \{t|t\in R\wedge t\notin S\} RS = {ttRt/S}
运算结果为: nnn目关系,由属于RRR并且不属于SSS的元组组成

例:

R−SR-SRS:

ABC
a1b1c1
交 intersection

关系R和S具有相同的目n (即两个关系都有n个属性),相应的属性取自同一个域

R与S的交运算表示为
R∩S = {t∣t∈R∧t∈S}R∩S = R−(R−S) R\cap S\ = \ \{t|t\in R\wedge t\in S\}\\ R\cap S\ = \ R-(R-S) RS = {ttRtS}RS = R(RS)

运算结果为: n目关系,由属于R并且属于S的元组组成

例:

R∩SR\cap SRS:

ABC
a1b2c2
a2b2c1
笛卡尔积 Cartesian Product

严格来讲应该是广义的笛卡尔积 (Extended Cartesian Product)

R: n目关系,k个元组

S: m目关系,r个元组

R与S的笛卡尔积表示为R×S:
R×S = {tr⌢ts∣tr∈R∧ts∈S} R×S\ = \ \{{t_r}^\frown{t_s}|t_r\in R\wedge t_s\in S\} R×S = {trtstrRtsS}
运算结果为: 行: k×rk×rk×r个元组,列: n+mn+mn+m个属性的元组的集合

其中元组的前n列是关系R的元组 后m列是关系m的元组

R×SR×SR×S:

R.AR.BR.CS.AS.BS.C
a1b1c1a1b2c2
a1b1c1a1b3c2
a1b1c1a2b2c1
a1b2c2a1b2c2
a1b2c2a1b3c2
a1b2c2a2b2c1
a2b2c1a1b2c2
a2b2c1a1b3c2
a2b2c1a2b2c1
专门的关系运算

关系运算包括:选择 投影 连接 除运算

相关记号说明:

关系模式为R (A1, A2 , ..., An)R\ (A_1,\ A_2\ ,\ ...,\ A_n)R (A1, A2 , ..., An),它的一个关系为RRR,t∈Rt\in RtR表示tttRRR的一个元组,t[Ai]t[A_i]t[Ai]则表示元组t中相应与属性AiA_iAi的一个分量

A=Ai1, Ai2, ..., AikA={A_{i1},\ A_{i2},\ ...,\ A_{ik}}A=Ai1, Ai2, ..., Aik,其中Ai1, Ai2, ..., AikA_{i1},\ A_{i2},\ ...,\ A_{ik}Ai1, Ai2, ..., AikA1, A2 , ..., AnA_1,\ A_2\ ,\ ...,\ A_nA1, A2 , ..., An中的一部分,则A称为属性列或属性组

t[A]=(t[Ai1, t[Ai2, ..., t[Aik])t[A]=(t[A_{i1},\ t[A_{i2},\ ...,\ t[A_{ik}])t[A]=(t[Ai1, t[Ai2, ..., t[Aik])表示元组t在属性列A上诸分量的集合,Aˉ\bar{A}Aˉ则表示Ai1, Ai2, ..., Aik{A_{i1},\ A_{i2},\ ...,\ A_{ik}}Ai1, Ai2, ..., Aik中去掉Ai1, Ai2, ..., Aik{A_{i1},\ A_{i2},\ ...,\ A_{ik}}Ai1, Ai2, ..., Aik后剩余的属性组

RRRnnn目关系,SSSmmm目关系,tr∈R, ts∈S, tr⌢tst_r\in R,\ t_s\in S,\ {t_r}^\frown{t_s}trR, tsS, trts称为元组的连接,tr⌢ts{t_r}^\frown{t_s}trts是一个n+mn+mn+m列的元组,前nnn个分量为RRR中的一个nnn元组,后mmm个分量是SSS中的一个mmm元组

给定一个关系R (X, Z)R\ (X,\ Z)R (X, Z),XXXZZZ为属性组,当t[X]=xt[X]=xt[X]=x时,xxxRRR中的象集ZxZ_xZx
Zx={t[Z] ∣ t∈R, t[X]=x} Z_x=\{t[Z]\ |\ t\in R,\ t[X]=x\} Zx={t[Z]  tR, t[X]=x}
它表示RRR中属性组XXX上值为xxx的诸元组在ZZZ上分量的集合

例:

R:

XY
x1y1
x1y2
x1y3
x2y3
x2y6
x3y1
x3y5


Zx1= {y1, y2, y3}Zx2= {y3, y6}Zx3= {y1, y5} Z_{x1}=\ \{y1,\ y2,\ y3\}\\ Z_{x2}=\ \{y3,\ y6\}\\ Z_{x3}=\ \{y1,\ y5\} Zx1= {y1, y2, y3}Zx2= {y3, y6}Zx3= {y1, y5}

选择 Selection

选择又称为限制 Restriction 在关系R中选择满足给定条件的诸元组 记作:
σF (R) = {t ∣ t∈R∧F(t)=true} \sigma_F\ (R)\ = \ \{t\ |\ t\in R\wedge F(t) = true\} σF (R) = {t  tRF(t)=true}
其中FFF为选择条件 基本形式为:
X1 θ Y1 X_1\ \theta\ Y_1 X1 θ Y1
其中, θ\thetaθ表示比较运算符,它可以是 >(大于),<(小于),>=()大于等于,<=(小于等于),<>(不等于)>(大于),<(小于),>=()大于等于,<=(小于等于),<>(不等于)>(大于),<(小于),>=()大于等于,<=(小于等于),<>(不等于),X1,Y1X_1,Y_1X1,Y1是属性名,或为常量,或为简单函数,属性名可以用它的序号来代替

例:

在学生表中查询所有分数在90分以上的学生
θSsum>90 (Student) \theta_{Ssum>90}\ (Student) θSsum>90 (Student)

投影 Projection

从R中选择出若干属性列组成新的关系
πA (R) ={t[A] ∣ t∈R} \pi_{_A}\ (R)\ =\{t[A]\ |\ t\in R\} πA (R) ={t[A]  tR}
其中: A: R中的属性列 投影操作主要是从列的角度进行运算 投影之后不仅取消了原关系中的某些列 ,还可能取消某些元组(避免重复元组)

例:

只查询学生姓名与分数
πSname,Ssum (Student) \pi_{{Sname,Ssum}}\ (Student) πSname,Ssum (Student)

连接 Join

又称为θ\thetaθ连接,表示从两个关系的笛卡尔积中选取属性间满足一定条件的元组
R ⋈AθBS={tr⌢ts ∣ tr∈R ∧ ts∈S ∧ tr[A]θ ts[B]} R\ \bowtie_{A\theta B} S = \{{t_r}^\frown{t_s}\ |\ t_r\in R\ \wedge\ t_s\in S\ \wedge\ t_r[A]\theta\ t_s[B]\} R AθBS={trts  trR  tsS  tr[A]θ ts[B]}
A和B : 分别为R和S上度数相等并且可比的属性组

θ\thetaθ : 比较运算符

运算结果 : 从R和S的广义笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ\thetaθ的元组

等值连接 equijoin

θ\thetaθ′=′'='=的连接运算称为等值连接

等值连接的含义 : 从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组
R ⋈A=BS={tr⌢ts ∣ tr∈R ∧ ts∈S ∧ tr[A] = ts[B]} R\ \bowtie_{A= B} S = \{{t_r}^\frown{t_s}\ |\ t_r\in R\ \wedge\ t_s\in S\ \wedge\ t_r[A]\ =\ t_s[B]\} R A=BS={trts  trR  tsS  tr[A] = ts[B]}

自然连接 Natural join

自然连接是一种特殊的等值连接 两个关系中进行比较的分量必须是相同属性组 在结果中把重复的属性列去掉

自然连接的含义 : R和S具有相同的属性组B
R ⋈S={tr⌢ts ∣ tr∈R ∧ ts∈S ∧ tr[B] = ts[B]} R\ \bowtie S = \{{t_r}^\frown{t_s}\ |\ t_r\in R\ \wedge\ t_s\in S\ \wedge\ t_r[B]\ =\ t_s[B]\} R S={trts  trR  tsS  tr[B] = ts[B]}
自然连接还需要取消重复列 所以是同时从行和列的角度进行运算

悬浮元组: 两个关系R和S在进行自然连接时,关系R和S中被舍弃的元组称为悬浮元组

外连接: 如果把悬浮元组舍弃的元组也保存在结果关系中,在其他属性上填上空值 null,这种连接就叫做外连接

左外连接 : 只保留左边关系R中的悬浮元组

右外连接 : 只保留右边关系S中的悬浮元组

例:

R

ABC
a1b15
a1b26
a2b38
a2b412

S

BE
b13
b27
b310
b32
b52

R⋈C<ESR\Join_{C<E} SRC<ES (一般连接)

AR.BCS.BE
a1b15b27
a1b15b310
a1b26b27
a1b26b310
a2b38a2b3

R⋈SR\Join SRS (自然连接)

ABCE
a1b153
a1b267
a2b3810
a2b382
除 Division

给定关系R(X,Y)R(X,Y)R(X,Y),和S(Y,Z)S(Y,Z)S(Y,Z),其中X,Y,ZX,Y,ZX,Y,Z为属性组,RRR中的YYYSSS中的YYY可以有不同的属性名,但必须出自相同的域

RRRSSS的除运算得到一个新的关系P(X)P(X)P(X),PPPRRR中满足下列条件的元组在XXX属性列上的投影

元组在XXX上分量值xxx的象集YxY_xYx包含SSSYYY上投影的集合 记作:
R÷S = {tr[X] ∣ tr∈R∧πY(S)⊆Yx} R\div S\ = \ \{tr[X]\ |\ tr\in R\wedge \pi Y(S) \subseteq Y_x \} R÷S = {tr[X]  trRπY(S)Yx}
YxY_xYx : xxxRRR中的象集,x=tr[X]x=tr[X]x=tr[X]

例:
RRR

ABC
a1b1c2
a2b3c7
a3b4c6
a1b2c3
a4b6c6
a2b2c3
a1b2c1

SSS

BCD
b1c2d1
b2c1d1
b2c3d2

Za1={(b1,c2), (b2,c3), (b2,c1)}Za2={(b3,c7), (b2,c3)}Za3={(b4,c6)}Za4={(b6,c6)} Z_{a1}=\{(b1,c2),\ (b2,c3),\ (b2,c1)\}\\ Z_{a2}=\{(b3,c7),\ (b2,c3)\}\\ Z_{a3}=\{(b4,c6)\}\\ Z_{a4}=\{(b6,c6)\}\\ Za1={(b1,c2), (b2,c3), (b2,c1)}Za2={(b3,c7), (b2,c3)}Za3={(b4,c6)}Za4={(b6,c6)}

πB,C(S)\pi _{{B,C}} (S)πB,C(S)

BC
b1c2
b2c1
b2c3

πB,C(S)\pi _{_{B,C}} (S)πB,C(S)只包含象集Za1Z_{a1}Za1的所有元素

所以

R÷SR\div SR÷S

A
a1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值