从数据库三范式角度分析一对多、多对多和一对一关系
文章目录
- 前言
- 一、三范式的目的
- 二、三范式及其对应关系
- 1.第一范式
- 2.第二范式
- 3.第三范式
- 4.一对一关系
- 总结
前言
几乎绝大多数项目的最终目的都是通过操作数据库来实现的,所以,操作数据库的能力是每个开发人员都必须具备的。本文将从数据库三范式着手,分析一对多、多对多和一对一关系。本文的绝大多数观点取自动力节点的杜聚宾老师,博主的主要工作是在个人理解的基础上进行了相关内容的归纳总结。
提示:以下是本篇文章正文内容,下面内容可供参考讨论。
一、三范式的目的
数据库三范式的目的是为了有效地的减少数据库的冗余现象,从而减少存储空间的浪费。
但在实际开发过程中,我们往往需要根据客户的业务需求进行适度的调整,在必要时可以通过冗余来换取执行效率。
其原理是可以在根本上避免了多表联查,从而避免笛卡尔积现象的发生。
二、三范式及其对应关系
1.第一范式
数据库第一范式要求:数据库中任何一张表都应该有主键,并且每一个字段(column)都具有原子性,不可再分。
第一范式是数据库的基本要求,在建表时需要严格遵守。如:联系方式里直接包含电子邮箱和电话号码是不可取的,我们需要进行进一步拆分,取消联系方式字段,将电子邮箱和电话号码分别设为表中字段进行替代。
2.第二范式
数据库第二范式要求:在满足第一范式的基础上,所有字段都完全依赖于主键,不存在部分依赖(可以理解为表中不能存在复合主键)。
第二范式涉及表多对多关系。如果要在一张表中存放所有多对多关系信息时,需使用复合主键进行分别标识与依赖,这样会产生部分依赖,不满足第二范式。如:老师和学生之间的多对多关系。
如果使用一张表来存放所有信息,至少需要使用学生编号和老师编号的复合主键来分别对学生和老师进行管理。最终结果混乱且不易维护。
所以在面对多对多关系时,我们需要分别建立老师表、学生表和关系表共三张表来进行管理。在关系表中通过分别引入老师编号和学生编号两个外键来建立学生和老师的多对多关系。
在这里有一个口诀可以帮助记忆:
多对多,三张表,关系表两外键。
3.第三范式
数据库第三范式要求:在满足第二范式的基础上,所有字段都直接依赖于主键,不存在传递依赖(此范式在实际开发中,不一定要严格遵守)。
第三范式涉及一对多关系,如果要在一张表中存放所有一对多关系信息时,属于一对多中一的一方会出现大量重复数据,造成冗余。并且,这样还会产生传递依赖,不满足第三范式。如:班级和学生之间的一对多问题。如果学生和班级信息存放在一张学生表中,那么,班级信息字段需要依靠唯一的班号进行确定,而班号需要对应学生编号进行确定,这要就产生了传递依赖,就是非主键字段可以对其他字段一定程度上满足主键功能的现象。
所以在面对一对多关系时,我们需要分别建立学生表和班级表共两张表来进行管理。在一对多关系中多的那一方学生表中添加班级表的外键用来管理学生的班级信息。
在这里同样有一个口诀可以帮助记忆:
一对多,两张表,多的表加外键。
4.一对一关系
我们需要了解的是,一对一关系在一定程度上与一对多关系相似。
一对一关系存在两种设计方案主键共享和外键唯一,我们可以根据具体的问题,如用户登录表和用户详细信息表来进行理解。用户登录表和用户详细信息表之间是一对一关系。
1.主键共享
我们可以将用户详细信息表中的主键设置为用户登录表对应的外键。以此来达到两张表分别一对一对应的目的。
2.外键唯一
外键唯一是通过一对多关系解决方法上进行改变的。我们要做的是在其中任意一方,如用户详细信息表中添加用户登录表的外键,同时对该外键添加unique约束(唯一性约束),来保证两张表的信息一对一对应。
总结
以上就是今天要讲的全部内容,需要记忆的地方有:
1、多对多,三张表,关系表两外键。
2、一对多,两张表,多的表加外键。
3、一对一,主键共享和外键唯一。
本文仅是对所学内容进行整理与复现,博主还处于学习初级阶段,水平有限,如有错误与遗漏欢迎在评论指出。
从数据库三范式角度分析一对多、多对多和一对一关系相关推荐
- sql中一对多,多对一,一对一关系的解析
1.一对多:比如说一个班级有很多学生,可是这个班级只有一个班主任.在这个班级中随便找一个人,就会知道他们的班主任是谁:知道了这个班主任就会知道有哪几个学生.这里班主任和学生的关系就是一对多. 2.多对 ...
- 数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性
参考:http://www.cnblogs.com/xrq730/p/5100442.html 细说数据库三范式 2.1 第一范式(1NF)无重复的列,保证每列的原子性,即每一列的各个属性值之间不能有 ...
- 数据库三范式通俗理解 -数据库三范式官方定义
数据库三范式 官方定义 第一范式(1NF):数据库表中的字段都是单一属性的,不可再分. 第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖 第三范式(3NF):在第二范式的 ...
- MySql——数据库三范式
用于自己学习时的简单解释 数据库三范式:是数据库的设计原则,主要目的是为了避免数据冗余. 数据库的设计应当遵循三范式 第一范式:任何一张表都应该有主键,每一个字段必须具有原子性不可再分 第二范式:在第 ...
- 如何在数据库三范式的基础上进行数据库冗余设计
数据库设计过程中不仅要考虑遵循第三范式,还要考虑是否冗余 很多数据库设计书籍都强调数据库设计三范式,而三范式的一个重要工作就是消除冗余,可以消除冗余在大多数情况下是正确的.当在实际的业务模型中,处理复 ...
- python学习笔记 day44 数据库三范式
参考自 https://www.cnblogs.com/wangfengming/articles/7929118.html 1. 数据库三范式概念: 为了建立减少冗余,结构合理的数据库,涉及数据库时 ...
- 为什么我不喜欢数据库三范式
插曲 最近,一个远房亲戚的小表弟准备选修专业 找到我问: "哥,现在学数据库有没有前途阿?""当然有啊,前途大大的呢""那我现在开始学数据库,需要先从 ...
- MySQL笔记(七)数据库三范式
这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是数据库三范式.有错误的欢迎大家指出... 数据库三范式 (1)第一范式(1NF): 定义:每一列都是不可分割的原子数据项(强调的是列的 ...
- 三句话归纳数据库三范式
数据库三范式,网友已经总结n多了,这里不再赘述. 其实,归纳起来,就三句话: 一:行不可再分 二:列不可再分 三:列不可重复
最新文章
- 注意!你的 Navicat 可能被投毒了...
- 低学历学什么技术有前途可以月入过万?
- 教育培训机构用管理系统能做什么?
- 活动 | 智源学者计划启动暨联合实验室发布会(4月16日)
- java+++多数据源配置,Spring Cloud + Mybatis 多数据源配置
- 新版GNS3-安装及配置教程
- WKWebView进度及title
- python 通登录银行_Python3 适合初学者学习的银行账户登录系统实例
- 【模拟】交换(jzoj 1518)
- java多线程系列13 设计模式 Future 模式
- 计算机如何制作U盘启动盘,电脑如何制作U盘启动盘
- js 去除html标签
- 万里丝路一卷绘,地图之美细无声
- 更改 Normal 模板 (Normal.dotm)
- 3步教你学会cocos creator 物理引擎
- imageJ下载链接
- 免费域名邮箱申请教程
- 【Python笔记】pyspark.sql库
- 圣诞表白html,Pyhton表白代码——浪漫圣诞节
- slave-pending-jobs-size-max导致主从延迟