Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CSC3170 数据库系统 Database System

Part 1 简介 Introduction

结构化和非结构化的文本信息 Structured and Unstructured Textual Information

一个数据库管理系统(Database Management System, DBMS)是一个复杂的软件系统,其任务是帮助管理大量复杂的结构化信息。

结构化信息通常由离散的单元(实体 Entities)组成。

相同类型的实体会有预设的组织方案:

  • 相同数量的性质 Attributes
  • 每个性质都有预设的格式

非结构化的信息通常指没有固定格式、没有区分信息的数据,一般为普通的文本。

数据库系统 Database System

包含信息的数据集合叫做数据库

其应用非常广泛,包括但不限于:

  • 销售:顾客、产品、购买
  • 会计:支付、发票
  • 人力资源:应聘者信息、销售人员、税收
  • 管理层
  • 银行和金融
  • 大学

数据库的目的是什么?主要是为了高效地存储、维护和查找大量数据,而且要保证不出现安全问题。

数据视图 View of Data

数据库系统是一些相互关联的数据以及一组使得用户可以访问和修改这些数据的程序的集合,其主要目的是给用户提供数据的抽象视图

数据模型 Data Model

数据模型是描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。其可以被划分为四类:

  • 关系模型(Relational Model):利用表的集合来表示数据和数据间的联系,是最广泛的数据模型。
  • 实体-联系模型(Entity-relationship Model):主要用作数据库设计。
  • 半结构化数据模型(Semi-structured Data Model):允许数据定义中某些相同类型的数据项含有不同的属性集,例如 JSON, XML。
  • 基于对象的数据模型(Objecte-based Data Model):面向对象的程序设计,例如 Java, C++, C#。

下面这个图是最常见的关系模型例子:

数据抽象 Data Abstraction

一个可用的系统必须要能高效地检索数据,系统开发人员通过如下几个层次的数据抽象来对用户屏蔽复杂性,以简化交互:

  • 物理层(Physical Level):最低层次的抽象,描述数据实际上是怎样储存的。
  • 逻辑层(Logical Level):描述数据库中存什么数据以及这些数据间存在什么联系。
  • 视图层(View Level):只描述整个数据库的某个部分。

实例和模式 Instances and Schemas

随着时间的推移,信息会被插入或删除,数据库也就发生了改变。特定时刻存储在数据库中的信息的集合称作数据库的一个实例 Instance,而数据库的总体设计称作数据库模式 Schema

数据库有几种模式:

  • 物理模式(Physical Schema),在物理层描述数据库的设计。
  • 逻辑模式(Logical Schema),在逻辑层描述数据库的设计。
  • 子模式(Subschema),描述数据库的不同视图。

物理数据隔离 Physical Data Independence:在不改变逻辑模式的情况下改变物理模式的能力。

数据库语言 Database Language

数据定义语言 Data Definition Language (DDL)

定义数据库模式的专用标记,例如:

DDL 编译器会生成一系列表格模板,存在数字典 Data Dictionary 里。

数据字典包含元数据 Metadata:

  • 数据库模式
  • 完整性约束 Integrity Constraints
    • Primary Key
  • 授权
    • 验证谁可以访问

数据操纵语言 Data Manipulation Language (DML)

可以使得用户访问或操纵,那些按照某种适当的数据模型组织起来的数据,通常也叫做查询语言。基本上有两种类型:

  • 过程化的 DML(Procedural DML),要求用户指定需要什么数据以及如何获得这些数据
  • 声明式的 DML(Declarative DML),只要求用户指定需要什么数据,不必指明如何获得

声明式的 DML 通常也被称为非过程化的 DML。

结构化的查询语言 Structured Query Language (SQL)

SQL 是非过程化的,一个查询包含输入一个或多个表格,返回一个表格。例子:

数据库设计 Database Design

设计数据库通常结构的流程:

  • 逻辑设计 Logical Design:决定数据库模式。数据库设计要求我们能找到一个“好的”关系模式。
  • 物理设计 Physical Design:决定数据库的物理层。

数据库组成 Database Components

一个数据库系统可以被划分成以下几个功能性模块:

  • 储存管理器 Storage Manager
  • 查询处理器 Query Processor

储存管理器 Storage Manager

储存管理器是数据库系统中负责在数据库中储存的低层数据与应用程序以及向系统提交的查询之间提供接口的部件。

储存管理器负责以下任务:

  • 与操作系统文件管理器交互
  • 高效地储存、检索和更新数据

