数据库三大范式与反范式的概念及解决的问题

数据库三大范式与反范式 的概念及解决的问题

  1. 概念:范式是设计表结构的标准。高阶范式在低阶范式的基础上冗余度更低,一般要让表的设计尽量满足第三范式(3NF),但有时为提高某些查询性能,要破坏范式,也即反范式。

  2. 第一范式表中的每个字段属性都是原子性的,不可分割

    (比方讲你要记录地点,那你不能设计一个字段是 省+市 的格式,应该拆开来)

  3. 第二范式要求非主属性都要完全依赖于完整的(联合)主键;一张表只表达一个独立的意思。

    (比如说记录选手战绩的 选手战绩表,他的主键是 选手id+比赛id ,其他字段有 姓名、比赛时间、得分,这其中就只有得分是完全依赖于主键的,而 姓名 和 比赛时间就没必要在这重复的记录造成冗余,到 选手表 和 比赛表 去查就是了)

  4. 第三范式任何非主属性不依赖于主键外的字段

    (比如说记录选手信息的 选手表,他的主键当然是选手id,其他字段有 队伍id, 比赛id ,这个 比赛id 就不依赖于主键,而是依赖 队伍id 的,如果放在这不仅会造成数据冗余,你要插入一条 比赛id 原本是件很简单的事情只要在对应的队伍表那里插入就好了,现在要在每一个 参赛选手 的选手表里都插入一下,而且如果举办方如果不能知道参赛队伍有哪些选手参赛,那岂不是连插入信息都做不了了,这就是潜在的异常

  5. 解决的问题:三大范式既减少数据冗余,也避免了一些更新数据时的异常。

  6. 反范式为了性能和读取效率违反范式化的原则,以空间换时间的策略允许适当的冗余数据在表中

    (比如说记录选手战绩的 选手战机表,他的主键是 选手id+比赛id,其他字段就一个 得分 ,我们要是需要选手 姓名 和 比赛时间 ,就得联合其他表来查,当然会比较慢了,你要是想快那就可以违反范式化的原则,把 姓名 和 比赛时间 存在选手战绩表中)

#Java开发##学习路径#
全部评论
楼主你是做什么工作的,分享的技术涉及面这么广
点赞
送花
回复 分享
发布于 2022-03-11 19:07

相关推荐

一面 70min3.21晚上七点半一面大部分时间都在问项目,如何进行优化,有问题如何解决.1. oauth2登录流程,和单点登录2. 第一个token登录后安全问题3. 虚拟DOM和虚拟列表4. 浏览器要向后端请求20,30个接口返回大量数据.如何优化? 按需加载,http2主动推送,indexDB5. 权限控制,除了动态获取路由还有什么办法6. 防抖7. 浏览器本地存储localStorage的项目8. 请求有哪些字段9. 对vue和原生js的理解10. webpack理解11. http3.0 2.0 1.1区别(我扯多了,后面面试官直接说可以了)12. XSS攻击13. 手写有一个闭包题,想到了闭包但没写出来.......很简单的题,可惜了.二面 70min - 1h10min 二面挂 3.22下午五点半二面1. 介绍团队,开发流程?具体某个项目开始阐述.学到什么程度开发项目? 2. 技术挑战点?3. 开始让我自己设计另一个登录方法.然后问我注意事项,怎么优化.问很细很深,没接住.4. 项目还有什么难点?什么时候上线,怎么测试?5. 上线后出问题怎么办?6. 前面介绍第一个项目,后面第二个项目.问这两个项目区别7. 问项目如何优化渲染?8. 还有其他亮点没?9. 还有什么如何优化,各种优化都可以说说10 浏览器渲染过程? 难得的八股,后面问八股了.追问如何优化11. HTTP1.1 ,HTTP1.0区别12. 有哪些请求方式,delete,put请求?- 追问put请求除了修改,还有什么作用.13. 状态码,追问301重定向.304如何做缓存.14. 继承?15. 跨域如何解决16. 安全方法?XSS和CSRF攻击区别17. 后端了解怎么样?18. 最近准备学什么?19. 权限控制?追问权限的库如何设计?不会后端.20. 设计模式?追问在项目中代码具体如何体现设计模式?21. 怎么学习?22. 最近了解哪些前端新技术?23. 反问.二面属于是第一次面大厂没啥经验,自己也还得沉淀,被狠狠压制了.
腾讯二面570人在聊 查看12道真题和解析
点赞 评论 收藏
分享
4 10 评论
分享
牛客网
牛客企业服务