数据库三大范式
2021/7/9 19:18:32
本文主要是介绍数据库三大范式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、什么是数据库三大范式
范式的简介
范式,是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。
范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。
目前,主要有6种范式,依次是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd 范式(BCNF)、第四范式(4NF)和 第五范式(5NF)。
满足最低要求的叫第一范式,在第一范式基础上进一步满足一些要求的为第二范式,其余依此类推。
通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。
数据往往种类繁多,而且每种数据之间又互相关联,因此,在设计数据库时,所需要满足的范式越多,那表的层次及结构也就越复杂,最终造成数据的处理困难。
所以在使用范式的时候也要细细斟酌,是否一定要使用该范式,必须根据实际情况做出选择。
第一范式
第一范式就是属性不可分割,每个字段都应该是不可再拆分的。
即每一个字段应该是最小单位,不能被拆分成多个字段,否则它就是可分割的,不符合第一范式。
比如学生表(Student)中有个字段为姓名(name),在国内的话通常理解都是姓名是一个不可再拆分的单位,这时候就符合第一范式;但是在国外的话还要分为FIRST NAME和LAST NAME,这时候姓名这个字段就是还可以拆分为更小的单位的字段,就不符合第一范式了。
第二范式
第二范式是在第一范式的基础上更进一步。第二范式就是要求表中要有主键,表中其他字段都依赖于主键,因此第二范式只要记住主键约束就好了。
比如在学生表(Student)中,姓名(name)可以作为主键吗?不可以!因为学生的姓名可能会同名,这样就不唯一了。所以需要学号这样的唯一值作为主键才行。
而表中其他字段都依赖于主键,意思是学生表中 “张三” 同学的年龄和性别等字段,不能存储别人的年龄性别,必须是和他自己相关的。因为张三的学号就决定了,这行记录归张三所有,不能给无关人员使用。
第三范式
第三范式就是确保数据表中的每一列数据都和主键直接相关,而不能间接相关。也就是要消除传递依赖,方便理解,可以看做是消除冗余,因此第三范式只要记住外键约束就好了。
比如在设计一个学生表的时候,可以将班主任的主键编号作为一个外键和学生表建立相应的关系,而不可以在学生表中添加关于班主任其它信息(比如姓名、年龄等)的字段。
这样在查询学生信息以及学生的班主任信息的时候,就可以使用班主任编号来引用班主任表中的数据,也不必在学生表中多次输入班主任信息的内容,减小了数据冗余。
二、数据库三大范式的作用
范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。但是操作困难,因为需要联系多个表才能得到所需要数据,而且范式越高性能就会越差。要权衡是否使用更高范式是比较麻烦的,一般在项目中,用得最多的也就是第三范式。
实际上设计任何一种数据库应用系统,不论是基于何种数据模型的,都会遇到如何构造合适的数据模式即逻辑结构的问题。
由于关系模型有严格的数学理论基础,并且可以向别的数据模型转换。所以要设计合适的关系模式,使其逻辑结构更加符合要求,出现了规范化理论。
而三大范式即第一、第二和第三范式就是规范化理论重要部分,是为了在设计中更好的解决数据冗余,数据有效性检查,提高存储效率。
这篇关于数据库三大范式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南