1.何为数据库范式?
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同
规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
简单来讲,就是数据库设计的一系列规范,每一级范式都是基于前一范式的基础上,范式层级越高,数据库质量越高。(本文指涉及前三大范式)
2.第一范式
定义:数据表中所有字段都是单一属性,不可再分。即第一范式要求数据库的表都是二维表。
例如:妹子表
姓名 | 身高 | 体重 | 住址 | 美丑 | 联系方式 |
---|---|---|---|---|---|
翠花 | 1.7 | 48 | 中国 | 很美 | 手机、微信 |
姓名 | 身高 | 体重 | 住址 | 美丑 | 手机 | 微信 |
---|---|---|---|---|---|---|
翠花 | 1.7 | 48 | 中国 | 很美 | 123 | 9887 |
两张表记录的信息都是一样的,然而表一中的联系方式可细分为手机号和微信号来存储。表二则将两个相关信息分开存储,保证了最小单元不可再分,满足了第一范式。
3.第二范式
定义:每个非主属性由整个主键函数决定,不能由主键的部分决定。非关键字段对主键完全依赖,消除部分函数依赖。即存在组合关键字中的字段决定非关键字的情况。
例如:商品表
名称 | 供应商名称 | 价格 | 重量 | 供应商电话 | 有效期 | 分类 |
---|---|---|---|---|---|---|
奶茶 | 娃哈哈 | 4.0 | 300ml | 666 | 一年 | 饮料 |
存在依赖关系:(名称)——>(价格,重量,有效期)
(供应商)——>(供应商电话)
ID | 名称 | 价格 | 重量 | 有效期 | 分类 |
---|---|---|---|---|---|
1 | 奶茶 | 4.0 | 300ml | 一年 |
供应商ID | 商品ID |
---|---|
1 | 1 |
ID | 供应商名称 | 电话 |
---|---|---|
1 | 奶茶 | 666 |
4.第三范式
定义:表中所有非主属性对任何候选关键字都不存在传递依赖,则满足第三范式。
讲人话就是:除了主键,其他任何字段都不对其他的字段造成依赖关系。看看例子就明白了。
例如:商品表
名称 | 价格 | 重量 | 有效期 | 分类 | 分类描述 |
---|---|---|---|---|---|
奶茶 | 4.0 | 300ml | 一年 | 饮料 | 很好喝 |
存在依赖关系:(名称)——>(分类)——>(分类描述)
再数据量大的时候,如果很多商品式一个分类的话,那么分类和分类描述就会出现大量的数据冗余。同时野会存在数据的插入更新及删除异常。
商品ID | 名称 | 价格 | 重量 | 有效期 |
---|---|---|---|---|
1 | 奶茶 | 4.0 | 300ml | 一年 |
分类ID | 分类 | 分类描述 |
---|---|---|
1 | 饮料 | 很好喝 |
分类ID | 商品ID |
---|---|
1 | 1 |