数据库系统原理之关系数据库

关系数据库

一、关系数据库概述

进入20世纪80年代后,在商用数据库管理系统中,关系模型逐渐取代早期的网状模型和层次模型,成为主流数据模型。

二、关系数据模型

关系数据结构

关系模型的数据结构只包含单一的数据结构,即关系。

在用户看来,关系模型是把数据库表示为关系的集合,且关系数据库是以二维表格的形式组织数据。

关系数据库的基本术语:

  • 表(Table):表,也称为关系,是一个二维的数据结构,它由表名、构成表的各个列及若干行数据组成。每个表有一个唯一的表名,表中每一行数据描述一条具体的记录值。
  • 关系(Relation):一个关系逻辑上对应一张二维表,可以为每个关系取一个名称进行标识。
    • 关系可以有三种类型,即基本关系、查询表和视图表
    • 基本关系通常又称为基本表或基表,是实际存在的表,它是实际存储数据的逻辑表示
    • 查询表是查询结果对应的表
    • 视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
  • 列(Column):表中的列,也称作字段(Field)或属性(Attribute)
    • 表中每一列有一个名称,称为列名、字段名或属性名
    • 每一列表示实体的一个属性,具有相同的数据类型
    • 在一个数据库中,表名必须唯一
    • 在表中,字段名必须唯一,不同表中可以出现相同的字段名
    • 表和字段的命名应尽量有意义,并尽量简单
  • 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。
    • 与之同一的术语是”列“。
    • 表中属性的个数称为关系的元或度
    • 列的值称为属性值
    • 属性值的取值范围称为值域
  • 行(Row):表中的行(Row)也称作元组(Tuple)或记录(Record)。
    • 表中的数据是按行存储的
    • 表中的一行数据即为一个元组或一条记录,其每行由若干字段值组成,每个字段值描述该对象的一个属性或特征
  • 元组(Tuple):表中的一行即为一个元组。
  • 分量(Component):元组中的一个属性值,称为分量。
  • 码或键(Key):如果在一个关系中,存在这样的属性(或属性组),使得在该关系的任何一个关系状态中的两个元组,在该属性(或属性组)上值的组合都不相同,即这些属性(或属性组)的值都能用来唯一标识该关系的元组,则称这些属性(或属性组)为该关系的码或键。
  • 超码或超键(Super Key):如果在关系的一个码中移去某个属性,它仍然是这个关系的码,则称这样的码或键为该关系的超码或超键。一般地,每个关系至少有一个默认的超码或超键,即该关系的所有属性的集合,也是这个关系的最大超码或超键。
  • 候选码或候选键(Candidate Key):如果在关系的一个码或键中,不能从中移去任何一个属性,否则它就不是这个关系的码或键,则称这样的码或键为该关系的候选码或候选键。可见,一个关系的候选码或候选键是这个关系的最小超码或超键。
  • 主码或主键(Primary Key):在一个关系的若干个候选码或候选键中指定一个用来唯一标识关系的元组,则称这个被指定的候选码或候选键为该关系的主码或主键。
  • 全码或全键(AII-Key):一个关系模式的所有属性集合是这个关系的主码或主键,则称这样的主码或主键为全码或全键。
  • 主属性(Primary Attribute)和非主属性(Nonprimary Attribute):关系中包含在任何一个候选码中的属性称为主属性或码属性,不包含在任何一个候选码中的属性称为非主属性或非码属性。
  • 外码或外键(Foreign Key):当关系中的某个属性(或属性组)不是这个关系的主码或候选码,而是另一关系的主码时,称该属性(或属性组)为这个关系的外码或外键。
  • 参照关系(Referencing Relation)和被参照关系(Referenced Relation):参照关系也称为从关系,被参照关系也称为主关系,它们是指以外码相关联的两个关系。
    • 以外码作为主码的关系称为被参照关系
    • 外码所在的关系称为参照关系
    • 被参照关系与参照关系是通过外码相联系的,这种联系通常是一对多的联系
  • 域(Domain):域表示属性的取值范围
  • 数据类型(Data Type):表中每个列都有相应的数据类型,它用于限制(或容许)该列中存储的数据。每个字段表示同一类信息,具有相同的数据类型。
  • 关系模式(Relation Schema):同数据模型一样,数据库也有”型“(type)和”值“(value)之分。在关系数据库中,关系模式是型,关系是值,即关系模式是对关系的描述,关系则是元组的集合,是关系模式在某一时刻的状态或内容。
    • 关系模式是静态的、稳定的
    • 关系是动态的、随时间不断变化的
  • 关系数据库(Relation Database):关系数据库是以关系模型作为数据的逻辑模型,并采用关系作为数据组织方式的一类数据库,其数据库操作建立在关系代数的基础上。在一个给定的应用领域中,所有关系的集合构成一个关系数据库。

关系模型的数据结构表示为二维表,但不是任意的一个二维表都可以作为一个关系。

