【数据库】理解一对一、一对多、多对多关系
三种关系的实例
一对一关系实例
- 一个人对应一张身份证,一张身份证对应一个人
一对多关系实例
- 一个班级拥有多个学生,一个学生只能够属于某个班级
多对多实例
- 一个学生可以选修多门课程,一个课程可以被多个学生选修
一对一关系
主键的设计方式
- 一对一关系是最好理解的一种关系,在数据库建表的时候可以将
人表的主键放置与身份证表里面
,也可以将身份证表的主键放置于人表
里面
也就是说一对一关系的表,主键放在左表也可以,放在右表也可以
从用户表分析一对一关系
箭头所指向的表是 1 的一端,箭头所指向的表的主键,在被指向的表中即作为主键,又作为外键。
一对多关系
主键的设计方式
- 方法1:班级是1端,学生是多端,结合面向对象的思想,1端是父亲,多端是儿子,所以多端具有1端的属性,也就是说
多端里面应该放置1端的主键
,那么学生表里面应该放置班级表里面的主键
。(该方法比较常用) - 方法2:
新增一个关系表,用来表示学生与班级的属于关系
,该关系表包含字段(学生号,班级号)。通过学生号与班级号的对应关系表示学生属于的班级。
在两张表所对应的java实体类中多的一端中有1的一端的java实体类的对象属性(学生类中有一个班级对象作为成员变量
)。
多对多关系
主键设计方式
- 对于多对多关系,
需要转换成1对多关系
,那么就需要一张中间表
来转换,这张中间表里面需要存放学生表里面的主键和课程表里面的主键,此时学生与中间表是1对多关系,课程与中间表是1对多关系,学生与课程是多对多关系
从用户/角色表分析多对多关系
由三张表来体现, 两张是业务表,中间是关系表,箭头由中间表分别指向两张业务表,中间表由两张业务表的主键作为外键(联合主键),且中间表不能有其他字段,在java实体类中两张业务表分别具有对方业务表的集合属性(用户类中有一个List<角色>集合作为成员变量,角色表中有一个List<用户>集合做为成员变量
)
总结
总而言之,最重要的关系就是1对多关系,根据面向对象思想在建表的时候将1端主键置于多端即可。
【数据库】理解一对一、一对多、多对多关系相关推荐
- SQLAlchemy_定义(一对一/一对多/多对多)关系
SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...
- 数据库一对一 一对多 多对多关系
参考:https://blog.csdn.net/u013144287/article/details/79024130 自己在项目中写的实例: '实体'和'公理'具有多对多关系,即一个实体可以对应多 ...
- 数据库外键:一对多/多对多关系
数据库事务四大特性ACID: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 基于原子性对存在重复数据的表进行拆分 一对多 ...
- 数据库建表-- 一对多/多对一/一对一/多对多 关系
转自: https://blog.csdn.net/zhongshan_c/article/details/8210196 数据库建表-- 一对多/多对一/一对一/多对多 关系 关联映射:一对多 ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多
7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...
- mybatis的一对一 一对多 多对多
mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...
- day 69-70 一对一 一对多 多对一联表查询
day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...
- JPA 一对一 一对多 多对一 多对多配置
1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...
- Django一对一 ,一对多,多对多
Django 数据库一对多,多对多 目录 app01/models.py app01/views.py app01/urls.py Python_Django/urls.py 目录 app01/mod ...
最新文章
- 指定的网络文件夹目前是以其他用户名和密码进行映射的_使用 GitLab CI 与 Argo CD 进行 GitOps 实践
- 架构设计-业务逻辑层简述
- boost::fusion::erase_key用法的测试程序
- OpenGL 基于PBR的specular textured 镜面纹理的实例
- 替换用FTP传到Unix上的文件中的^M字符
- java utf-8 gbk_Java 字符转码之UTF-8转为GBK/GB2312
- ubuntu不会自动休眠_关机、睡眠、休眠有啥区别?微软说非特殊情况不要关机
- QQ 新增“语音进度条”;滴滴顺风车负责人道歉;华为研发费将超 1000 亿美元 | 极客头条...
- 你掌握垃圾分类大法了吗?图像分类1分钟轻松解决
- 页面性能优化的利器 — Timeline
- SpringBoot学习---整合JDBC,Druid,MyBatis
- Linux常用工具包安装
- 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-9825】-【V4.0 Android-Q-TD1】...
- WebView加载淘宝,天猫链接失败
- A*算法中二叉堆的使用
- 两种方法实现卸载apk应用程序
- TabLayout+ViewPager实现tab切换
- 面试必备之深入理解自旋锁
- google authenticator python_谷歌验证器 Google Authenticator工作原理
- ASP.NET+C#+Sql Server数据库0968 校园二手物品交易网站的设计与实现-毕业设计