范式的定义
范式作为一个数据库级别的术语,它是指关系数据库中的关系要满足的一定要求,------即不同的范式;
范式的分类----
范式有六种----
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
啥是范式
说了这么半天,范式反映在数据表层面,举个简单的例子,
某超市管理系统中有这样一张表,
production_name—商品名
price ----零售价
provide-----供应商
如果该张表用于存储商品价格,那么此时想要删除某一个供应商,那么就要删除对应的商品价格信息,可能该超市改供应商的产品卖光了只有别的供应商的同类产品,那么怎么办呢?
于是这里就涉及到了范化,在创建一个数据库的过程中,范化是将某表转化为一些表的过程,这使得在查询数据库中的数据结果更加准确,同时增加和删除表中的数据对别的表以及字段影响降到最小;
范化的目的并不是简单的将表拆分而是将拆分的表通过键来关联起来,每张表的列都是不可再分的最小数据单元;
于是我们可以将上表拆分成-----
两张表通过商品字段进行关联;
这时候删除供应商并不会删除商品的价格信息.
第一范式
所谓第一范式就是指数据库表的每一列都不能在分割了,
例如 姓名字段 ,在有些数据库中会将该字段拆分成姓 和 名,
就像上表一样,在查询数据的时候不需要额外的拆分处理;
总结一句话就是,第一范式要求字段的数据的原子性;
举个例子体会一下吧------以下信息由excel制作
### 第二范式
第二范式是在第一范式的基础上进行的,通过主键依赖来进行判断表中应该存在的字段;
比如—
在一家培训机构中系统中有这样一张表-------
主键----教师姓名与班级作为主键,一个老师最多能交一个班级,
通过主键能分析出的信息----
主键----姓名与班级,
性别跟教师有关-----即性别依赖于教师,
编号跟教师有关----即编号依赖于教师,
授课课时依赖于授课开始时间与结束时间,
课时费依赖于授课课时和教师等级,教师等级依赖于教师即课时费间接依赖于教师,
于是就分析出该表有数据不依赖于主键和间接依赖于主键的信息,所以按照第二范式的要求该表是不符合的,
所以可以做如下修改:
1,删除主键,
2,拆分表格使其符合第二范式要求;
要求表中的字段属性完全依赖于主关键字,如果出现部分依赖或者不依赖的字段,则需要将他们拆分到另一张表中
总结-----非主属性要要完全依赖于主键;
举个很容易理解的案例----
第三范式
减少数据冗余,上表中没有必要在第二张表中在添加教师姓名,性别等字段,因为通过关联就可以找到这两种属性;
一般在设计表的时候考虑到范式的前三各阶段;
反范式
啥是反范式?
听名字就知道跟范式反着来,你不让我干这事,我偏干;
举个例子就是上表中我要查询教师的课时费,需要将两张表连结起来查,反范式就是我只需要查询右半部分的表,但是右半部分信息不全,只好补全数据,这样只通过查询一张表来获得想要的查询数据;
反范式一定程度上提高了数据的冗余,但是提高了查询效率------多表查询效率低;