java八股文面试[数据库]——数据库三范式 秒速五厘米 2024-03-24 23:44 105阅读 0赞 ![8ad4b7ae97fc4ca7b24a7eb78b6014ed.png][] **什么是范式?** 范式是数据库设计时遵循的**一种规范**,不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF):**属性不可分割**,即每个属性都是不可分割的原子项。(实体的属性即表中的列) **理解:一个列不能包含两个数据** 第二范式(2NF):满足第一范式;且不存在**部分依赖**,即非主属性必须**完全依赖**于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于**主键的一部分**) 理解:非主键字段必须依赖**联合主键索引**的所有字段。 第三范式(3NF):满足第二范式;且不存在**传递依赖**,即非主属性不能与**非主属性之间**有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C) **举例说明3NF: 1NF** 属性不可再分,即表中的每个列都不可以再进行拆分。 如下学生信息表(student): id、name(姓名)、sex\_code(性别代号)、sex\_desc(性别描述)、contact(联系方式) primary key(id) ![4a9abbe0914b4201b4f542f0505ef0e1.png][] 如果在查询学生表时经常用到**学生的电话号**,则应该将联系方式(contact)这一列分为电话号(phone)和地址(address)两列,这样才符合第一范式。 修改使表满足1NF后: ![936e26355014428eacca2315ab16a611.png][] 判断表是否符合第一范式,列是否可以再分,得看需求,如果将电话号和地址分开才能满足查询等需求时,那之前的表设计就是不满足1NF的,如果电话号和地址拼接作为一个字段也**可以满足**查询、存储等需求时,那它就满足1NF。 **表中无表**,即每个属性都是不可分割的。 不满足第一范式的数据库就不是关系型数据库,所以说能在MySql建立的表肯定满足第一范式。 ![8f6e9477cc64894f563d0aeb04aa7935.png][] 其中 联系方式 这个属性还能继续被分割,这样无法建立MySql表。 **2NF** 在满足1NF的前提下,表中**不存在部分依赖**,非主键列要完全依赖于主键。(主要是说在**联合主键**的情况下,非主键列不能只依赖于主键的一部分) 如下学生成绩表(score): stu\_id(学生id)、kc\_id(课程id)、score(分数)、kc\_name(课程名) primary key(stu\_id, kc\_id) ![62d5b2b8226f41d5b1ddbb6de138bfe0.png][] 表中主键为stu\_id和kc\_id组成的联合主键。满足1NF;非主键列score完全依赖于主键,stu\_id和kc\_id两个值才能决定score的值;**而kc\_name只依赖于kc\_id**,与stu\_id没有依赖关系,它不完全依赖于主键,只依赖于主键的一部分,不符合2NF。 修改使表满足2NF后: 成绩表(score) primary key(stu\_id) ![ab5a3226054f4dc0bef71973abd044cc.png][] 将原来的成绩表(score)拆分为成绩表(score)和**课程表(kc)**,而且两个表都符合2NF。 **3NF:** 在满足2NF的前提下,不存在传递依赖。(A -> B, B -> C, A->C) 如下学生信息表(student): primary key(id) ![0c2de8f9748844658a8f0cb60efdc6fc.png][] 表中sex\_desc**依赖于sex\_code**,而sex\_code**依赖于id**(主键),从而推出sex\_desc依赖于id(主键);sex\_desc**不直接依赖于主键**,而是通过依赖于非主键列而依赖于主键,属于传递依赖,不符合3NF。 修改表使满足3NF后: 学生表(student) primary key(id) ![8d3f329602c6407a8e79874966cb08f6.png][] 性别代码表(sexcode) primary key(sex\_code) ![d06c3bab69034630b9c5f639a9b33340.png][] 将原来的student表进行拆分后,两个表都满足3NF。 **什么样的表越容易符合3NF?** 非主键列**越少**的表。(1NF强调列不可再分;2NF和3NF强调**非主属性列和主属性列之间**的关系) 如代码表(sexcode),非主键列只有一个sex\_desc; 或者将学生表的主键设计为primary key(id,name,sex\_code,phone),这样**非主键列只有address**,更容易符合3NF。 ![61e2b453d02640cc9f193e9ccdac1f4f.png][] 解题: 2NF非主键列要完全依赖于主键, 主键只能有一个,只能是AC,但是 B 和D 只依赖主键的一部分,所以不满足。 知识来源: [【23版面试突击】你知道数据库设计三大范式吗?开发中应该遵守吗?\_哔哩哔哩\_bilibili][23_bilibili] [数据库三范式是什么?(3NF详解)\_小鱼星空的博客-CSDN博客][3NF_-CSDN] [数据库三范式说的到底是啥? - 知乎][-] [8ad4b7ae97fc4ca7b24a7eb78b6014ed.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/4dc9867c75bf4970bc34a0e3b637a3e3.png [4a9abbe0914b4201b4f542f0505ef0e1.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/75169b7de1b4428c92bc80ba26fa4564.png [936e26355014428eacca2315ab16a611.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/1a979756a99f4c6788a267011745a3ab.png [8f6e9477cc64894f563d0aeb04aa7935.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/d5f1cc8de6b746a2800f4abb5b1bfbf9.png [62d5b2b8226f41d5b1ddbb6de138bfe0.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/8416b7b8f0d3476fa9dba0fb280248ca.png [ab5a3226054f4dc0bef71973abd044cc.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/036fbc7b0f984c2687f9e1a8a604d0a0.png [0c2de8f9748844658a8f0cb60efdc6fc.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/a012c0263df7451ba9f5dc0c45555045.png [8d3f329602c6407a8e79874966cb08f6.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/dbd743d95d5641789f95d08c9711c304.png [d06c3bab69034630b9c5f639a9b33340.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/e09efdb460fe445ab1596d8748141f84.png [61e2b453d02640cc9f193e9ccdac1f4f.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/91133efb222e42229c1be1673fe3e5cb.png [23_bilibili]: https://www.bilibili.com/video/BV1M24y1z7BR?p=180&vd_source=7ec3a2ec18181a9b64c9a3246305e511 [3NF_-CSDN]: https://blog.csdn.net/xk520134/article/details/121671244 [-]: https://zhuanlan.zhihu.com/p/409369727
相关 java八股文面试[数据库]——数据库三范式 ![8ad4b7ae97fc4ca7b24a7eb78b6014ed.png][] 什么是范式? 范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。 最常 秒速五厘米/ 2024年03月24日 23:44/ 0 赞/ 106 阅读
相关 数据库三范式 第三范式(3NF):如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的。 当然,这里要把1、2、3、4范式都讲一下。 短命女/ 2022年09月25日 12:16/ 0 赞/ 161 阅读
相关 数据库三范式 第一范式 表中所有字段仅包含单值 第二范式 表中的每个非键字段由整个主键决定,且不能由主键自身的一部分确定。(有的主键由多个字段组成) 第三范式 表中不存 旧城等待,/ 2022年07月14日 06:42/ 0 赞/ 199 阅读
相关 数据库三范式 第一范式:属性不可再分 第二范式:消除局部依赖。(依赖的定义:通过这个值可以定义其他值,那么他们之间就产生依赖关系。) 如图所示违反第二范式: ![70][] 因为有局 傷城~/ 2022年05月15日 12:45/ 0 赞/ 268 阅读
相关 数据库三范式 关系数据库的几种设计范式介绍 1、第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对[关系模式][Link 1]的基本要求,不满足第一范式(1NF)的数 淩亂°似流年/ 2022年04月17日 04:47/ 0 赞/ 239 阅读
相关 数据库三范式 关系型数据库设计是很重要的一门学科,设计的好坏与否,直接影响到后续业务性能。遵从数据库方式进行数据库设计,将极大程度上是的数据冗余变少,后续整个数据库的性能,维护与管理都将变得 骑猪看日落/ 2022年04月15日 07:07/ 0 赞/ 287 阅读
相关 数据库三范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须 灰太狼/ 2022年03月06日 08:16/ 0 赞/ 302 阅读
相关 【面试】数据库三范式是什么? 1 第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 所谓第一范式(1NF)是指数据库 淡淡的烟草味﹌/ 2021年09月29日 23:54/ 0 赞/ 261 阅读
相关 数据库三范式 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目 冷不防/ 2021年09月27日 17:10/ 0 赞/ 399 阅读
相关 数据库三范式 第一范式(1NF) 字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式。 数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个 ゝ一纸荒年。/ 2021年06月24日 16:11/ 0 赞/ 454 阅读
还没有评论,来说两句吧...