关系型数据库设计三大范式

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

你可能感兴趣的:(★BUFF,------【Mysql】)