首页 > 数据库 >数据库三大范式

数据库三大范式

时间:2023-09-12 15:32:21浏览次数:51  
标签:3NF 依赖 范式 数据库 依赖于 主键 三大

面试又双叒叕被问到数据库三大范式,怎么答才能让面试官认可呢 (qq.com)

图片

范式是我们设计数据库表时遵循的一种规范要求,主要有两个优点:

  • 消除重复数据减少冗余数据,从而让数据库内的数据能划分的更合理,让磁盘空间得到更有效利用的一种标准化标准;
  • 消除潜在异常(插入异常,更新异常,删除异常)

  

数据库范式主要分为1NF,2NF,3NF,BCNF等。范式越高,要求就越细。一般在我们设计关系型数据库的时候,通常考虑到第三范式(3NF)就足够。需要注意的是,每当要符合高一级范式的设计规范,必须要以符合低一级范式为前提。例如符合第二范式(2NF)的前提,必须符合第一范式(1NF)。

第一范式 (1NF):子性,属性 (字段) 是最小单位不可再分。

比如”中国山东枣庄”,显然不符合第一范式要求,划分成国家、省、市三个字段比较好。当然,如果明确业务上没有省市区划分要求,也可不划分。

第二范式(2NF):满足1NF,每个非主属性全依赖于主键,而不是部分主键。

所以只有一个主键的表如果符合第一范式,那一定是第二范式

比如部门描述由部门id决定,但是这个表的主键要是员工id、部门id。这就是部分依赖,需要拆表

第三范式(3NF):满足2NF,非主键列必须直接依赖于主键,无传递依赖

不能存在非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。比如工作描述这个字段依赖于工作,工作依赖于主键员工id,他们在同一个表中就是传递依赖

助记:原 玩 无传,原神玩家没有传人。

鲍依斯-科得范式 (BCNF):满足3NF,任何非主属性不能对主键子集依赖 (消除3NF 主属性对码的部分和传递函数依赖)

第四范式(4NF):满足3NF,属性之间不能有非平凡且非函数依赖的多值依赖(消除3NF非平凡且非函数依赖的多值依赖)

有的时候为了提高某一些查询性能,我们还需要破坏范式规则,也就是反规范化。

一般某个数据经常被访问时,比如数据表里存放了语文数学英语成绩,但是如果在某个时间经常要得到它的总分,每次都要进行计算会降低性能,不如加上总分这个冗余字段。

标签:3NF,依赖,范式,数据库,依赖于,主键,三大
From: https://blog.51cto.com/coderge/7445905

相关文章

  • 如何使用Oracle Enterprise Manager Database Express连接到PDB数据库
    1.问题重复弹出登录框,无法登陆关闭登录框,显示invalidcontainername2.解决方法参考链接为PDB启动EMExpress要为PDB启动EMExpress,请确保PDB以读/写模式打开,然后尝试本主题中描述的以下方法之一(按所示顺序):连接到包含PDB的CDB的CDB$ROOT容器,并发出以下SQL......
  • AntDB数据库参加ACDU中国行杭州站,分享数据库运维实践与经验
    关于ACDU和中国行:ACDU是由墨天轮社区举办的中国数据库联盟的品牌活动之一,在线下汇集数据库领域的行业知名人士,共同探讨数据库前沿技术及其应用,促进行业发展和创新的平台,也为开发者们提供友好交流的机会。AntDB作为具有技术前瞻性的国产数据库产品,积极分享15年行业实践经验、线......
  • 首家!亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试
    近日,在中国信通院“可信数据库”数据库迁移工具专项测试中,湖南亚信安慧科技有限公司(简称:亚信安慧科技)数据库数据同步平台V2.1产品依据《数据库迁移工具能力要求》、结合亚信科技AntDB分布式关系型数据库产品,成为首款完成标准所规定的测试产品。测试过程依据标准在基础功能、数据库......
  • N天爆肝数据库——MySQL(1)
    (N天爆肝数据库——MySQL(1))链接:link这是csdn专栏链接,大家可以看一看,提提意见数据库概念理解==数据库DB存储数据的仓库数据库管理系统DBMS操纵和管理数据库的大型软件==SQL操作关系型数据库的编程语言,定义了用一套操作关系型数据库同意标准学习SQL的作用SQL是一门......
  • redux的三个概念与三大核心
    redux的三个概念与三大核心 1、什么是redux?一个组件里可能会有很多的状态,比如控制某个内容显示的flag,从后端获取的展示数据,那么这些状态可以在自己的单个页面进行管理,也可以选择别的管理方式,redux就是是一种状态管理的方式。2、为什么要用redux?(1)数据共享,当我们的很多页......
  • MyBatisPlus插件访问不到云数据库的解决方案
      今天在学mybatis-plus时候了解到除了MybatisX插件外还有个大佬写的MyBatisPlus插件,个人感觉他默认自动生成代码的风格会比MybatisX插件更适合中国程序员,跳转的图标也比小鸟更合适。  但是在连接云数据库的时候出了问题,发现他根本连接不到云数据库,问了其他人,他们表示自己的......
  • 求数组中第三大的数
    //1.从数组中找出第三大的数,例如{10,10,9,9,8,8,7,7}第三大的数是8publicclassThirdLargestNumber{publicstaticvoidmain(String[]args){int[]nums={10,10,9,9,8,8,7,7};intthirdLargest=findThirdLargest(nums);System.......
  • 缓存和数据库一致性问题
    先说结论:1、想要提高应用的性能,可以引入「缓存」来解决2、引入缓存后,需要考虑缓存和数据库一致性问题,可选的方案有:「更新数据库+更新缓存」、「更新数据库+删除缓存」3、更新数据库+更新缓存方案,在「并发」场景下无法保证缓存和数据一致性,且存在「缓存资源浪费」和「机......
  • 数据库 -- day01
    一、数据库简介1、为什么需要数据库磁盘->高级缓存->寄存器->CPU数据存储在内存中,但是内存大小有限、不可能存储所有数据,并且掉电后数据丢失为了让程序在关机重启后数据依然可以使用,必须把数据保存在磁盘文件中随着程序功能越来越复杂、数据量越来越多、数据关系也越......
  • K8s - 安装部署MongoDB数据库教程1(单实例)
    来源:https://www.hangge.com/blog/cache/detail_3158.htmlMongoDB 是一个基于分布式文件存储的数据库。我之前文件中介绍如何使用官方提供的安装包进行 MongoDB 数据库的安装(点击查看),以及如何通过 Docker 来快速搭建 MongoDB 数据库环境(点击查看)。本文接着演示如何在 Ku......