当前位置:网站首页>MySQL:面试问的范式设计
MySQL:面试问的范式设计
2022-08-04 10:00:00 【_索伦】
范式的好处
应用数据库范式可以带来许多好处,但是最重要的好处归结为三点:
1)减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)
2)消除异常(插入异常,更新异常,删除异常)
3)让数据组织的更加和谐
但是数据库范式绝对不是越高越好,范式越高,意味着表越多,多表联合查询的机率就越大,SQL的效率就变低。
第一范式(1NF)
每一列保持原子特性
列都是基本数据项,不能够再进行分割,否则设计成一对多的实体关系。例如表中的地址字段,可以再细分为省,市,区等不可再分割(即原子特性)的字段,如下:
上图的表就是把地址字段分成更详细的city,country,street三个字段,注意,不符合第一范式不能称作关系型数据库。
第二范式(2NF)
属性完全依赖于主键-主要针对联合主键
非主属性完全依赖于主关键字,如果不是完全依赖主键,应该拆分成新的实体,设计成一对多的实体关系。
例如:选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),(学号,课程名称)是联合主键,但是学分字段只和课程名称有关,和学号无关,相当于只依赖联合主键的其中一个字段,不符合第二范式。
第三范式(3NF)
属性不依赖于其它非主属性
要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
示例:学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),学号是主
键,但是学院电话只依赖于所在学院,并不依赖于主键学号,因此该设计不符合第三范式,应该把学院专门设计成一张表,学生表和学院表,两个是一对多的关系。
注意:一般关系型数据库满足第三范式就可以了。
BC范式(BCNF)
每个表中只有一个候选键
简单的说,BC范式是在第三范式的基础上的一种特殊情况,即每个表中只有一个候选键 (在一个数据库中每行的值都不相同,则可称为候选键) ,在上面第三范式的noNF表(上面图3)中可以看出,每一个员工的email都是唯一的(不可能两个人用同一个email),则此表不符合BC范式,对其进行BC范式化后的关系图为:
第四范式(4NF)
消除表中的多值依赖
简单来说,第四范式就是要消除表中的多值依赖,也就是说可以减少维护数据一致性的工作。比如图4中的noNF表中的skill技能这个字段,有的人是“java,mysql”,有的人描述的是“Java,MySQL”,这样数据就不一致了,解决办法就是将多值属性放入一个新表,所以满足第四范式的关系图如下:
从上面对于数据库范式进行分解的过程中不难看出,应用的范式越高,表越多。表多会带来很多问题:
1、 查询时需要连接多个表,增加了SQL查询的复杂度
2 、查询时需要连接多个表,降低了数据库查询性能
因此,并不是应用的范式越高越好,视实际情况而定。第三范式已经很大程度上减少了数据冗余,并且基本预防了数据插入异常,更新异常,和删除异常了。
边栏推荐
- 暴力破解ssh/rdp/mysql/smb服务
- 张朝阳对话俞敏洪:谈宇宙、谈焦虑、谈创业、谈退休、谈人生
- [Punctuality Atom STM32 Serial] Chapter 4 STM32 First Experience Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1
- 关于ARM2440中断源个数的一点想法[通俗易懂]
- 罗克韦尔AB PLC RSLogix5000中定时器指令使用方法介绍
- LeetCode581+621+207
- 《福格行为模型》:如何养成好习惯?
- 一文带你了解 ESLint
- 陈春花发布声明,这场流量狂欢该到了收尾的时候
- 数据使用要谨慎——不良数据带来严重后果
猜你喜欢
超宽带UWB实时精准定位,短距离无缝交互应用,物联网厘米级精度方案
TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2
[论文阅读] Unpaired Image-to-Image Translation Using Adversarial Consistency Loss
MindSpore:MindSpore GPU版本安装问题
架构设计杂谈
After four years of outsourcing, the autumn recruits finally landed
Cloud function to achieve automatic website check-in configuration details [Web function/Nodejs/cookie]
低代码是开发的未来吗?浅谈低代码开发平台的发展现状及未来趋势
Win11文件资源管理器找不到选项卡怎么办?
usb设备复合g_webcam摄像头码流传输功能以及g_serial串口功能
随机推荐
LeetCode 54. 螺旋矩阵 蛇形矩阵式输出字符串
双向带头循环链表实现
视频加密怎么播放_win播放器加密视频
TCP协议 - 三次握手 - 四次挥手-内核参数调优
物体颜色的来源
Win10电脑经常发出叮咚声音怎么关闭
LVS负载均衡群集
Get the number of cpu cores
【C补充】指针相关知识点收集01
[Punctuality Atom STM32 Serial] Chapter 3 Development Environment Construction Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1
Mysql应用日志时间与系统时间相差八小时
HTB-Sense
IDEA 自动导入的配置(Auto import)
为企业数字化转型提供服务_数字赋能企业转型
Apache APISIX 2.15 版本发布,为插件增加更多灵活性
暴力破解ssh/rdp/mysql/smb服务
MindSpore:【AIR模型导出】导出时提示源码中select_op参数类型转换失败
我和 TiDB 的故事 | TiDB 对我不离不弃,我亦如此
无代码平台多行文字入门教程
架构设计杂谈