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

MySQL数据库基础(十三):关系型数据库三范式介绍

文章目录

关系型数据库三范式介绍

一、什么是三范式

二、数据冗余

三、范式的划分

四、一范式

五、二范式

六、三范式

七、总结


关系型数据库三范式介绍

一、什么是三范式

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

二、数据冗余

数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象

三、范式的划分

根据数据库冗余的大小,目前关系型数据库有六种范式,各种范式呈递次规范,越高的范式数据库冗余越小。

六种范式:

  • 第一范式(1NF)

  • 第二范式(2NF)

  • 第三范式(3NF)

  • 巴斯-科德范式(BCNF)

  • 第四范式 ( 4NF)

  • 第五范式(5NF,又称完美范式)

一般遵循 前三种范式即可

四、一范式

第一范式(1NF): 强调的是字段的原子性,即一个字段不能够再分成其他几个字段。

 

这种表结构设计就没有达到 1NF,要符合 1NF 我们只需把字段拆分,即:把 contact 字段拆分成 name 、tel、addr 等字段。  

五、二范式

第二范式(2NF): 满足 1NF的基础上,另外包含两部分内容

  • 一是表必须有一个主键

  • 二是非主键字段必须完全依赖于主键,而不能只依赖于主键的一部分

 

OrderDetail表的主键是什么?

主键的定义:能够确定唯一一行记录的特殊字段

 

create table test (name varchar(19),id int,primary key (name,id)
)

 

这里有主键由OrderID和ProductID共同组成

同时 UnitPrice 和 ProductName 这里两个字段 与ProductID的从属关系强于他们同OrderID的从属关系

 

 

六、三范式

第三范式(3NF): 满足 2NF

另外非主键字段必须直接依赖于主键,不能存在传递依赖。

即不能存在:非主键字段 A 依赖于非主键字段 B,非主键字段 B 依赖于主键的情况。

因为 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键字段都完全依赖于主键(OrderID),所以符合 2NF。

不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。

 

把【Order】表拆分为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。

七、总结

概念:

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

三范式:

  • 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列。
  • 第二范式(2NF): 满足 1NF,另外包含两部分内容,一是表必须有一个主键;二是非主键字段 必须完全依赖于主键,而不能只依赖于主键的一部分。
  • 第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

  •  📢博客主页:https://lansonli.blog.csdn.net

  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉

  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

 

http://www.lryc.cn/news/305638.html

相关文章:

  • 掌控互联网脉络:深入解析边界网关协议(BGP)的力量与挑战
  • Vue2页面转化为Vue3
  • 【课程作业】提取图中苹果的面积、周长和最小外接矩形的python、matlab和c++代码
  • 解决easyExcel模板填充时转义字符\{xxx\}失效
  • 在项目中使用CancelToken选择性取消Axios请求
  • [c++] 记录一次引用使用不当导致的 bug
  • 能不能节约百分之九十的算力来训练模型
  • LeetCode206: 反转链表.
  • 高级统计方法 第1次作业
  • spinalhdl,vivado,fpga
  • Tomcat线程池原理(下篇:工作原理)
  • 【服务器数据恢复】通过reed-solomon算法恢复raid6数据的案例
  • LeetCode 2583.二叉树中的第 K 大层和:层序遍历 + 排序
  • element ui 安装 简易过程 已解决
  • websoket
  • 案例:微服务从Java/SpringBoot迁移到Golan
  • 小波变换模拟
  • cv::Mat图像操作
  • 【机器学习基础】一元线性回归(适合初学者的保姆级文章)
  • 2024年软件测试岗位-面试
  • 【坑】Spring Boot整合MyBatis,一级缓存失效
  • J7 - 对于ResNeXt-50算法的思考
  • R3F(React Three Fiber)基础篇
  • torch\tensorflow在大语言模型LLM中的作用
  • 设计模式-创建型模式-单例模式
  • 备战蓝桥杯—— 双指针技巧巧答链表1
  • 微信小程序返回上一级页面并自动刷新数据
  • Spring⼯⼚创建复杂对象
  • Top-N 泛型工具类
  • Java 后端面试指南