【问题的提出】
之前已经介绍过关系数据库的基本概念、关系模型的三部分、关系数据库的标准语言 SQL,但有一个很基本的问题没有涉及:针对一个具体问题,应该如何构造一个适合它的数据库模式,即应该构造几个关系模式,每个关系由哪些属性组成等
这个问题确切来讲是关系数据库逻辑设计问题,由于关系模型有严格的数学理论基础,且可以向别的数据模型转换,因此,以关系模型为背景讨论这个问题,形成了数据库逻辑设计的一个有力工具,即关系数据库规范化理论
【关系模式】
在 关系数据结构 中介绍过,一个关系模式是一个五元组 $R(U,D,DOM,F)$
其中,关系名 $R$ 是符号化的元组语义,$U$ 为一组属性,$D$ 为属性组 $U$ 中属性来自的域,$DOM$ 为属性到域的映射,$F$ 为属性组 $U$ 上的一组数据依赖
由于 $D$、$DOM$ 与模式设计关系不大,因此在研究关系数据理论时,可将关系模式看作一个三元组 $R$,当且仅当 $U$ 上的一个关系 $r$ 满足 $F$ 时,称 $r$ 为关系模式 $R$ 的一个关系
【关系模式的设计】
概述
在模式设计中,假设已知一个模式 $S\phi$,其仅由单个关系模式组成,问题是要设计一个模式 $SD$,其与 $S\phi$ 等价,但在某些指定的方面更好一些
评价一个关系模式是否足够好,主要是看两方面:避免数据冗余、避免数据更新时的各种异常,如果能达到上述的两点,则可以认为该关系模式是一个好的模式
如果一个关系模式 $R$ 的并不是一个好模式的话,就要将其分解成多个模式的集合 $\{R_1,R_2,…,R_n\}$,从而保证每个模式是一个好模式,并且分解是无损连接的
分解模式的理论依据有:
- 数据依赖:函数依赖、多值依赖
- 规范化理论:范式(NF)
数据依赖
数据依赖是一个关系内部属性与属性间的约束关系,这种约束关系是通过属性间的值是否相等来体现数据间相关联系的,其是客观世界属性间相互联系的抽象,是数据内在的性质、语义的体现
简单来说,对于客观世界中事物,实体与实体间的联系是通过数据模型来体现的,实体内部属性间的联系是通过数据依赖来体现的
目前,已经提出了多种数据依赖,其中最重要的是函数依赖(FD)和多值依赖(MVD)
关于数据依赖的具体介绍:点击这里
码
码是关系模式中的一个重要概念,其与范式息息相关,在 关系数据结构 中介绍过码的概念,这里用函数依赖的概念来定义码
关于函数依赖下的码的具体介绍:点击这里
规范化
规范化是用来改造关系模式的,通过分解关系模式来消除其中不合适的数据依赖,以解决插入、删除、更新异常,以及数据冗余问题
简单来说,所谓规范化,就是将低一级的范式通过模式分解,转换为若干高一级关系模式的集合
关于范式的具体介绍:点击这里