数据库系统原理(第二章 关系数据库)


本文首先介绍关系模型的基本概念,然后介绍查询语言,最后介绍关系代数。

1.关系模型的基本概念

1.1关系

关系是关系数据库中的唯一结构,一个关系对应一张二维表,并且会包含若干属性。

关系数据库中,关系具有如下性质。
(1)列是同质的,即每一列中的数据必须来自同一个域,具有相同的数据类型。
(2)不同的列的数据可以出自同一个域,其中的每一列称为一个属性,不同的属性要有不
同的属性名。
(3)列的顺序是无关紧要的,即列的顺序可以任意调整。
(4)元组中的每个分量是具有原子性的,是不可再分的数据项。比如,如果“工资”包括“基本工资”和“绩效工资”两个部分,就不能把“工资”作为属性,只能把“基本工资”和“绩效工资”分别作为属性。
(5)元组的顺序是无关紧要的,即元组的顺序可以任意调整。
(6)各个元组是不同的,即关系中不允许出现重复元组。

1.2关系模式和关系数据库

关系模式:关系的“型”称为关系模式,是对关系结构的描述,包括关系名、属性名、属性的类型和长度,以及属性间的数据关联关系。
关系数据库:数据库模式中的每个关系模式上的关系的集合称为关系数据库。

1.3码

码(或称为键)是关系数据库中的一个重要概念。

  • 若关系中的某一属性组的值能够唯一地标识一个元组,而其子集不能,则称该属性组为“候选码”。一个关系可以有一个或多个候选妈,可以选定其中的一个作为“主码”。
  • 出现在任何候选码中的属性称为“主属性”,没有出现在任何候选码中的属性称为“非主属性”。
  • 在最简单的情况下,候选码只包含一个属性,但是,在有些情况下,候选码是由关系的全部属性构成的,这样的候选码被称为全码。
  • 还有一种属性,它是一个关系中的非主属性,或者是该关系中组成候选码的部分属性,但它同时又是另外一个关系的主码,则称该属性为这个关系的外码。

2.查询语言

  1. 关系代数语言
  2. 关系演算语言
  3. 结构化查询语言(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 \} RS={ttR or tS}

要求:两个关系必须有相同的属性集合(相同的列数与类型)。

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 \} RS={ttR and tS}

要求:两个关系必须有相同的属性集合。

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 \} RS={ttR 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)tRR,tSS}

结果是一个包含 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 关系中选择 nameage 两个属性列。

3. 连接运算(Join)

连接运算用于将两个关系中的元组按某些条件组合在一起。最常用的连接是自然连接(Natural Join),其形式为:

R ⋈ S R \bowtie S RS

自然连接是将两个关系中具有相同属性值的元组合并为一个新元组。具体形式为:

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 \} RS={tRtStRR,tSS,tR.A=tS.A}

4. 划分运算(Division)

划分运算用于查询关系中所有与另一个关系的某些值相关的元组。形式为:

R ÷ S R \div S R÷S

划分运算的结果是从关系 R R R 中查找所有与关系 S S S 的每个元组都关联的元组。


以上是关系数据库的一些基本内容,如果有错误请联系QQ:303613518

posted @ 2024-09-18 20:48  写代码的大学生  阅读(12)  评论(0编辑  收藏  举报  来源