三种关系的实例

一对一关系实例

  • 一个人对应一张身份证,一张身份证对应一个人

一对多关系实例

  • 一个班级拥有多个学生,一个学生只能够属于某个班级

多对多实例

  • 一个学生可以选修多门课程,一个课程可以被多个学生选修

一对一关系


主键的设计方式

  • 一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面
    也就是说一对一关系的表,主键放在左表也可以,放在右表也可以

从用户表分析一对一关系
箭头所指向的表是 1 的一端,箭头所指向的表的主键,在被指向的表中即作为主键,又作为外键。

一对多关系


主键的设计方式

  • 方法1:班级是1端,学生是多端,结合面向对象的思想,1端是父亲,多端是儿子,所以多端具有1端的属性,也就是说多端里面应该放置1端的主键,那么学生表里面应该放置班级表里面的主键(该方法比较常用)
  • 方法2:新增一个关系表,用来表示学生与班级的属于关系,该关系表包含字段(学生号,班级号)。通过学生号与班级号的对应关系表示学生属于的班级。

在两张表所对应的java实体类中多的一端中有1的一端的java实体类的对象属性(学生类中有一个班级对象作为成员变量)。

多对多关系


主键设计方式

  • 对于多对多关系,需要转换成1对多关系,那么就需要一张中间表来转换,这张中间表里面需要存放学生表里面的主键和课程表里面的主键,此时学生与中间表是1对多关系,课程与中间表是1对多关系,学生与课程是多对多关系

从用户/角色表分析多对多关系
由三张表来体现, 两张是业务表,中间是关系表,箭头由中间表分别指向两张业务表,中间表由两张业务表的主键作为外键(联合主键),且中间表不能有其他字段,在java实体类中两张业务表分别具有对方业务表的集合属性(用户类中有一个List<角色>集合作为成员变量,角色表中有一个List<用户>集合做为成员变量)

总结

总而言之,最重要的关系就是1对多关系,根据面向对象思想在建表的时候将1端主键置于多端即可。

【数据库】理解一对一、一对多、多对多关系相关推荐

  1. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  2. 数据库一对一 一对多 多对多关系

    参考:https://blog.csdn.net/u013144287/article/details/79024130 自己在项目中写的实例: '实体'和'公理'具有多对多关系,即一个实体可以对应多 ...

  3. 数据库外键:一对多/多对多关系

    数据库事务四大特性ACID: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 基于原子性对存在重复数据的表进行拆分 一对多 ...

  4. 数据库建表-- 一对多/多对一/一对一/多对多 关系

     转自: https://blog.csdn.net/zhongshan_c/article/details/8210196 数据库建表-- 一对多/多对一/一对一/多对多 关系 关联映射:一对多 ...

  5. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  6. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  7. mybatis的一对一 一对多 多对多

    mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...

  8. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...

  9. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  10. Django一对一 ,一对多,多对多

    Django 数据库一对多,多对多 目录 app01/models.py app01/views.py app01/urls.py Python_Django/urls.py 目录 app01/mod ...

最新文章

  1. 指定的网络文件夹目前是以其他用户名和密码进行映射的_使用 GitLab CI 与 Argo CD 进行 GitOps 实践
  2. 架构设计-业务逻辑层简述
  3. boost::fusion::erase_key用法的测试程序
  4. OpenGL 基于PBR的specular textured 镜面纹理的实例
  5. 替换用FTP传到Unix上的文件中的^M字符
  6. java utf-8 gbk_Java 字符转码之UTF-8转为GBK/GB2312
  7. ubuntu不会自动休眠_关机、睡眠、休眠有啥区别?微软说非特殊情况不要关机
  8. QQ 新增“语音进度条”;滴滴顺风车负责人道歉;华为研发费将超 1000 亿美元 | 极客头条...
  9. 你掌握垃圾分类大法了吗?图像分类1分钟轻松解决
  10. 页面性能优化的利器 — Timeline
  11. SpringBoot学习---整合JDBC,Druid,MyBatis
  12. Linux常用工具包安装
  13. 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-9825】-【V4.0 Android-Q-TD1】...
  14. WebView加载淘宝,天猫链接失败
  15. A*算法中二叉堆的使用
  16. 两种方法实现卸载apk应用程序
  17. TabLayout+ViewPager实现tab切换
  18. 面试必备之深入理解自旋锁
  19. google authenticator python_谷歌验证器 Google Authenticator工作原理
  20. ASP.NET+C#+Sql Server数据库0968 校园二手物品交易网站的设计与实现-毕业设计

热门文章

  1. 秀米svg点击显示另一张图_时隔五年再用秀米,我发现了这个超强玩法
  2. 一米村长讲故事机器人_主持人李锐推出“村长讲故事”APP,已入驻喜马拉雅
  3. 基于 smart-config技术实现
  4. MSM8953 Android 9.0 打开uart串口
  5. 文件系统测试工具IOZONE
  6. Python_乌龟和鱼游戏
  7. windows开启远程Wmi服务支持
  8. quarkus数据库篇之二:无需数据库也能运行增删改查(dev模式)
  9. PX4 mixer load
  10. C语言利用switch的简单计算器