![MySQL 8.0从入门到实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/498/52842498/b_52842498.jpg)
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 酒店客人入住信息表
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T39_1191.jpg?sign=1739268461-mPeHvk3cDHIvMwg3GILX3rt4hTTuQwDA-0-d2aba3d42458105e8ebbb02945b7e771)
通过表2-1可以发现,该表存在不符合规范的设计,总共有如下几点:
(1)信息重复:比如客房类型和客房状态存在大量的数据重复。
(2)更新异常:修改了一个记录中的信息,但是另一个记录中相同的信息却没有被同步修改。
(3)插入异常:无法正确表示信息。
(4)删除异常:丢失有效信息。
下面利用三大范式对数据库进行改造。
第一范式(1NF):目标是确保每列的原子性,如果每列都是不可再分的最小数据单元(也被称为最小的原子单元),则满足第一范式。
例2.1 第一范式优化表格示例。
没有经过第一范式优化的表格如表2-2所示。
表2-2 没有经过第一范式优化的表格
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T39_7116.jpg?sign=1739268461-hgDNF2FlWWPQjRE1JIWTpioiphCTk3jw-0-95cc3409d765ac0e768733af3a82406d)
经过第一范式优化的表格如表2-3所示。
表2-3 经过第一范式优化的表格
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T40_7123.jpg?sign=1739268461-dDSVGr4YmzUPQ89e1eMnASAeNnfYpe5e-0-7a7afdde126b07c1a395af12dbd726bb)
第二范式(2NF):要求每张表只描述一件事情。
例2.2 第二范式优化表格示例。
没有经过第二范式优化的表格如表2-4所示。
表2-4 没有经过第二范式优化的表格
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T40_7126.jpg?sign=1739268461-arXYSOZnCWXhEaDmmLAJT7PQtHxTV7MW-0-a68e472b08affbe2b377c0e46d5fae49)
经过第二范式优化之后,把一张表拆解成两张表,分别为Guest表和Room表。
Guest表如表2-5所示。
表2-5 Guest表
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T40_7127.jpg?sign=1739268461-oWki8ElsCdqZJv7vLB82w5VyizqIv6y9-0-e15c850cf812dba3c4080af4d219427c)
Room表如表2-6所示。
表2-6 Room表
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T40_1492.jpg?sign=1739268461-qdqM18aUykv4NPrdsTvQuwnFPIaFJCpU-0-bfe67e01ec404ca62ea87a0167e93c9e)
第三范式(3NF):如果一个关系满足第二范式,并且除了主键以外的其他列都不依赖于主键列,则满足第三范式。
例2.3 第三范式优化表格示例。
没有经过第三范式优化的Room表如表2-7所示。
表2-7 没有经过第三范式优化的Room表
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T41_1727.jpg?sign=1739268461-kn9HyQOrlQFjtKmna03mJ4X7DkvvmOOu-0-23b0793e6f97c4d6f63c0720d79b72f4)
经过第三范式优化之后,拆成3张表,分别是Room表、RoomType表和RoomState表。
Room表如表2-8所示。
表2-8 Room表
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T41_1728.jpg?sign=1739268461-0kILebxQqn9HMlYp8LBFRQ2kpcVHwXDJ-0-353e4245541ae9a3bb1ebdbd677c87c0)
RoomType表如表2-9所示。
表2-9 RoomType表
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T41_1729.jpg?sign=1739268461-jIooKPK8ShlEmbBCRrB4G2YgjmesKcy0-0-4f1c84b3b668508eb4a0cb5a66cd3134)
RoomState表如表2-10所示。
表2-10 RoomState表
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T41_1730.jpg?sign=1739268461-yidQe89tOwfrsjpJ5CZrZ8GB3ODC8txF-0-dd970242566430ba73a7ec09801b9924)
如上所述,经过三大范式将一张存在问题的大表拆分成4张表,最终数据库设计结构如图2-1所示(PK表示主键,FK表示外键)。
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P42_1740.jpg?sign=1739268461-cSjghD8lEAhldDgvcwn8JP2WVH7JjJIt-0-59136366f8380975d4938b1573e0dc26)
图2-1 酒店管理系统数据库模型