DBMS 中的范式

  • Post category:database

DBMS中的范式是一种数据库设计规范,它可以帮助我们避免数据冗余和不必要的数据更新、插入、删除操作,从而提高数据库的性能和可维护性。在DBMS中,通常有三种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF),本文将逐一进行介绍。

第一范式(1NF)

第一范式(1NF)是指所有数据库表中的列都是原子性的。即表中的每个字段都不可再分解成更小的部分。

例如,下面是一个包含重复字段的非1NF表:

学生编号 姓名 学科1 学科2 学科3
001 张三 90 85 95
002 李四 80 78 89

上述表中,学科字段可以细分为数学、语文、英语等单独的字段,即可满足1NF规范。

学生编号 姓名 数学成绩 语文成绩 英语成绩
001 张三 90 85 95
002 李四 80 78 89

第二范式(2NF)

第二范式(2NF)是指所有非主键字段必须完全依赖于主键字段。也就是说,非主键字段与主键字段之间不能出现依赖传递的情况。

例如,下面是一个非2NF的表:

订单编号 商品名称 商品分类 销售数量
001 iPhone X 智能手机 3
002 联想笔记本 笔记本电脑 2
003 Magic Mouse 鼠标 1

上述表中,商品分类与商品名称之间存在函数关系,导致数据冗余。应当将其拆分为两张表:

订单表:

订单编号 商品名称 销售数量
001 iPhone X 3
002 联想笔记本 2
003 Magic Mouse 1

商品表:

商品名称 商品分类
iPhone X 智能手机
联想笔记本 笔记本电脑
Magic Mouse 鼠标

第三范式(3NF)

第三范式(3NF)是指除了主键字段之外,所有字段之间都不存在函数依赖或传递依赖。

例如,下面是一个非3NF表:

课程编号 教师姓名 教师所在学院 学生姓名 学生所在班级 学生成绩
001 张三 计算机学院 李四 计算机一班 90
001 张三 计算机学院 王五 计算机一班 85
001 张三 计算机学院 赵六 计算机二班 92
002 李四 艺术学院 小明 艺术一班 70
002 李四 艺术学院 小红 艺术二班 78

上述表中,学生所在班级与学生姓名之间存在传递依赖。应当将其拆分为三张表,分别为课程表、教师表和成绩表:

课程表:

课程编号 教师姓名 教师所在学院
001 张三 计算机学院
002 李四 艺术学院

教师表:

教师姓名 学生姓名 学生所在班级
张三 李四 计算机一班
张三 王五 计算机一班
张三 赵六 计算机二班
李四 小明 艺术一班
李四 小红 艺术二班

成绩表:

课程编号 学生姓名 学生成绩
001 李四 90
001 王五 85
001 赵六 92
002 小明 70
002 小红 78

以上是范式的介绍与应用实例,范式在数据库设计中非常重要,能够帮助我们进行合理的数据库设计,提高数据库的效率和可帮助维护性,从而使得数据存储更加优化。