简单学习数据库三大范式

面试中经常被问到,哎看你简历上数据库用的比较多,那你给我说说三大范式是什么?我就懵逼了,虽说我自己思考过如何根据需求设计一个或者几个表之间的依赖,但是对于这样系统专业的学习还是没有深入了解过的,今天,我决定较为简单得了解学习一下,方便自己三月份或者四月份的跳槽;

那么首先我们来了解一下,什么是三大范式?

第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要

求,否则,将有很多基本操作在这样的关系模式中实现不了。

第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.

注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性

这段是我从其他地方摘抄的,会比较难以理解,那么我就根据我看了那么多文章后对这段话做一个属于我自己的理解总结:

一、第一范式:表中每一列都是不可分割的,也就是说确保每一列的原子性;

这个怎么理解呢?举个栗子:

譬如我有这么一张表:

id    地址

1     中国江西

2     中国深圳

那么其实这个表的地址这个字段是可以拆分的,拆分成:

id      国家     省份

1      中国     江西

2      中国     深圳

这就符合了第一范式,保证了每一列或者说每一个字段都是原子的,不可分割的;

这样做有什么好处呢?它可以满足一些比如要区分国家省份的需求,还可以减少在查询的时候的冗余(我可以专门查国家或者省份)

二、第二范式:一条数据只做一件事,或者专业点说,非主键字段必须依赖主键字段,即是一个表只做一个事情

这个我们怎么理解呢?就比如我有如下的一张表:

订单编号   房间号   联系人编号  联系人  联系人电话   身份证号

这里会有一个问题,我可以一个人定多个房间,那么我就会产生多条数据,并且多条数据中的联系人的信息都是一样的,这里表现为一对多关系,这里我们就可以把联系人后的三个字段单独为一张表,用中间表进行一对多,减少冗余;

当然你也可以这么理解:联系人电话以及身份证号并不依赖于主键订单编号,它们是依赖于联系人编号的,然而联系人编号和订单编号没有必然关系,在这个表内做了两个事情,所以就可以分为两张表:

订单编号  房间号

联系人编号  联系人  联系人电话 身份证号

三、第三范式:字段和主键不能有传递依赖关系

这个我们这样理解:

有如下表:

学号  姓名   院校编号   院校地址

这个表的问题在于,院校地址和学号是没有关系的,他必须依赖院校编号,就存在了层次依赖的情况,这种时候我们应该分开两个表,一个专门存放学生信息,另外一个表存放院校信息;

 

以上就是好我所理解的三大范式,欢迎大神批评指正。

技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值