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