范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。在进入范式的讲解前,需要先了解5个概念:“函数依赖”、“完全函数依赖”、“传递函数依赖”“码”、“非主属性”。
函数依赖:
可以这么理解(但并不是特别严格的定义):若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。也就是说,在数据表中,不存在任意两条记录,它们在X属性(或属性组)上的值相同,而在Y属性上的值不同。这也就是“函数依赖”名字的由来,类似于函数关系 y = f(x),在x的值确定的情况下,y的值一定是确定的。
完全函数依赖:
在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X ' → Y 不成立,那么我们称 Y 对于 X 完全函数依赖,记作 X f→ Y。反之为部分函数依赖。
传递函数依赖:
假如 Z 函数依赖于 Y,且 Y 函数依赖于 X ,(在『Y不包含于X,且 X 不函数依赖于 Y』这个前提下),那么就称 Z 传递函数依赖于 X ,记作 X T→ Z。
假如 Z 函数依赖于 Y,且 Y 函数依赖于 X ,(在『Y不包含于X,且 X 不函数依赖于 Y』这个前提下),那么就称 Z 传递函数依赖于 X ,记作 X T→ Z。
码:
设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码。一张表中可以有超过一个码。(实际应用中为了方便,通常选择其中的一个码作为主码)
非主属性:
包含在任何一个码中的属性称为主属性,反之则为非主属性。
1NF:
所谓第一范式,是指表中的每一个属性都是不可再分的,也就是不能一列再分成两列。这是关系数据库的基础。换个理解方式就是能够插入关系型数据库就是符合1NF。
1NF:
所谓第一范式,是指表中的每一个属性都是不可再分的,也就是不能一列再分成两列。这是关系数据库的基础。换个理解方式就是能够插入关系型数据库就是符合1NF。
2NF:
消除了非主属性对于码的部分函数依赖。
判断一个表是否符合2NF,按如下步骤
第一步:找出数据表中所有的码。
第二步:根据第一步所得到的码,找出所有的主属性。
第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。
第四步:查看是否存在非主属性对码的部分函数依赖。
对于存在的问题,需要思考如何模式分解,最简单的办法,就是将部分函数依赖的部分抽取出来形成新的表。
3NF
消除了非主属性对于码的传递函数依赖。
符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。
BCNF
存在着主属性对于码的部分函数依赖与传递函数依赖。
4NF
消除非平凡且非函数依赖的多值依赖。
5NF
消除不是由候选码所蕴含的连接依赖。
http://blog.sina.com.cn/s/blog_a637e97e0101321t.html
https://www.zhihu.com/question/24696366
反范式
http://blog.csdn.net/qq_33290787/article/details/51956532