![Access数据库技术与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/250/23727250/b_23727250.jpg)
1.4 模式的规范化
模式的规范化用于数据库的设计过程中,一个好的数据库应该冗余尽可能少、查询效率较高,其检验标准就是看数据库是否符合范式(Normal Forms,NF)。范式可分为第一范式、第二范式和第三范式等。在这3个范式中,以第一范式的要求为最低,第三范式的要求为最高。一般的商业数据库在设计时达到第三范式即可满足要求。
1.4.1 第一范式
第一范式(1NF)规定了表中任意字段的值必须是不可分的,即每个记录的每个字段中只能包含一个数据,不能将两个或两个以上的数据“挤入”到一个字段中。例如,假设部分系办公室有两个电话号码,则表1-9是错误的。如果一些系确实需要两个电话,可以再增加一个字段保存第二个电话号码,如表1-10所示。注意两个电话号码的字段名不能相同。
表1-9 有错误的“系”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020001.jpg?sign=1738898060-0tf5loUDuDr6yLjS9HFcpzQuZYvW2yrb-0-d52473f24f325bcc7ee828da30046204)
表1-10 修改后的“系”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020002.jpg?sign=1738898060-rFQORTV1dOgKpfkCp0kmMondmKFI4JHD-0-313fd4b6f39c083f5d945f15f75e89fb)
1.4.2 第二范式
在满足第一范式的基础上,如果一个表的所有非主键字段完全依赖于主键字段时,则称该表满足第二范式(2NF)。请观察表1-11所示的“工作量”表。
表1-11 出现数据冗余的“工作量”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020003.jpg?sign=1738898060-lcP2CBOdZjaNDo50NIpmX3ZRuaLzOxPq-0-22345b08843d3839287bb5fabe6cb0ca)
“工作量”表的主键由两个字段组合而成(“职工号+工地编号”),表中的“名称”字段与“职工号”无关,它只依赖于“工地编号”,而不是完全依赖于主键“职工号+工地编号”,因此该表不符合第二范式的要求。可以想象如果“临江花园”工地需要100名职工,则该数据将在表中出现100次,这是不该出现的数据冗余。解决这类问题的办法是将该表分解成“工作量”表与“工地”表,使得两个表中的非主键字段完全依赖各自的主键“职工号+工地编号”和“工地编号”,如表1-12和表1-13所示。
表1-12 “工作量”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020004.jpg?sign=1738898060-t4w7wrZsOfte3epnusu1kSz6kwnZXX4Z-0-1fa2e26197245aaf2e97831349f88bf3)
表1-13 “工地”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020005.jpg?sign=1738898060-4XSUxdFP8bisRcirLid6xR2NtfZxAgvK-0-13fef8e4df9d6490e47093e7a3298416)
当一个表的主键是由两个或两个以上字段组合而成的复合主键时,要特别注意该表是否满足第二范式。
1.4.3 第三范式
在满足第二范式的前提下,如果一个表的所有非主键字段均不传递依赖于主键,称该表满足第三范式。
假设表中有A、B、C三个字段,所谓传递依赖是指如果表中B字段依赖于主键A字段,而C字段又依赖于B字段,则称字段C传递依赖于A字段,这种情况应该避免。观察表1-14所示的“导师”表。
表1-14 有传递依赖的“导师”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00021001.jpg?sign=1738898060-wV3OeNXGMx6jWKOiXYHIE3WjZNwuUpG0-0-483402549fcdcf55900dd913eaf95a8d)
“导师”表的主键是“导师编号”,“系编号”等非主键字段均依赖于它,但“系名”和“电话”字段却与“导师编号”无关,而仅仅依赖于“系编号”,从而形成传递依赖,造成系名和电话数据的重复。解决方法是将该表分解成“导师”表与“系”表,如表1-15和表1-16所示。
表1-15 “导师”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00021002.jpg?sign=1738898060-m9IVmW9kfw7LTN0cS8z3k3OxK86Dsg1L-0-c52afb89b19aa9208067818f3920dfb3)
表1-16 “系”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00021003.jpg?sign=1738898060-QURG6fnOxkHxnpmUNQZUC6QjyF74XFla-0-a659aa7293d44d403ee9e3b2da5e8eff)