规范化理论是研究如何将一个不好的关系模式转化为好的关系模式的理论,规范化理论是围绕范式而建立的。规范化理论认为,一个关系数据库中所有的关系,都应满足一定的规范(约束条件)。规范化理论把关系应满足的规范要求分为几级,满足最低要求的一级叫做第一范式(1NF),在第一范式的基础上提出了第二范式(2NF),在第二范式的基础上又提出了第三范式(3NF),以后又提出了BCNF范式,4NF,5NF。范式的等级越高,应满足的约束集条件也越严格。规范的每一级别都依赖于它的前一级别,例如若一个关系模式满足2NF,则一定满足1NF。下面我们只介绍1NF,2NF,3NF范式。
2.2. 1NF
1NF是关系模型的最低要求,它的规则是:
每一列必须是原子的,不能分成多个子列。
每一行和列的位置只能有一个值。
不能具有多值列。
例:如果要求一个学生一行,一个学生可选多门课,则下面的“学生”表就不满足1NF:
student(s-no,s-name,class-no)
其中:s-no为学号,s-name为学生姓名,class-no为课程号。因为一个学生可选多门课,所以列class-no有多个值,所以空不符合1NF。
规范化就是把它分成如下两个表:“学生”表和“选课”表,则这两个表就都满足1NF了。
student(s-no,s-name)
stu-class(s-no,class-no)
2.3. 2NF
对于满足2NF的表,除满足1NF外,非主码的列必须依赖于所有的主码,而不是组合主码的一部分。如果满足1NF的表的主码只有一列,则它自动满足2NF。
例:下面的“选课”表,不符合2NF。
stu-class(s-no,class-no,class-name)
其中:class-name为课程名称。因为词表的主码是:(s-no,class-no),非主码列class-name依赖于组合主码的一部分class-no,所以它不符合2NF。
对该表规范化也是把它分解成两个表:“选课”表和“课程”表,则它们就都满足2NF了。
stu-class(s-no,class-no)
class(class-no,class-name)
2.4. 3NF
3NF的规则是除满足2NF外,任一非主码列不能依赖于其它非主码列。
例:下面的“课程”表,不符合3NF。
class(class-no,class-name,teacher-no,teacher-name)
其中:teacher-no为任课教师号,teacher-name为任课教师姓名。因为非主码列teacher-name依赖于另一非主码列teacher-no,所以它不符合3NF。 其解决办法也是把它分解成两个表:“课程”表和“教师”表,则它们就都满足3NF了。
class(class-no,class-name,teacher-no)
teacher(teacher-no,teacher-name)
文章来源于领测软件测试网 https://www.ltesting.net/