储存管理器实现了以下几种数据结构:

  • 数据文件(Data File):储存数据库它本身
  • 数据字典(Data Dictionary):储存数据库结构的元数据
  • 索引(Index):能提供对数据项的快速访问

查询处理器 Query Processor

查询处理器组件包括:

  • DDL 解释器(DDL Interpreter):解释 DDL 语句并将这些定义记录在数据字典中
  • DML 编译器(DML Compiler):将查询语言中的 DML 语句翻译为包括一系列查询执行引擎能理解的低级指令的执行方案
    • 一个查询通常可以被翻译成给出相同结果的多个候选执行计划中的任何一个。DML 编译器还进行查询优化(Query Optimization),就是从几个候选执行计划中选择代价最小的那个执行计划。
  • 查询执行引擎(Query Evaluation Engine):它执行由 DML 编译器产生的低级指令。

事务管理 Transaction Management

事务 Transaction是数据库应用中完成单一逻辑功能的操作集合。

数据库架构 Database Architecture

  • 中心化的数据库
    • 一些核心,共享内存
  • 客户端-服务器
    • 一个服务器机器执行基于多个客户端的工作
  • 平行数据库
    • 多核,共享内存
    • 共享硬盘
    • 什么都不共享
  • 分布式数据库
    • 地理上的分布
    • 模式 / 数据异质性

数据库用户和管理员 Database Users and Administrator

数据库用户:

  • 普通(初学者=)用户
  • 应用程序员
  • 复杂(老练)用户

数据库管理员:

  • 模式定义
  • 存储结构及存取方法定义
  • 模式及物理组织的修改
  • 数据访问授权
  • 日常维护

Part 2 关系模型介绍 Introduction to Relational Model

关系数据库由表 Table的集合构成,每张表被赋予一个唯一的名称。

一个关系表的例子:

关系的数学定义 Mathematical Definition of Relation

笛卡尔积 Cartesian Product

考虑两个任意集合 $A$ 和 $B$,包括所有有序对 $(a,b), a \in A, b \in B$ 的集合叫做 $A$ 和 $B$ 的笛卡尔积。 $$ A \times B = {(a,b):a \in A, b \in B} $$ 如果 $A=B$,我们通常将 $A \times A$ 写成 $A^2$。

  • e.g. 如果$A = \mathbb{R}$,那么 $\mathbb{R}^2$ 就是二维笛卡尔平面。

记集合 $A$ 的基数 Cartesian 为 $|A|$,则有 $$ |A \times B| = |A| \times |B| $$

从 $A$ 到 $B$ 的一个二元关系 Binary Relation $R$,就是 $A \times B$ 的一个子集,即 $R \subseteq A \times B$

一般来说,定义在集合 $D_1,D_2,\cdots,D_n$ 上的 $n$ 元关系 n-ary Relaion $R$ 是笛卡尔积 $$ D_1 \times D_2 \times \cdots D_n $$ 的一个子集,即 $$ R \subseteq \prod_{k=1}^n D_k $$ 其中,$D_1,D_2,\cdots,D_n$ 通常被称为域 Domain

并且该笛卡尔积的基数为 $$ \left| \prod_{k=1}^n D_k \right| = \prod_{k=1}^n \left| D_k \right| $$ 也就是说,笛卡尔积的元素个数等于各个集合基数的乘积。

如果某个特定元组 tuple 出现在关系 $R$ 中,就表示该元组所表达的信息在当前是真实且有效的信息

举个例子,假设

  • $D_1=$ 学号
  • $D_2=$ 学院
  • $D_3=$ 生源城市 如果 $$ (114514, \text{CS}, \text{Shenzhen}) \in R $$ 表示学号为 $114514$ 的学生属于 CS 学院,并且来自深圳。但是 $$ (114515, \text{CE}, \text{Guangzhou}) \notin R $$ 表示“学号为 $114515$ 的学生属于 CE 且来自广州”这一说法不成立。

关系模式和实例 Relation Schema and Instance

$A_1, A_2, \cdots, A_n$ 被称为属性 attributes

$R(A_1, A_2, \cdots, A_n)$ 被称为关系模式 relation schema,有时也被称为关系方案 relation scheme,它由关系名和属性列表组成,这些属性对应表中的列 columns

  • e.g. instructor(ID, name, dept_name, salary)

