2.1 关系数据库设计理论三大范式

关系模型(Relational Model)是一种基于表的数据模型,它广泛应用于数据库管理系统(DBMS)中。关系模型的核心思想是将数据组织成表,每个表包含一组相关的行和列。这些行和列之间的关系通过主键和外键来定义,从而实现数据的完整性、一致性和可维护性。关系模型中一些重要术语介绍如下:

· 属性(Attribute):列的名称。

· 关系(Relation):列属性之间存在的某种关联。

· 表(Table):由多个属性以及众多元组所表示的各个实例组成。

· 键(Key):由一个或多个属性组成,其值能唯一标识关系中的一个元组。如果某个关系A中的一个(组)属性是另一个关系B的键,则该(组)属性在A中被称为外键。

· 笛卡儿积(交叉连接,Cross Join):第一个关系的每一行数据分别与第二个关系的每一行数据组合。

· 自然连接(Natural Join):第一个关系的每一行数据与第二个关系的每一行数据进行匹配,若得到交叉部分则合并,若无交叉部分则舍弃。

· θ连接(Theta Join):加上约束条件的笛卡儿积,先得到笛卡儿积,再根据约束条件删除不满足条件的元组。

· 外连接(Outer Join):执行自然连接后,将舍弃的部分也加入,并且把匹配失败处的属性设置为null。

表2-1是一张酒店客人入住信息表。

表2-1 酒店客人入住信息表

通过表2-1可以发现,该表存在不符合规范的设计,总共有如下几点:

(1)信息重复:比如客房类型和客房状态存在大量的数据重复。

(2)更新异常:修改了一个记录中的信息,但是另一个记录中相同的信息却没有被同步修改。

(3)插入异常:无法正确表示信息。

(4)删除异常:丢失有效信息。

下面利用三大范式对数据库进行改造。

第一范式(1NF):目标是确保每列的原子性,如果每列都是不可再分的最小数据单元(也被称为最小的原子单元),则满足第一范式。

例2.1 第一范式优化表格示例。

没有经过第一范式优化的表格如表2-2所示。

表2-2 没有经过第一范式优化的表格

经过第一范式优化的表格如表2-3所示。

表2-3 经过第一范式优化的表格

第二范式(2NF):要求每张表只描述一件事情。

例2.2 第二范式优化表格示例。

没有经过第二范式优化的表格如表2-4所示。

表2-4 没有经过第二范式优化的表格

经过第二范式优化之后,把一张表拆解成两张表,分别为Guest表和Room表。

Guest表如表2-5所示。

表2-5 Guest表

Room表如表2-6所示。

表2-6 Room表

第三范式(3NF):如果一个关系满足第二范式,并且除了主键以外的其他列都不依赖于主键列,则满足第三范式。

例2.3 第三范式优化表格示例。

没有经过第三范式优化的Room表如表2-7所示。

表2-7 没有经过第三范式优化的Room表

经过第三范式优化之后,拆成3张表,分别是Room表、RoomType表和RoomState表。

Room表如表2-8所示。

表2-8 Room表

RoomType表如表2-9所示。

表2-9 RoomType表

RoomState表如表2-10所示。

表2-10 RoomState表

如上所述,经过三大范式将一张存在问题的大表拆分成4张表,最终数据库设计结构如图2-1所示(PK表示主键,FK表示外键)。

图2-1 酒店管理系统数据库模型