一对一

Ø  一对一是将数据表“垂直切分”,其实是不常见,或不常用的。也就是 A 表的一条记录对应 B 表的一条记录,为什么要这样的设计呢,不是增加了程度的复杂性吗,然而并不一定,举例说明:

1)   一个系统必然有 Employee(员工表)(包含字段:EmployeeId、姓名、性别、年龄、电话、地址等),每个员工都为一个用户,所以还有张User 表(包含字段:UserId(关联 EmployeeId)、用户名、密码、角色等),这样你会发现,整合为一张表是否不太妥当?因为,User 的记录只会在登录时用到,感觉有点违背三大范式中的“确保每列都和主键列直接关联,而不是间接关联”。

2)   还有种情况,这就要根据具体的业务来决定了。如果,当一张表的字段过于太多,而很多字段可能只有在某些情况下,才会使用到,这时也可以考虑使用一对一设计。

Ø  优点

1.   便于管理、可提高一定的查询速度

2.   减轻 CPU 的 IO 读写,提高存取效率。

3.   符合数据库设计的三大范式。

4.   符合关系性数据库的特性。

Ø  缺点

1.   增加一定的复杂程度,程序中的读写难度加大。

一对多

Ø  一对多,是最常见的一种设计。就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键。这主要看以哪张表为中心,以上示例以A 表为中心,就是一对多,如果以 B 表为中心,则是多对一。举几个例子:

1.   班级表 与 学生表,一个班级对应多个学生,或者多个学生对应一个班级。

2.   角色表 与 用户表,一个角色对应多个用户,或者多个用户对应一个角色。

3.   商品表 与 图片表,一个商品对应多张图片,或者多张图片对应一个商品。

多对多关系,需要创建一个表,表中需要两个字段,分别是引用,两个多对多字段主键的外键。
     例如:
学生表(学号,姓名,…………)主键:学号
课程表(课程号,课程名,…………)主键:课程号
一个学生能选多门课,一个课可以由多个学生选,即是多对多关系,
那么成绩表就是它们之间关系的体,
即引用成绩表(学号,课程号,成绩)。这里学号和课程号,分别是学生表和课程表中学号和课程号的外键

mysql表的一对一/一对多/多对多联系

1.数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。

2.通过表的关系,来帮助我们怎样建表,建几张表。

一对一
一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然。

学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人
其中姓名、性别、年龄、身高,体重属于常用数据,但是籍贯、住址和联系人为不常用数据
如果每次查询都是查询所有数据,不常用的数据就会影响效率,实际又不用
常用信息表:ID(P),姓名,性别,年龄,身高,体重
不常用信息表:ID(P),籍贯,家庭住址,紧急联系人

解决方案:将常用的和不常用的信息分享存储,分成两张表
不常用信息表和常用信息表,保证不常用信息表与常用信息表能够对应上:找一个具有唯一性的字段来共同连接两张表。
一个常用表中的一条记录永远只能在一张不常用表中匹配一条记录,反之亦然。
一对多
一张表中有一条记录可以对应另外一张表中的多条记录;但是反过来,另外一张表的一条记录只能对应第一张表的一条记录,这种关系就是一对多或多对一。

母亲与孩子的关系:母亲,孩子两个实体
母亲表:M_ID(P),名字,年龄,性别
孩子表:C_ID(P),名字,年龄,性别
以上关系:一个妈妈可以在孩子表中找到多条记录(也可能是一条),但是一个孩子只能找到一个妈妈,是一种典型的一对多的关系。
但是以上设计:解决了实体的设计表问题,但是没有解决关系问题,孩子找不到母亲,母亲也找不到孩子

解决方案:在某一张表中增加一个字段,能够找到另外一张表中的记录:在孩子表中增加一个字段指向母亲表,因为孩子表的记录只能匹配到一条母亲表的记录。
母亲表:M_ID(P),名字,年龄,性别
孩子表:C_ID(P),名字,年龄,性别,母亲表ID(母亲表主键,孩子表外键)
多对多
一对表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录也能对应A表中的多条记录

老师和学生
老师表 T_ID(P),姓名,性别
学生表 S_ID(P),姓名,性别
以上设计方案:实现了实体的设计,但是没有维护实体的关系
一个老师教过多个学生,一个学生也被多个老师教过

解决方案:增加一张中间关系表
老师与学生的关系表:ID(P),T_ID,S_ID 
老师表与中间表形成一对多的关系,而中间表是多表;维护了能够唯一找到一表的关系;
同样的学生表与中间表也是一个一对多的关系; 
学生找老师:找出学生ID--->中间表寻找匹配记录(多条)--->老师表匹配(一条)
老师找学生:找出老师ID--->中间表寻找匹配记录(多条)--->学生表匹配(一条)

数据表对应关系(一对一、一对多、多对多)相关推荐

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

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

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

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

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

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

  4. mybatis的一对一 一对多 多对多

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

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

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

  6. JPA 一对一 一对多 多对一 多对多配置

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

  7. Django一对一 ,一对多,多对多

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

  8. 【九,MySQL】基础篇--多表查询(多表关系:一对多/多对一,多对多,一对一)

    一,多表关系 1,一对多(多对一) 2,多对多 # =====================================================多对多================== ...

  9. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

  10. ef mysql 外键 一对一_MySQL 外键 一对一 一对多 多对多 复制

    #外键 ## 1,学习外键首先要明白表与表之间的关系 ​ 首先要换位思考 在考虑了这边 还要考虑另一边 ​ 然后在下定论### 判断表关系的语法 #### 图书与出版社 ​ 一本书可不可以有多个出版社 ...

最新文章

  1. 用EnableMenuItem不能使菜单变灰的原因
  2. Java并发编程:线程池
  3. C#在异常中获取HttpStatusCode用法
  4. Java 线上问题排查神器 Arthas 快速上手与原理浅谈
  5. 计算机专业都学什么科,大学本科计算机专业都有什么科目?
  6. Hashtable的测试
  7. Directx11教程39 纹理映射(9)
  8. Pytorch---训练与测试时爆显存(out of memory)的一个解决方案(torch.cuda.empty_cache())
  9. D/E盘根目录出现Msdia80.dll操作;dllregisterserver调用失败错误代码0x80004005 解决
  10. opa847方波放大电路_用运算放大器获得三角波、正弦波、方波的简易实用电路
  11. OpenWrt 安装中文语言包
  12. 二极管的三种击穿形式
  13. NR基础篇上——均值滤波、高斯滤波、双边滤波、NLM
  14. 软件工程 -- 系统流程图
  15. win32api之虚拟键盘
  16. CC3200 Debug时报错:Unable to launch CCS debug-session based on current selection.的解决方法
  17. JAVA商城源码-B2B2C商城系统-独立部署,一套源码终身可用
  18. 合肥工业大学——java(最新版)——第一次作业
  19. Python爬虫爬取图片
  20. python韩信点兵

热门文章

  1. 苹果手机计算机科学,手机科学计算器app_计算器软件应用推荐_iPhone_苹果ios_安卓...
  2. LGTM,XGBOOST,LIGHTGBM
  3. win10主机ping不通win10虚拟机
  4. Axure中SVG矢量图标的使用方法及资源推荐
  5. 智能车学习(2)—— 舵机、电机
  6. 宝利通视频会议常见故障
  7. MPS柔性生产线加工实训系统QY-JDYT34
  8. 传感器技术-电容式传感器(学习笔记六)
  9. 句法结构分析:基于PCFG的基本分析方法
  10. 《尚书》全文、注释及译文(2)