二、规范化理论

4.1引入范式理论的原因

  1. 减少内存占用,空间浪费。
  2. 避免Insertion异常
  3. 避免Deletion异常
  4. 避免Update异常

4.2第一范式

定义:
一个表没有多值字段,就是满足第一范式。
例如表(1-1):

--------------------------------------------------BOOK------------------------------------------
|--ISBN--|--title--|--pubDate--|--price--|--publisher--|--contact--|--author--|
|--70.45--|数据库|--2002-1-1---|-25.10---|-教育出版社--|-----李俊----|王三、李四|

此时ISBN作为主键,但是author字段有多个作者,则称author为多值字段
要想满足第一范式则处理多值字段的方法有:
1:按照多值字段值分解为多个字段,如下表(1-2):

--------------------------------------------------BOOK------------------------------------------
|--ISBN--|--title--|--pubDate--|--price--|--publisher--|--contact--|--author--|
|--70.45--|数据库|--2002-1-1---|-25.10---|-教育出版社--|-----李俊----|---王三---|
|--70.45--|数据库|--2002-1-1---|-25.10---|-教育出版社--|-----李俊----|---李四---|

此时ISBN字段不能在作为主键,而是需要和author字段一起构成复合主键

2:把多值字段分解为多个字段:
对于多值字段个数有限的,且数量不大可以采用把author分解为author1,author2来分解为多个字段。

3:把多值字段移出并且与原来表的主键构成一个新表,如表(1-3):

---------------------------------------------BOOK----------------------------------------
|--ISBN--|--title--|--pubDate--|--price--|--publisher--|--contact--|
|--70.45--|数据库|--2002-1-1---|-25.10---|-教育出版社--|-----李俊----|

----------------BookAuthor---------------
|--ISBN--|--author--|
|--70.45--|----王三----|
|--70.45--|----李四----|

此时ISBN字段不能在作为主键,而是需要和author字段一起构成复合主键。

4.3第二范式

什么是非主键字段和部份依赖?
非主键字段指在表中不是主键的其他字段。【例如表(1-2)中的"title"字段】
部份依赖指这些非主键字段只依赖复合主键中的某一个主键有关而与剩下的或者其中之一无关。【例如表1-2中非主键字段title等等字段至于复合主键中的ISBN有关,而与author字段无关】

定义:
满足第一范式的前提下,非主键字段完全依赖于主键

解决办法把存在部分依赖的非主键字段移出,与原表所依赖的部分主键构成一个新表。对于表(1-2)进行修改后,如表(1-4):

----------------------------------------------BOOK----------------------------------------
|--ISBN--|--title--|--pubDate--|--price--|--publisher--|--contact--|
|--70.45--|数据库|--2002-1-1---|-25.10---|-教育出版社--|-----李俊----|

把存在部分依赖关系的非主键字段移出同时与原表的主键ISBN构成新的Book表,则还剩下一个表只含有author和ISBN,这时这个表满足第二范式。

----------------BookAuthor---------------
|--ISBN--|--author--|
|--70.45--|----王三----|
|--70.45--|----李四----|

4.4第三范式

什么叫做传递依赖?
例如上表(1-4)中联系人字段contact依赖于publisher字段而publisher字段又依赖于主键ISBN,我们把这种递进的依赖关系成为contact传递依赖于主键ISBN

定义:
一个表满足第二范式,并且没有非主键字段传递依赖于主键字段,则称这个表满足第三范式。

解决办法:在满足第二范式的前提下,把存在传递依赖的字段移出,与其直接依赖的字段构成一个新表。这样就满足了第三范式。如表(1-5):

-----------------------------------------BOOK-----------------------------------
|--ISBN--|--title--|--pubDate--|--price--|--publisher--|
|--70.45--|数据库|--2002-1-1---|-25.10---|-教育出版社--|

----------------BookAuthor---------------
|--ISBN--|--author--|
|--70.45--|----王三----|
|--70.45--|----李四----|

移出有传递依赖的contact字段,并且与直接依赖的publisher构成一个新的Contact表

----------------Contact---------------
|--publisher--|--contact--|
|--教育出版社--|----李俊----|