定义在关系模式 $R$ 上的关系实例 relation instance(也被称为关系状态 relation state)记为 $$ r(R) $$ 它由实际的数据值组成

  • 一个关系当前的取值通常通过一张表 table 来表示

关系 $r$ 中的一个元素 $t$ 被称为元组 tuple,在表中用一行 row 来表示。

模式描述的是逻辑结构,而实例时某一时刻数据的快照

例如下图

属性 Attributes

每个属性允许取值的集合称为该属性的域 domain

属性值通常要求是原子性的 atomic,即不可再分的

特殊值 null 被认为时每个域中搞的一个成员,表示该值未知

null 值会使许多数据库操作的定义变得更加复杂。

键 Keys

设 $K \subseteq R$,如果属性集合 $K$ 的取值足以认证唯一标识关系 $R$ 的一个元组 tuple,则称 $K$ 为 $R$ 的一个超键 superkey

  • e.g. ${\text{ID}}$ 和 ${\text{ID}, \text{name}}$ 都是关系 instructor 的超键。

如果一个超键 $K$ 是最小的 minimal,则称之为候选键 candidate key

  • e.g. ${\text{ID}}$ 是 instructor 的一个候选键。

在所有候选键中,会选择一个作为主键 primary key

外键 foreign key 约束:一个关系中的某个值必须出现在另一个关系中。

  • 引用关系 referencing relation
  • 被引用关系 referenced relation

关系代数 Relational Algebra

关系代数由一组运算组成,这些运算接受一个或两个关系作为输入,并生成一个新的关系作为它们的结果。

六个基础运算符:

  • 选择 select:$\sigma$
  • 投影 project:$\Pi$
  • 集合并 union / 交 intersection:$\cup$
  • 集合差 set difference:$-$
  • 笛卡尔积 Cartesian product:$\times$
  • 更名 rename:$\rho$

选择运算 Select Operation

选择运算选出给定满足给定谓语的元组。

记号:$\sigma_p(r)$

其中,$p$ 被称作选择谓词 selection predicate

  • e.g. 选择满足在 Physics 部门的 instructor:

$$ \sigma_{\text{dept name="Physics"}}(\text{instructor}) $$

在选择运算中我们允许使用 $=,\not=,>,\geq,<,\leq$,也可以利用连接符号 $\land,\lor,\lnot$ 结合谓语。

  • e.g. 选择满足在 Physics 部门且薪水高于 $90,000 的 instructor:

$$ \sigma_{\text{dept name="Physics" } \land \text{ salary > 90,000}}(\text{instructor}) $$

投影运算 Project Operation

投影运算是一种一元运算,返回它的参数关系,但滤掉了特定的属性。

记号:$\Pi_{A_1, A_2, A_3, \cdots, A_k} (r)$

其中 $A_1, A_2, A_3, \cdots, A_k$ 是属性名,$r$ 是关系名。

  • e.g. 查询以下属性的 instructor

$$ \Pi_{\text{ID, name, salary}}(\text{instructor}) $$

其实就是去掉了 dept_name

关系运算的组合 Composition of Relational Operations

因为一个关系代数运算的结果也是关系,所以可以直接连接起来(就像函数括号),例如:

$$ \Pi_{\text{name}}(\sigma_{\text{dept name="Physics"}}(\text{instructor})) $$

笛卡尔积运算 Cartesian Product Operation

笛卡尔积运算用叉号 $\times$ 表示,允许我们结合来自任意两个关系的信息。其作用就是,假设现在有 $n$ 行的关系 $A$ 和 $m$ 行的关系 $B$,那么 $A \times B$ 就会得到一个 $n*m$ 的关系,$A$ 中的每一个关系都对应 $B$ 中的所有关系。

  • e.g. instructor $\times$ teaches

这里找不到原来两张表的电子版了,但大概就是能看出来是原来的一条左边的关系对应右边的所有关系,这样形成一个 $n*m$ 行的关系

连接运算 Join Operation

连接运算是我们能够选择与笛卡尔积合并到单个运算中。

考虑关系 $r(R)$ 和 $r(S)$,并令 $\theta$ 为 $R \cup S$ 模式的属性上的一个谓词。连接运算的定义是: $$ r \bowtie s = \sigma_\theta (r \times s) $$

  • e.g. $\text{instructor} \bowtie_{\text{instructor.id = teaches.id}} \text{teaches} \\ = \sigma_{\text{instructor.id = teaches.id}}(\text{instructor} \times \text{teaches})$

其实就是先做了笛卡尔积运算,再做一次选择运算。