关系数据库对关系是有限定的,具体要求如下:

  1. 每一个属性都是不可分解的。这是关系数据库对关系的最基本的一个限定,要求关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中有表。
  2. 每一个关系仅仅有一种关系模式,即每一个关系模式中的属性的数据类型以及数据的个数是相对固定的。
  3. 每一个关系模式中的属性必须命名,在同一个关系模式中,属性名必须是不同的。
  4. 同一个关系中不允许出现候选码或候选键值完全相同的元组。
  5. 在关系中元组的顺序(即行序)是无关紧要的,可以任意交换。
  6. 在关系中属性的顺序(即列序)是无关紧要的,可以任意交换。

关系操作集合

  • 基本的关系操作

    • 关系模型中常用的关系操作包括查询(Query)和插入(Insert)、删除(Delete)、修改(Update)操作两大部分
    • 查询操作又可以分为选择、投影、连接、除、并、差、交、笛卡尔积等
    • 选择、投影、并、差、笛卡尔积是5种基本操作,其他操作均可以使用基本操作来定义和导出
    • 关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合(set-at-a-time)的方式
  • 关系数据语言的分类

    • 关系操作是通过关系语言来实现的。关系语言的特点(优点)是高度非过程化,即:用户不必请求数据库管理员为其建立特殊的存取路径,存取路径的选择由DBMS的优化机制来完成;用户也不必求助于循环和递归来完成数据的重复操作。
    • 关系操作的能力可以用两种方式来表示:代数方式和逻辑方式。
      • 代数方式主要有关系代数,它是通过对关系的操作来表达查询要求的方式
      • 逻辑方式主要有关系演算,它是用谓词来表达查询要求的方式
      • 关系演算又可按谓词变元的基本对象是元组变量还是域变量,分为元组关系演算和域关系演算
      • 关系代数、元组关系演算和域关系演算三种语言在表达能力上是完全等价的
    • 关系代数、元组关系演算和域关系演算均是抽象的查询语言,这些抽象的语言与具体的数据库管理系统中实现的实际语言并不完全相同,但它们可以用来评估实际系统中查询语言能力的标准或基础。实际的查询语言除了提供关系代数或关系演算的功能之外,还提供了许多附加功能,例如聚集函数、关系赋值、算术运算等。
    • 一种介于关系代数和关系演算之间的结构化查询语言(Structured Query Language,SQL)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(Data Control Language,DCL)于一体的关系数据语言。
    • 关系数据语言可以分为三类:关系代数语言、关系演算语言以及兼具两者双重特点的语言(例如 SQL)。它们的共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够独立使用也可以嵌入高级语言中使用。
  • 关系代数

    • 关系代数是关系操作语言的一种传统表示方式,它是以集合代数为基础发展起来的
    • 任何一种操作都是将一定的操作符作用于一定的操作对象上,得到预期的操作结果,因而操作包含三大要素:操作对象、操作符、操作结果
    • 在关系代数操作中,操作对象和操作结果均为关系
    • 关系代数直接应用关系的运算来表达操作目的,而代数用到的运算符包括集合运算符和专门的关系运算符两类
    • 比较操作符和逻辑操作符是用来辅助专门的关系运算符进行操作的
    • 关系代数操作经过有限次复合的式子称为关系代数操作表达式,简称为关系代数表达式
    • 传统的集合运算:传统集合运算时二目运算,它将关系看成元组的集合,其运算是从关系的”水平“方向,即行的角度来进行,具体有并、差、交、笛卡尔积4种运算。
    • 专门的关系运算:专门的关系运算 不仅涉及行,而且涉及列,它可分为一元专门关系操作和二元专门关系操作。
      • 一元专门关系操作包括对单个关系进行垂直分解的投影运算和进行水平分解选择运算
      • 二元专门关系操作则是对两个关系进行操作,包括连接运算和除运算
    • 扩充的关系运算:包含的操作主要有广义投影、赋值、外连接、半连接、聚集、外部并等

关系的完整性约束

  • 数据库的数据完整性是指数据库中数据的正确性、相容性和一致性。
    • 与现实世界中应用需求的数据的正确性、相容性和一致性
    • 数据库内数据之间的正确性、相容性和一致性
  • 数据完整性由完整性规则来定义,关系模型的完整性规则是对关系的某种约束,其也称为完整性约束。
  • 关系模型中有三类完整性约束,分别是实体完整性约束、参照完整性约束和用户定义完整性约束。
  • 实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该有关系数据库管理系统(RDBMS)自动支持。
  • 用户定义完整性约束包括域完整性约束和其他约束,大多是指应用领域需要遵循的对属性值域约束条件和业务规则,体现了具体应用领域中的语义约束。

1. 实体完整性约束(Entity Integrity Constraint)

  • 实体完整性约束是指关系的主属性,即主码的组成不能为空,也就是关系的主属性不能是控制NULL。
  • 在关系数据库系统中,一个关系通常对应一个表,实体完整性是指在实际存储数据的表中,主键(即主码)不能取控制NULL。

