![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=1739608414-tpMRZBpo2Lk8Fae9hWnyq8KGAZuJZOTc-0-1ea83ccd9514b3604350eae5bd427ee3)
表1-10 修改后的“系”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020002.jpg?sign=1739608414-vZJuY7nLfBvUBy7DtmPrzBBz7xr4TYVH-0-3c2e28d717582ab2e2073b2940743e5a)
1.4.2 第二范式
在满足第一范式的基础上,如果一个表的所有非主键字段完全依赖于主键字段时,则称该表满足第二范式(2NF)。请观察表1-11所示的“工作量”表。
表1-11 出现数据冗余的“工作量”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020003.jpg?sign=1739608414-EvapTJEtmgDTgnTXLZePp8PBUPxU59mP-0-b74909d5a6ca7b3a12bca3b1a794e313)
“工作量”表的主键由两个字段组合而成(“职工号+工地编号”),表中的“名称”字段与“职工号”无关,它只依赖于“工地编号”,而不是完全依赖于主键“职工号+工地编号”,因此该表不符合第二范式的要求。可以想象如果“临江花园”工地需要100名职工,则该数据将在表中出现100次,这是不该出现的数据冗余。解决这类问题的办法是将该表分解成“工作量”表与“工地”表,使得两个表中的非主键字段完全依赖各自的主键“职工号+工地编号”和“工地编号”,如表1-12和表1-13所示。
表1-12 “工作量”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020004.jpg?sign=1739608414-UaIrsNEYq4G9DxCSKfhiXEICNDs5L2yz-0-ad59a9d84b33438f805bd44967963c64)
表1-13 “工地”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00020005.jpg?sign=1739608414-otISZXlX0AG3jhPHOpd3B5KmAcbGiPfm-0-8757c6c1ae483a87f341baba8dd3f7eb)
当一个表的主键是由两个或两个以上字段组合而成的复合主键时,要特别注意该表是否满足第二范式。
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=1739608414-unU7qGTmNMZFERGSOAJgwykVWxZRtAdz-0-0dc31d7a0d2834d5ee00c6f84be71eef)
“导师”表的主键是“导师编号”,“系编号”等非主键字段均依赖于它,但“系名”和“电话”字段却与“导师编号”无关,而仅仅依赖于“系编号”,从而形成传递依赖,造成系名和电话数据的重复。解决方法是将该表分解成“导师”表与“系”表,如表1-15和表1-16所示。
表1-15 “导师”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00021002.jpg?sign=1739608414-BB9NB0v3asJDBYTzaeM9nRo1LgOiaU5v-0-205b479572b4cca07f8eb50a85d85ab6)
表1-16 “系”表
![](https://epubservercos.yuewen.com/24682F/12505880804233406/epubprivate/OEBPS/Images/img00021003.jpg?sign=1739608414-UsBt0iCuJUx3OMrLFNYNpsNk4B4StrZZ-0-1e465065a879b75cd0618d2620b10f29)