集合运算 Set Operation

并运算 Union Operation

并运算使我们能够合并两个关系。

为了使并集运算有意义,必须要保证:

  1. 输入并运算的两个关系具有相同数量的属性,一个关系的属性数量被称为它的元数 Arity
  2. 当属性有关联的类型时,对于每个 $i$,两个输入关系的第 $i$ 个属性的类型必须相同。

这样的关系被称为相容 Compatible 关系。

记号:$r \cup s$

交运算 Intersection Operation

交运算允许我们找到同时出现在两个输入关系中的元组。

与并集运算一样,我们要保证交是在相容关系之间进行运算的。

记号:$r \cap s$

集差运算 Set-Difference Operation

集差运算能使我们找到在一个关系中但不在另一个关系中的元组。

与并集运算一样,我们要保证集差是在相容关系之间进行运算的。

记号:$r - s$

因为教授的 PPT 上并没有很好的例子图示,在这里就不给出了,而且这三个集合运算也很好理解。

赋值运算 Assignment Operation

有时候通过将一个关系代数表达式中的一部分赋值给临时的关系变量,可以方便地编写该表达式,赋值运算用 $\leftarrow$ 表示,其工作方式类似于程序语言中的赋值。

  • e.g. 找到所有在 Physics 和 Music 部门的 instructor $$ \begin{align*} &\text{Physics} \leftarrow \sigma_{dept name="Physics"}(instructor) \\ &\text{Music} \leftarrow \sigma_{dept name="Music"}(instructor) \ &\text{Physics} \cup \text{Music} \end{align*} $$

更名运算 Rename Operation

关系表达式的结果并没有可以用来指代它们的名称,更名运算使我们能够做到这一点。

记号:$\rho_x(E)$

能返回以 $x$ 命名的表达式 $E$ 的结果。

Part 3 实体-联系模型 The Entity-Relationship Model

实体-联系数据模型(E-R 数据模型)被开发来方便数据库的设计,它是通过允许定义代表数据库全局逻辑结构的企业模式 Enterprise Schema 来做到的。

E-R 数据模型包含下面三个基本概念:

  • 实体集 Entity Sets
  • 关系集 Relationship Sets
  • 属性 Attributes

实体集 Entity Sets

实体 Entity 是现实世界中可以区分于所有其它对象的一个“事物”或“对象”。

  • e.g. 特定的人,公司,活动

实体集 Entity Set 是共享相同性质或属性的、具有相同类型的实体的集合。

  • e.g. 所有人的集合,公司集合,产品

实体通过一组属性 Attributes 来表示,属性是实体集中每个成员所拥有的描述性性质。

  • e.g. $\text{instructor}=(\text{ID, name, salary})$

属性的子集构成了一个实体集的主键 Primary Key,即它可以唯一认定集合的元素。

实体集在 ER 图里的表示:

关系集 Relationship Sets

联系 Relationship 是多个实体间的相互关联,关系集 Relationship Set 是相同类型联系的集合。

关系集的数学定义: $$ {(e_1, e_2, \cdots, e_n):e_1 \in E_1, e_2 \in E2, \cdots, e_n \in E_n } $$ 其中,$(e_1, e_2, \cdots, e_n)$ 是个联系。

例如,我们定义一个关系集 advisor 表示 student 和 instructor 之间的关联,然后我们就可以在实体之间连线。

关系集在 ER 图里的表示:

联系也可以具有被称作描述性属性 Descriptive Attribute 的属性。

例如下图,每个联系具有一个 date,表示 student 和 instructor 建立 advisor 联系的时间。

带有属性的关系集在 ER 图里的表示:

实体集的关系不需要是独特的,实体在联系中扮演的功能被称为实体的角色 Role

下图中,course_id 和 prereq_id 被称作角色。

复杂属性 Complex Attributes

映射基数 Mapping Cardinality

映射基数 Mapping Cardinality 或基数比率表示一个实体能通过一个关系集关联的另一些实体的数量,多用于描述而二元关系集。

对于一个二元关系集来说,映射基数必然是以下情况之一:

  • 一对一 One-to-one
  • 一对多 One-to-Many
  • 多对一 Many-to-one
  • 多对多 Many-to-many

在 ER 图中,我们用单箭头直线($\rightarrow$)来表示“一”,用无箭头之间($-$)来表示“多”。下图从左上到右下分别是一对一、一对多、多对一、多对多。

