数据库范式
首先,我们先要了解什么是数据库,数据库简单来说就是数据集合。它有以下几个特点:以一定方式存储在一起,能与多个用户共享,具有尽可能小的冗余度,与应用程序彼此独立的数据集合。我们可以视为电子化的文件柜——存储电子文件的处所。用户可以对文件的数据进行新增,查询,更新,删除等操作。
其次,什么是范式,简单来说,范式就是指某种约束。百度百科的解释:范式来自英文Normol form(规范的表单),简称NF。想要设计一个好的关系,必须使关系满足一定的约束条件,磁约束条件已经形成了规范,分成几个等级,一级比一级要求严格。
什么是数据库范式?
设计关系数据库时,遵循不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的规范数据库冗余越小。
普及关系型数据库哪些?常见的关系型数据库有:mysql,oracle,db2,sqlserver等
目前关系型数据库有六种范式:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科德范式、第四范式、第五范式(完美范式)。
比较常用的有三大范式:第一范式:确保每一列的原子性(做到每一列不可拆分)
第二范式:在第一范式的基础上,非主字段必须依赖主字段(一个表只做一件事)
第三范式:在第二范式的基础上,消除传递依赖
以上的是比较官方的语言,不容易理解
那么第一范式:确保每一列的原子性,也就是
当我们设计用户表的时候,如果address字段列的数据是”中国-北京“,当我们统计地区的时候不好统计。这里是可以拆分的,可以拆分成国籍:中国,城市:北京。这样就符合第一范式的要求。
那什么又是第二范式,第二范式建立在在第一范式的基础上,非主字段必须依赖于主字段,一个表只做一件事
我们在用户表后面又添加了数学成绩,英语成绩,家庭财产情况等一系列的字段,如果这样设计的话,一张表可以满足一个项目所的需要,但是都合成在一张表中(后面无限加字段),这样就很乱了,也违背了第二范式
那什么又是第三范式,第三范式建立在第二范式的基础之上(消除传递依赖)
当我们设计一张订单表,里面有数量,单机,以及总价一些字段,但总价这个不应该有的,因为总价是可以通过数量乘以单价得到,这就没有遵守第三范式(消除传递依赖))。
最后扩展一下:反三大范式
范式越高意味着表的划分更细,一个数据库中需要的表也就越多。当用户同时需要这些数据时只能采用连接表的形式将数据重新合并在一起。但是同时把多个表联接在一起的消耗是巨大的,尤其是当需要连接的两张或者多张表数据的时候,表连接操作几乎是一个噩梦,这严重地降低了系统运行性能
所以没有冗余的数据库未必是好的数据库。有时为了提高运行效率,就必须降低 范式标准,适当保留冗余数据。基于业务的需要合理设计数据库。这就是反三大范式。
原文地址:https://www.cnblogs.com/youhongliang/p/12167694.html