2. 参照完整性约束(Referential Integrity Constraint)

  • 现实世界中的实体之间往往存在着某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用。
  • 参照完整性约束就是定义外码和主码之间的引用规则,它是对关系间引用数据的一种限制。
  • 参照完整性的定义:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应,则对于R中每个元组在F上的值只允许两种可能,即要么取空值(F的每个属性值均为空值),要么等于S中某个元组的主码值。其中,关系R与S可以是不同的关系,也可以是同一关系。
  • 与实体完整性一样,参照完整性也是由系统自动支持的,即在建立关系(表)时,只要定义了”谁是主码“”谁参照于谁“,系统将自动进行此类完整性的检查。

3. 用户定义完整性约束(User-defined Integrity Constraint)

  • 用户定义的完整性约束是针对某一应用环境的完整性约束条件,它反映了某一具体应用所涉及的数据应满足的要求。
  • 关系模型提供定义和检验这类完整性规则的机制,其目的是用统一的方式由系统来处理它们,不再由应用程序来完成这项工作。

4. 关系模型完整性约束的检验

为了维护关系数据库中数据的完整性,在对关系数据库执行插入、删除和更新操作时,需要检验是否满足上述三类完整性约束。

三、关系数据库的规范化理论

关系模式中可能存在的冗余和异常问题

  • 数据冗余:同一数据被反复存储的情况
  • 更新异常:数据冗余将导致存储空间的浪费和潜在数据不一致性及修改麻烦等问题
  • 插入异常:应该插入到数据库中的数据不能执行插入操作的情形
  • 删除异常:不应该删去的数据被删去的情形

关系模式产生上述问题的原因,以及消除这些问题的方法,都与数据依赖的概念密切相关。

数据依赖是可以作为关系模式的取值的任何一个关系所必须满足的一种约束条件,是通过一个关系中各个元组的某些属性值之间的相等与否体现出来的相互关系。这是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。

函数依赖(Functional Dependency,FD)

多值依赖(Multi-Valued Dependency,MVD)

函数依赖与关键字

函数依赖是值关系中属性间的对应关系。

函数依赖是针对关系的所有元组,即某个关系中只要有一个元组的有关属性值不满足函数依赖的定义,则相对应的函数依赖就不成立。

判断一个关系中是否存在某种函数依赖,关键是要清楚地了解关系中属性在客观应用中的语义,通晓其所有可能得取值情况及相互关系。

函数依赖根据其不同性质可分为完全函数依赖、部分函数依赖和传递函数依赖。

范式与关系规范化过程

关系数据库中的关系需要满足一定的要求,不同程度的要求称为不同的范式(Normal Form,NF)。

  • 满足最低要求的称为第一范式,称简 1NF,这是最基本的范式
  • 在第一范式的基础上进一步满足一些新要求的称为第二范式(2NF)
  • 以此类推,再进一步的范式是第三范式(3NF)及其改进形式BCNF(Boyce-Codd Normal Form)
  • 当然,还有更进一步的高级范式,如第四范式(4NF)、第五范式(5NF)等

一个低一级范式的关系模式通过模式分解(Schema Decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(Normalization)。

  • 第一范式(不可再分)
    • 设R为任一给定关系,如果R中每个列与行的交点处的取值都是不可再分的基本元素,则R为第一范式。
    • 第一范式是一个不含重复组的关系,其中不存在嵌套结构。
    • 不满足第一范式的关系称为非规范关系。
  • 第二范式
    • 设R为任一给定关系,若R为1NF,且其所有非主属性都完全函数依赖于候选关键字,则R为第二范式
  • 第三范式(码 主键唯一性)
    • 设R为任一给定关系,若R为2NF,且其每一个非主属性都不传递函数依赖于候选关键字,则R为第三范式。
  • BCNF
    • 为了解决3NF有时出现的插入及删除操作异常等问题,R.F.Boyce和E.F.Codd提出了第3范式的改进形式BCNF。
    • 设R为任一给定关系,X、Y为其属性集,F为其函数依赖集,若R为3NF,且其F中所有函数依赖X->Y(Y不属于X)中的X必包含候选关键字,则R为BCNF。
    • 简而言之,若R中每一函数依赖的决定因素都包含一个候选关键字,则R为BCNF。其中,决定因素可以是单一属性或组合属性。

关系规范化理论的应用

关系规范化理论主要应用于数据库设计中的概念设计阶段,对所产生的概念设计,可用它来分析其实体划分是否适合,判断属性分配到哪个实体中更为合理。

在实现设计中当将E-R图向关系模式转换时,还可以用它来分析并发现概念设计中可能存在的遗漏或不当之处,特别是联系实体是否不单独转换为一独立关系而集成到与之相联的基本实体中去处理时,规范化理论是最有效的评价准则。

posted @ 2023-03-23 09:59  寻月隐君  阅读(147)  评论(0编辑  收藏  举报