MySQL规范化之三范式详解(mysql三个范式图解)

MySQL规范化之三范式详解

在数据库设计中,规范化是一个极为重要的概念,它的作用是消除数据冗余,减少数据存储空间,提高数据的可维护性和查询效率。规范化有三个范式,分别是第一范式、第二范式和第三范式。本文将详细介绍MySQL规范化中的三范式。

一、第一范式

第一范式(1NF)是指表中的每个字段都是原子性的,不可再分。也就是说,表中每个字段必须是一个基本属性,不允许出现数组、集合、记录等复杂类型的数据。

例如,有一张订单表,每个订单有多个商品:

订单编号 商品编号 商品名称 商品单价 购买数量

1 1 苹果 5 2

1 2 香蕉 3 3

2 1 苹果 5 4

这个表不符合第一范式,因为“商品编号”和“商品名称”是一个逻辑上的整体,可以分成一个新的表来消除冗余:

订单编号 商品编号 购买数量

1 1 2

1 2 3

2 1 4

商品编号 商品名称 商品单价

1 苹果 5

2 香蕉 3

二、第二范式

第二范式(2NF)是建立在第一范式的基础之上的。它要求每个非主键字段都完全依赖于主键,而非部分依赖。具体来说,就是如果一张表有联合主键,那么每个非主键字段必须依赖于联合主键的所有组合,而不能仅仅依赖于其中某个字段。

例如,有一张订单详情表,联合主键为订单编号和商品编号:

订单编号 商品编号 商品单价 购买数量

1 1 5 2

1 2 3 3

2 1 5 4

这个表不符合第二范式,因为“商品单价”只依赖于“商品编号”,而不依赖于联合主键“订单编号和商品编号”,可以将“商品单价”归到“商品”表中:

订单编号 商品编号 购买数量

1 1 2

1 2 3

2 1 4

商品编号 商品名称 商品单价

1 苹果 5

2 香蕉 3

三、第三范式

第三范式(3NF)是建立在第二范式的基础之上的。它要求每个非主键字段都不传递依赖于主键,而是直接依赖于主键。也就是说,如果一张表中有某个非主键字段依赖于另一个非主键字段,那么就应该将该非主键字段分离出来,成为一个新的表。

例如,有一张学生表,包含学生编号、学生姓名、课程名称和课程成绩:

学生编号 学生姓名 课程名称 课程成绩

1 张三 语文 85

1 张三 数学 90

2 李四 语文 85

2 李四 数学 80

这个表不符合第三范式,因为“学生姓名”决定了“课程名称”,可以将“课程名称”提取出来,成为一个新的表:

学生编号 学生姓名

1 张三

2 李四

课程名称 课程成绩

语文 85

数学 90

数学 80

总结

以上是MySQL规范化中的三范式的详细解释和实例,一个好的数据库设计需要遵循这些范式,使得数据存储有序、高效、易维护。如果在数据库设计中能够很好地运用这些范式,不仅可以提高系统的整体性能和安全性,更能使得数据管理更加科学化和规范化。


数据运维技术 » MySQL规范化之三范式详解(mysql三个范式图解)