第3章 关系数据模型
3.1 关系数据模型关系数据库
3.2 基本术语与形式化定义
3.3 关系代数
3.1 关系数据模型和关系数据库
关系数据模型源于数学。
1970年IBM研究员E.F.Codd博士在美国计算机学会会刊(《Communication of the ACM》)上发表了题为“A Relational Model of Data for Shared Data Banks”的论文,开创了数据库系统的新纪元。
关系模型
关系模型由三部分组成:
数据结构
操作集合
完整性约束
这三部分也称为关系模型三要素。
3.1.1 数据结构
关系数据模型用二维表来组织数据。
这个二维表在关系数据库中就称为关系。
关系数据库就是表或者说是关系的集合。
表是逻辑结构而不是物理结构。
3.1.2 数据操作
关系数据模型中的操作包括:
传统的关系运算:并、交、差、广义笛卡尔乘积;
专门的关系运算:选择、投影、连接、除;
有关的数据操作:查询、插入、删除、更改。
操作特点
关系模型中操作的数据以及查询的结果都是完整的集合(或表),
这些集合可以只包含一行数据,也可以是不包含任何数据的空集合。
非关系模型数据库中典型的操作是一次一行或一次一个记录。
集合处理能力是关系系统区别于其他系统的重要特征。
关系模型与非关系模型区别
在非关系模型中,各个数据记录之间是通过指针等方式连接的,当要定位到某条记录时,需要用户自己按指针的链接方向逐层查找——导航。
在关系模型中,用户只需指定数据的定位条件,数据库管理系统就可以自动定位到该数据记录——非导航。
层次模型查找示例
关系模型查找示例
关系操作
关系模型的数据操作主要包括:
查询、插入、删除、更新
关系数据库中的信息表示方式:表中的行列位置有明确的值——逻辑层。
关系数据库的物理层
关系数据库在物理层也使用指针,但这些物理层的存储细节对用户来说都是不可见的,用户所看到的物理层实际上就是存放数据的数据库文件:
文件名
3.1.3 数据完整性约束
数据的完整性是指保证数据正确性的特征。
数据完整性是一种语义概念,包括:
与现实世界中应用需求的数据的相容性和正确性;
数据库内数据之间的相容性和正确性。
数据完整性
数据完整性由一组完整性规则定义,关系模型的完整性规则是对关系的某种约束条件。
在关系数据模型中将数据完整性分为三类:
实体完整性
参照完整性(引用完整性)
用户定义的完整性
3.2 关系模型的基本术语与
形式化定义
3.2.1 基本术语
3.2.2 形式化定义
3.2.1 基本术语
关系:关系就是二维表,二维表的名字就是关系的名字。
属性:二维表中的每个列就称为一个属性(或叫字段),
每个属性有一个名字——属性名
某一列的值——属性值
列的个数——关系的元数。如果一个二维表有n个列,则称其为n元关系。
基本术语(续)
值域:二维表中属性的取值范围称为值域。
基本术语(续)
元组:二维表中的一行数据称为一个元组(记录值)。
基本术语(续)
分量:元组中的每一个属性值称为元组的一个分量。
n元关系的每个元组有n个分量。
例:(0811101,李勇,21,男,计算机系),有5个分量
基本术语(续)
关系模式:二维表的结构称为关系模式。
设有关系名为R,属性分别为A1,A2,…,An,则关系模式可以表示为:
R(A1,A2,…,An)
如果将关系模式理解为数据类型,则关系就是该数据类型的一个具体值。
基本术语(续)
关系数据库:对应于一个关系模型的所有关系的集合称为关系数据库。
候选键:如果一个属性或属性集的值能够惟一标识一个关系的元组而又不包含多余的属性,则称该属性或属性集为候选键。
基本术语(续)
主键:当一个关系中有多个候选键时,从中选择一个作为主键。
每个关系只能有一个主键。
主键也称为主码或主关键字,用于惟一地确定一个元组。
主键可以由一个属性组成,也可以由多个属性共同组成。
主键示例
□学生(学号,姓名,性别,年龄,所在系)
基本术语(续)
主属性:包含在任一候选键中的属性称为主属性。
非主属性:不包含在任一候选键中的属性称为非主属性。
选课(学号,课程号,成绩)
术语对比
3.2.2 形式化定义
定义笛卡尔积:设D1,D2,…,Dn为任意集合,定义笛卡尔积D1,D2,…,Dn为:
D1 × D2 × … × Dn ={( d1,d2,…,dn ) | di ∈Di,i=1,2,…,n }
其中每一个元素(d1,d2,…,dn)称为一个n元组,简称元组。
元组中每一个di称为是一个分量。
笛卡尔积示例
D1={计算机系,信息管理系}
D2={李勇,刘晨,吴宾}
D3={男,女}
则D1 × D2 × D3笛卡尔积为:
{(计算机系,李勇,男),(计算机系,李勇,女),
(计算机系,刘晨,男),(计算机系,刘晨,女),
(计算机系,吴宾,男),(计算机系,吴宾,女),
(信息管理系,李勇,男),(信息管理系,李勇,女),
(信息管理系,刘晨,男),(信息管理系,刘晨,女),
(信息管理系,吴宾,男),(信息管理系,吴宾,女)}
笛卡尔乘积实际就是二维表
关系的形式化定义
笛卡尔积D1,D2,…,Dn的任意一个子集称为D1,D2,…,Dn上的一个n元关系。
形式化的关系定义同样可以把关系看成二维表,给表中的每个列取一个名字,称为属性。
n元关系有n个属性,一个关系中的属性的名字必须是唯一的。
属性Di的取值范围(i=1,2,…,n)称为该属性的值域。
示例
对关系的限定
关系中的每个分量都是不可再分的最小属性
表中列的数据类型是固定的,即列中的每个分量都是同类型的数据,来自相同的值域。
不同列的数据可以取自相同的值域。
关系表中列的顺序不重要。
关系表行的顺序也不重要。
同一个关系中的元组不能重复。
3.3 关系代数
关系代数是关系操作语言的一种传统表示方式,是一种抽象的查询语言。
是一种纯理论语言,它定义了一些操作,运用这些操作可以从一个或多个关系中得到另一个关系,而不改变源关系。
关系代数的操作数和操作结果都是关系,而且一个操作的输出可以是另一个操作的输入。
关系代数的运算
关系代数的运算对象是关系,运算结果也是关系。
与一般的运算一样,运算对象、运算符和运算结果是关系代数的三大要素。
关系代数的运算可分为以下两大类:
传统的集合运算:并、交、差、笛卡尔积
专门的关系运算:选择、投影、连接、除
运算符
运算符(续)
3.3.1 传统的集合运算
并运算(Union)
交运算(Intersection)
差运算(Except)
广义笛卡尔积(Cartesian Product)
并、交、差运算示意图
并运算
并(R∪S):设关系R与关系S均是n目关系,关系R与关系S的并记为:
R∪S={t | t∈R ∨t∈S }
其结果仍是n目关系,由属于R或属于S的元组组成。
元组在新关系中的顺序不重要。
并运算示例
交运算
交(R∩S):设关系R与关系S均是n目关系,关系R与关系S的交记为:
R∩S={t | t∈R ∧t∈S }
其结果仍是n目关系,由属于R并且也属于S的元组组成。
差运算
差(R-S):设关系R与关系S均是n目关系,关系R与关系S的差记为:
R-S={t | t∈R ∧t∈S }
其结果仍是n目关系,由属于R但不属于S的元组组成。
R∩S=R-(R – S )
交、差运算示例
广义笛卡尔积
两个分别为n目和m目的关系R和关系S的笛卡尔积是一个(m+n)列的元组的集合。元组的前n个列是R的一个元组,后m个列是S的一个元组。
若R有K1个元组,S有K2个元组,则关系R和关系S的广义笛卡尔积有K1×K2个元组,记做:
R×S={tr^ts | tr∈R ∧ ts∈S}
tr^ts表示由元组tr和ts前后有序连接而成的一个元组。
任取元组tr和ts,当且仅当tr属于R且ts属于S时,tr和ts的有序连接即为R×S的一个元组。
笛卡尔积示例
3.3.2 专门的关系运算
选择运算(Select)
投影运算(Project)
连接运算(Join)
除运算(Division)
选择运算
选择运算示意图
选择运算示例
例. 查询计算机系学生信息。
σSdept=‘计算机系’(Student)
投影运算
投影运算示意图
投影运算示例
例2.查询学生的姓名和所在系。
∏sname,sdept(Student)