当前位置: 首页 > article >正文

数据库的范式

数据库范式(Normal Forms)是设计数据库时,为了减少数据冗余、增强数据一致性和提高数据存储效率而遵循的一系列规则。

第一范式(1NF)

  • 定义:数据库表的每一列都是不可分割的原子数据项。也就是说,不能有表中某个列还可以再分成多个子列的情况。
  • 示例:假设有一个学生信息表,其中有一个“学生联系方式”列,里面同时包含了电话号码和电子邮箱地址,这就不符合1NF。正确的做法是将“学生联系方式”列拆分为“电话号码”列和“电子邮箱地址”列,这样每一列都是不可再分的原子数据项。

第二范式(2NF)

  • 定义:在满足1NF的基础上,非主属性完全依赖于主键。主键是用于唯一标识表中每一行数据的一个或一组列。
  • 示例:考虑一个订单明细表,主键是(订单ID,商品ID)。表中有“商品名称”“商品单价”“订单金额”等列。“商品名称”和“商品单价”只依赖于商品ID,而“订单金额”依赖于(订单ID,商品ID)。如果“商品名称”只依赖于商品ID,而不完全依赖于主键(订单ID,商品ID),就不符合2NF。解决办法是可以将商品相关的信息(如商品名称、商品单价)单独放在一个商品表中,通过商品ID与订单明细表建立关联。

第三范式(3NF)

  • 定义:在满足2NF的基础上,任何非主属性不传递依赖于主键。传递依赖是指如果存在A -> B,B -> C,那么A -> C就是传递依赖。
  • 示例:假设有一个员工信息表,其中有“员工ID”(主键)、“部门ID”、“部门名称”。“部门名称”依赖于“部门ID”,“部门ID”又与“员工ID”关联,这样“部门名称”就传递依赖于“员工ID”,不符合3NF。应该将部门信息单独建立一个表,包括“部门ID”和“部门名称”,通过“部门ID”在员工信息表和部门表之间建立关联。

第四范式(4NF)
消除多值依赖,即表中不应该存在多个实例具有相同的主键但不同的列值组合。

第五范式(5NF)
消除连接依赖,即表中不应该存在多个实例通过连接操作产生新的信息。

范式的级别越高,数据库设计的结构就越合理,但有时候为了提高查询效率等实际需求,可能不会严格按照最高范式来设计数据库,会在数据冗余和查询性能之间进行权衡。


http://www.kler.cn/a/448326.html

相关文章:

  • 学技术学英文:java CyclicBarrier 和 CountDownLatch用法区别,举例生动看完不会忘
  • Unity中通过代码设置材质HDR颜色的方法参考
  • opencv 项目--图像匹配
  • (13)CT137A- 简易音乐盒设计
  • sentinel学习笔记4-SPI 在 Sentinel 中的应用
  • 本地电脑生成SSH公钥私钥对,用于SSH远程连接服务器
  • 【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
  • 泛型(2)
  • 开源!自制一个桌面宠物(STM32CUBEMX HAL库 PWM波 小项目)
  • 在 CUDA C/C++ 中使用共享內存
  • 路径规划之启发式算法之二十一:禁忌搜索算法(Tabu Search,TS)
  • Linux 端口操作
  • 【游戏设计原理】21 - 解谜游戏的设计
  • 【Mac】安装 PaddleOCR
  • springboot java ffmpeg 视频压缩、提取视频帧图片、获取视频分辨率
  • IntelliJ IDEA Docker集成
  • 适用于.net的操作excel的库
  • vsCode怎么使用vue指令快捷生成代码
  • stm32实现出厂设置和恢复出厂设置
  • python --机器学习(KNN相关)