其中,一对一在这里的意思就是,一位导师最多可以指导一名学生,一名学生最多只能有一位导师;一对多在这里的意思就是,一位导师可以知道多名学生,但一名学生最多只能有一位导师;其余同理。

全部和部分参与 Total and Partial Participation

如果实体集 $E$ 中的每个实体都必须参与到关系集 $R$ 的至少一个联系中,那么实体集 $E$ 在关系集 $R$ 中的参与就被称为是全部的 Total,否则就被称为是部分的 Partial

全部参与用双直线表示。

例如下图:

student 在 advisor 关系集中的参与是全部的,即每个学生都至少有一位导师。instructor 在 advisor 关系集中的参与是部分的,即一位导师不是必须要指导学生。

更复杂的约束 More Complex Constraints

线段上可以有一个关联的最小最大基数,用 $l..h$ 的形式表示,其中 * 表没有限制。示例如下图:

导师可以指导 $0$ 个或多个学生;一个学生至少有一个导师,无上限。

主键 Primary Key

弱实体集 Weak Entity Sets

表示成模式 Representing Schema

Part 4 实体-关系特征拓展 Extended Entity-Relationship Features

Part 5 关系数据库设计和规范化 Relational Database Design and Normalization

Part 6 函数依赖理论 Functional Dependency Theory

Part 7 多值依赖和第四范式 Multivalued Dependencies and Fourth Normal Form


Generated by ChatGPT

下面从 Primary Key 开始,按你给出的课程结构一直讲到 Multivalued Dependency 与 Fourth Normal Form。我尽量保持 定义式、考试导向、少换行、逻辑紧凑的形式。


Part 3(后半)Primary Key, Weak Entity, Schema Representation

Primary Key(主键)

定义:在关系模式 (R) 中,若属性集合 (K) 满足以下两个条件,则称 (K) 为 Primary Key: (1) 唯一性(uniqueness):任意两个不同元组在属性 (K) 上的取值不同。 (2) 最小性(minimality):(K) 的任何真子集都不满足唯一性。

换句话说,Primary Key 是从 Candidate Keys(候选键) 中选出的一个作为主要标识符的键。Candidate Key 是所有满足唯一性与最小性的属性集合,而 Superkey 是任何能唯一标识元组的属性集合(不要求最小性)。因此关系为: Superkey ⊇ Candidate Key ⊇ Primary Key。

Prime Attribute 指属于某个 Candidate Key 的属性,Non-prime Attribute 指不属于任何 Candidate Key 的属性。

在关系模型中通常还涉及 Foreign Key:若关系 (R) 中属性集合 (F) 的值必须出现在另一关系 (S) 的 Primary Key 中,则称 (F) 为引用 (S) 的 Foreign Key。


Weak Entity Sets(弱实体集)

弱实体是 没有完整主键的实体集,其存在依赖于另一个实体集(称为 identifying entity)。弱实体的标识需要两个部分: (1) Partial Key(部分键):弱实体内部可区分对象的属性集合。 (2) Owner Entity 的 Primary Key

因此弱实体的主键为: Owner Primary Key ∪ Partial Key。

例如:Employee(emp_id) 与 Dependent(name, age)。Dependent 无法仅通过 name 唯一标识,需要 (emp_id, name) 才能唯一确定一个 dependent。

在 ER 图中弱实体通常用 双矩形表示,identifying relationship 用 双菱形表示,且弱实体必须 total participation 于 identifying relationship。


Representing Schema(ER 到关系模式)

将 ER 模型转换为关系模式通常遵循以下规则: (1) 实体集 → 关系模式:实体的属性成为关系的属性,实体的主键成为关系的 Primary Key。 (2) 弱实体 → 关系模式:加入 owner entity 的主键作为外键并与 partial key 组成复合主键。 (3) 1:N relationship:在 N 端关系中加入 1 端的主键作为 Foreign Key。 (4) M:N relationship:建立新的关系模式,其属性为两个实体主键的并集(再加上关系属性)。 (5) relationship attributes:作为新关系模式中的属性出现。


Part 4 Extended Entity-Relationship Features

EER(Extended ER)模型在普通 ER 的基础上增加了 更复杂的建模能力,核心包括 specialization、generalization 与 aggregation。

Specialization(特化) 指从一个高层实体集派生出多个子实体集,每个子实体集具有额外属性或语义。例如 Person → Student、Employee。子类自动继承父类属性。

