数据库系统原理(第二章 关系数据库)
文章目录
本文首先介绍关系模型的基本概念,然后介绍查询语言,最后介绍关系代数。
1.关系模型的基本概念
1.1关系
关系是关系数据库中的唯一结构,一个关系对应一张二维表,并且会包含若干属性。
关系数据库中,关系具有如下性质。
(1)列是同质的,即每一列中的数据必须来自同一个域,具有相同的数据类型。
(2)不同的列的数据可以出自同一个域,其中的每一列称为一个属性,不同的属性要有不
同的属性名。
(3)列的顺序是无关紧要的,即列的顺序可以任意调整。
(4)元组中的每个分量是具有原子性的,是不可再分的数据项。比如,如果“工资”包括“基本工资”和“绩效工资”两个部分,就不能把“工资”作为属性,只能把“基本工资”和“绩效工资”分别作为属性。
(5)元组的顺序是无关紧要的,即元组的顺序可以任意调整。
(6)各个元组是不同的,即关系中不允许出现重复元组。
1.2关系模式和关系数据库
关系模式:关系的“型”称为关系模式,是对关系结构的描述,包括关系名、属性名、属性的类型和长度,以及属性间的数据关联关系。
关系数据库:数据库模式中的每个关系模式上的关系的集合称为关系数据库。
1.3码
码(或称为键)是关系数据库中的一个重要概念。
- 若关系中的某一属性组的值能够唯一地标识一个元组,而其子集不能,则称该属性组为“候选码”。一个关系可以有一个或多个候选妈,可以选定其中的一个作为“主码”。
- 出现在任何候选码中的属性称为“主属性”,没有出现在任何候选码中的属性称为“非主属性”。
- 在最简单的情况下,候选码只包含一个属性,但是,在有些情况下,候选码是由关系的全部属性构成的,这样的候选码被称为全码。
- 还有一种属性,它是一个关系中的非主属性,或者是该关系中组成候选码的部分属性,但它同时又是另外一个关系的主码,则称该属性为这个关系的外码。
2.查询语言
- 关系代数语言
- 关系演算语言
- 结构化查询语言(SQL)
3. 关系代数
关系代数是数据库管理系统中的一种查询语言,通过对关系模型中的表(关系)进行操作,来实现数据查询和处理。它包含了集合运算和专门的关系运算两大类。以下是对两部分的详细说明。
3.1 传统的集合运算
传统的集合运算与集合理论中的基本运算类似,应用于关系的行集合(元组集合)上。这些操作包括:
1. 并运算(Union)
并运算用于将两个关系的元组合并在一起。对于两个关系 R R R 和 S S S,其并运算结果是由 R R R 和 S S S 中的所有元组组成的集合。
R ∪ S = { t ∣ t ∈ R or t ∈ S } R \cup S = \{ t | t \in R \text{ or } t \in S \} R∪S={t∣t∈R or t∈S}
要求:两个关系必须有相同的属性集合(相同的列数与类型)。
2. 交运算(Intersection)
交运算返回两个关系中共有的元组。对于关系 R R R 和 S S S,其交运算结果是同时存在于 R R R 和 S S S 中的元组集合。
R ∩ S = { t ∣ t ∈ R and t ∈ S } R \cap S = \{ t | t \in R \text{ and } t \in S \} R∩S={t∣t∈R and t∈S}
要求:两个关系必须有相同的属性集合。
3. 差运算(Difference)
差运算返回在关系 R R R 中存在但不在关系 S S S 中的元组。它的形式为:
R − S = { t ∣ t ∈ R and t ∉ S } R - S = \{ t | t \in R \text{ and } t \notin S \} R−S={t∣t∈R and t∈/S}
要求:同样需要两个关系有相同的属性集合。
4. 笛卡尔积(Cartesian Product)
笛卡尔积返回两个关系的所有可能元组组合。对于关系 R R R 和 S S S,其笛卡尔积为:
R × S = { ( t R , t S ) ∣ t R ∈ R , t S ∈ S } R \times S = \{ (t_R, t_S) | t_R \in R, t_S \in S \} R×S={(tR,tS)∣tR∈R,tS∈S}
结果是一个包含 R R R 和 S S S 的所有元组的组合。
3.2 专门的关系运算
专门的关系运算是关系代数中的独特运算,主要用于从关系中提取特定信息。这些操作包括选择、投影、连接等。
1. 选择运算(Selection)
选择运算用于从一个关系中选择满足特定条件的元组。选择运算符为 σ \sigma σ,其形式为:
σ 条件 ( R ) \sigma_{\text{条件}}(R) σ条件(R)
例如:
σ a g e > 30 ( E m p l o y e e ) \sigma_{age > 30}(Employee) σage>30(Employee)
此操作从 Employee
关系中选择所有年龄大于 30 的元组。
2. 投影运算(Projection)
投影运算用于从关系中提取某些特定的属性(列)。投影运算符为 π \pi π,其形式为:
π 属性列表 ( R ) \pi_{\text{属性列表}}(R) π属性列表(R)
例如:
π n a m e , a g e ( E m p l o y e e ) \pi_{name, age}(Employee) πname,age(Employee)
此操作从 Employee
关系中选择 name
和 age
两个属性列。
3. 连接运算(Join)
连接运算用于将两个关系中的元组按某些条件组合在一起。最常用的连接是自然连接(Natural Join),其形式为:
R ⋈ S R \bowtie S R⋈S
自然连接是将两个关系中具有相同属性值的元组合并为一个新元组。具体形式为:
R ⋈ S = { t R ∪ t S ∣ t R ∈ R , t S ∈ S , t R . A = t S . A } R \bowtie S = \{ t_R \cup t_S | t_R \in R, t_S \in S, t_R.A = t_S.A \} R⋈S={tR∪tS∣tR∈R,tS∈S,tR.A=tS.A}
4. 划分运算(Division)
划分运算用于查询关系中所有与另一个关系的某些值相关的元组。形式为:
R ÷ S R \div S R÷S
划分运算的结果是从关系 R R R 中查找所有与关系 S S S 的每个元组都关联的元组。
以上是关系数据库的一些基本内容,如果有错误请联系QQ:303613518