范式NF 是什么?
是符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。
就是一张数据表的表结构所符合的某种设计标准的级别。
就像是买建筑材料,环保的E0级,然后E1,E2等等。数据库也分1NF 2NF 等。
符合高一级范式的设计,一定符合低一级的范式。
第一范式(原子性,字段不可以再分,否则就不是关系型数据库)
首先是1NF,1NF的定义是,符合1NF的关系中的每个属性不可再分。
就如上表,实际上,1NF是所有关系型数据库的最基本要求。只要是关系型数据库,无论是SQL Server Oracle MysQL,都是符合第一范式的。
但如果仅仅是符合1NF的设计,仍然会存在数据冗余过大,插入异常,删除异常、修改异常的问题。
1.如上图,每个学生的学号姓名、系名、系主任这些数据重复多次,每个系与对应的系主任的数据也重复多次。——数据冗余过大。
2。假如学校新建了一个系,但是还没有招收任何学生, 那么是无法将系名和系主任的数据单独添加进去的。
3. 假如将某个系中所有学生删除记录,那么所有系和系主任的数据也消失了,(一个系的所有学生都没了,但是不代表这个系没了。)——删除异常
4.假如李小明转系到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据。——修改异常
正因为仅符合1NF的数据库设计存在着这样那样的问题,我们需要提高设计标准,去掉导致上述四种问题的因素,使其符合更高一级的范式(2NF),这就是所谓的“规范化
第二范式(唯一性,一个表只说明一个事物)
这里只介绍2NF对1NF进行了哪些改进。2NF在1NF的基础上,消除了非主属性对于键的部分函数依赖。
函数依赖:
如果一张表里,属性(或属性组)X的值确定的情况下,必定能确定Y的值,那么就可以说Y函数依赖于X,写作X->Y。也就是说,在数据表中,不存在任意两条记录,他们在X属性(或属性组)上的值相同,而在Y属性上的值不同。也就是“函数依赖”名字的由来。类似