数据库设计之三大范式

数据库规范——三大范式

        数据库规范化,是数据库设计过程中的一系列原理和技术,以减少数据库的数据冗余,增进数据的一致性。共包括:

  • 第一范式:
  • 第二范式:
  • 第三范式:
  • BC范式:
  • 第四范式:
  • 第五范式:
  • DK范式:
  • 第六范式:

        目前数据库设计最多满足第三范式,范式过高,虽然对数据有更好的约束性,但是会导致关系表增加,令IO操作频繁,尤其是在多表查询的时候,会降低查询效率。

1. 第一范式(1NF):排除重复组的出现,要求数据库的每个列的值域都由原子值组成,每个字段的值只能是单一值。

  • 同一个字段不能出现多个值,每个字段的值只能是单一的
顾客 数量
peeter 19 20
jack 10 30

- 必须包含主键:否则无法区分两条数据

顾客 数量
peeter 20
peeter 20

- 单一字段不能存放多个有意义的值

名字 喜欢的水果
jack 苹果,梨子,香蕉
petter 葡萄,西瓜

- 同一张表格里面不能出现多个字段表示同一个意思

名字 喜欢的水果1 喜欢的水果2 喜欢的水果3
jack 苹果 梨子 香蕉
petter 葡萄 西瓜

2. 第二范式(2NF):要求数据表中的所有数据都要和该数据表的键(主键或者候选键)有完全依赖关系:如果那些键只和键的一部分有关,和另外的键无关,就需要把它独立出来成为另外一个数据表。

补充:

        候选键:主键+外键
- 下表每个字段都是单一值,符合第一范式,此表的键有ID和供应商ID,价格和两个键都有关系,不同组件,不同供应商会有不同的价格,但是供应商名称和组件ID无关,只与供应商ID有关,供应商地址同上,所以此表不符合第二范式,需要将其独立出一张表

组件ID 价格 供应商ID 供应商名称 供应商地址
1 19.99 1 Stylized Parts VA
2 20.99 1 Stylized Parts VA
3 30.99 2 ACME Industries CA

==>转化为如下

组件ID 价格 供应商ID
1 19.99 1
2 20.99 1
3 30.99 2
供应商ID 供应商名称 供应商地址
1 Stylized Parts VA
2 ACME Industries CA

3. 第三范式(3NF):所有非键属性只与候选键相关,非键属性间是独立无关的

  • 下列表格中的字段小计与字段单价和数量相关,不满足第三范式
订单编号 客户名称 单价 数量 小计
1000 peter ¥35 4 ¥140
1001 jack ¥30 5 ¥150

参考:维基百科

你可能感兴趣的:(Mysql数据库)