Generalization(泛化) 是 specialization 的逆过程,将多个实体抽象为一个更一般的实体。例如 Car 与 Truck 可以泛化为 Vehicle。

在 EER 中还涉及两个重要约束: (1) Disjointness constraint:子类之间是否互斥。若 disjoint,则一个实体最多属于一个子类;若 overlapping,则可属于多个子类。 (2) Completeness constraint:是否 total specialization。若 total,则每个父类实体必须属于某个子类;若 partial,则可以不属于任何子类。

另一个扩展概念是 Aggregation,用于表示“关系之间的关系”。例如 Manager 管理 Works_on 关系(员工参与项目),此时需要把 Works_on 看作一个高层对象参与新的关系。


Part 5 Relational Database Design and Normalization

关系数据库设计的目标是 减少冗余并避免更新异常(update anomaly)。常见异常包括: Insertion anomaly:无法插入某些信息而不引入无关数据; Deletion anomaly:删除数据时丢失其他有用信息; Update anomaly:同一事实需在多处修改。

为解决这些问题,需要进行 Normalization(规范化),即通过分析 Functional Dependencies(函数依赖) 将关系分解为多个结构更合理的关系模式。规范化通常涉及一系列范式(Normal Forms),如 1NF、2NF、3NF、BCNF、4NF 等。数据库设计通常希望达到 BCNF 或至少 3NF,同时保持 lossless join 与 dependency preservation

Lossless Join 指将关系分解为多个关系后,通过自然连接可以恢复原关系。 Dependency Preservation 指原有函数依赖可以在分解后的关系中被直接验证。


Part 6 Functional Dependency Theory

Functional Dependency(FD) 是规范化理论的核心。

定义:在关系模式 (R) 中,属性集合 (X) 到属性集合 (Y) 的函数依赖记为 (X → Y),若对任意两个元组 (t_1,t_2),只要 (t_1[X] = t_2[X]),则必有 (t_1[Y] = t_2[Y])。

Trivial FD:若 (Y ⊆ X),则 (X → Y) 为平凡函数依赖。

Attribute Closure:给定属性集 (X) 和函数依赖集合 (F),闭包 (X^+) 是在 (F) 下由 (X) 可推出的所有属性集合。计算闭包的算法为:初始化 (X^+=X),若存在 FD (A→B) 且 (A ⊆ X^+),则加入 (B) 到 (X^+),重复直到不再变化。

闭包用于: (1) 判断 Candidate Key(若 (X^+) 包含所有属性,则 (X) 为 superkey); (2) 判断 FD 是否由 (F) 推导。

Armstrong’s Axioms 提供了推导函数依赖的基本规则: Reflexivity:若 (Y ⊆ X),则 (X → Y)。 Augmentation:若 (X → Y),则 (XZ → YZ)。 Transitivity:若 (X → Y) 且 (Y → Z),则 (X → Z)。

从这三条可推导出 union、decomposition、pseudo-transitivity 等规则。


3NF 与 BCNF

BCNF(Boyce–Codd Normal Form)定义:若对所有非平凡 FD (X → Y),都有 (X) 为 superkey,则关系模式在 BCNF 中。

Third Normal Form(3NF)定义:若对每个 FD (X → Y),满足以下之一: (1) (X) 是 superkey; (2) (Y) 为 prime attribute; (3) 该 FD 为 trivial。

BCNF 比 3NF 更严格。BCNF 能消除更多冗余,但分解后可能不保持依赖,而 3NF 保证存在 dependency-preserving decomposition


Part 7 Multivalued Dependency and Fourth Normal Form

Multivalued Dependency(MVD) 表示为 (X →→ Y)。其含义是:若两个元组在 (X) 上相同,则可以交换它们在 (Y) 上的值而仍属于该关系。直观上表示:对于同一 (X),(Y) 的取值集合与其他属性是独立的。

例如关系 Student(student, skill, language),若学生的技能与语言互不影响,则存在 student →→ skill student →→ language。

这种情况下数据会出现冗余组合,例如若某学生有两种 skill 和两种 language,则需要存储四条记录。

Fourth Normal Form(4NF)定义:若对于每个非平凡 MVD (X →→ Y),都有 (X) 为 superkey,则关系模式在 4NF 中。

当存在违反 4NF 的 MVD 时,需要将关系分解。例如将 Student(student, skill, language) 分解为 StudentSkill(student, skill) 与 StudentLanguage(student, language)。

这种分解既消除了冗余,又保持无损连接。