这学期滥竽充数教授学生oracle数据库,很多学生被我忽悠的希望考数据库工程师,他们在备考的时候都遇到数据库设计范式的概念问题,定义看不明白,用抽象的关系数学描述更不明白。
我也查阅了很多资料,基本也都是理论来理论去,没有阐述清楚范式规范在实际数据库设计中的意义和应用。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。下面我们举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
我试图这样解释前三范式:
第一范式(1NF): 对于表中的每一行,必须且仅仅有唯一的行值;在一行中的每一列仅有唯一的值并且具有原子性。
这个概念的第一句话很好理解,任何人也不会在一张表中存在两个一模一样的记录。关键是第二句话:在一行中的每一列仅有唯一的值并且具有原子性,看如下示例:
比如有一张学生的基本资料表,如下图所示:
学号 |
学生姓名 |
学生系部 |
学生班级 |
性别 |
电话 |
510073238 |
卜峰 |
信息工程系 |
计媒0523 |
男 |
’02585843251,13815419110,13813000000 |
510073232 |
姚丽萍 |
信息工程系 |
计媒0523 |
女 |
|
510601114 |
杨雯雯 |
信息工程系 |
软件0515 |
女 |
0523-83770892,13770525646 |
410022206 |
桑旭娟 |
信息工程系 |
信管0424 |
女 |
025-85874662,13601468109 |
410022207 |
王玫 |
信息工程系 |
信管0424 |
女 |
0513-88440460,13851989926 |
410022209 |
张露丽 |
信息工程系 |
信管0424 |
女 |
025-85874662 |
410032231 |
谭浩 |
信息工程系 |
影视0424 |
男 |
51988041182 |
这个表不符合1NF,因为“电话”字段中的值有多个,可以分割成多个值,不具有原子性,这样带来的问题维护、查询、统计该字段的值很麻烦。
我们通过把重复的字段的值放到独立的表中,把这些表通过一对多关系关联起来消除重复值。可以把上面的表改造成以下两张表,以符合第一范式:
学号 |
学生姓名 |
学生系部 |
学生班级 |
性别 |
||
510073238 |
卜峰 |
信息工程系 |
计媒0523 |
男 |
||
510073232 |
姚丽萍 |
信息工程系 |
计媒0523 |
女 |
||
510601114 |
杨雯雯 |
信息工程系 |
软件0515 |
女 |
||
410022206 |
桑旭娟 |
信息工程系 |
信管0424 |
女 |
||
410022207 |
王玫 |
信息工程系 |
信管0424 |
女 |
||
410022209 |
张露丽 |
信息工程系 |
信管0424 |
女 |
||
410032231 |
谭浩 |
信息工程系 |
影视0424 |
|