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

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

  1. 一对一
  2. 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然。
  3.  
  4. 学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人
  5. 其中姓名、性别、年龄、身高,体重属于常用数据,但是籍贯、住址和联系人为不常用数据
  6. 如果每次查询都是查询所有数据,不常用的数据就会影响效率,实际又不用
  7. 常用信息表:ID(P),姓名,性别,年龄,身高,体重
  8. 不常用信息表:ID(P),籍贯,家庭住址,紧急联系人
  9.  
  10. 解决方案:将常用的和不常用的信息分享存储,分成两张表
  11. 不常用信息表和常用信息表,保证不常用信息表与常用信息表能够对应上:找一个具有唯一性的
  12. 字段来共同连接两张表。
  13. 一个常用表中的一条记录永远只能在一张不常用表中匹配一条记录,反之亦然。
  1. 一对多
  2. 一张表中有一条记录可以对应另外一张表中的多条记录;但是反过来,另外一张表的一条记录
  3. 只能对应第一张表的一条记录,这种关系就是一对多或多对一
  4. 母亲与孩子的关系:母亲,孩子两个实体
  5. 母亲表:ID(P),名字,年龄,性别
  6. 孩子表:ID(P),名字,年龄,性别
  7. 以上关系:一个妈妈可以在孩子表中找到多条记录(也可能是一条),但是一个孩子只能找到一个妈妈
  8. 是一种典型的一对多的关系。
  9. 但是以上设计:解决了实体的设计表问题,但是没有解决关系问题,孩子找不到母亲,母亲也找不到孩子
  10.  
  11. 解决方案:在某一张表中增加一个字段,能够找到另外一张表中的记录:在孩子表中增加一个字段
  12. 指向母亲表,因为孩子表的记录只能匹配到一条母亲表的记录。
  13. 母亲表:ID(P),名字,年龄,性别
  14. 孩子表:ID(P),名字,年龄,性别,母亲表ID(母亲表主键)
  1. 多对多
  2. 一对表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录
  3. 也能对应A表中的多条记录
  4.  
  5. 老师和学生
  6. 老师表 T_ID(P),姓名,性别
  7. 学生表 S_ID(P),姓名,性别
  8. 以上设计方案:实现了实体的设计,但是没有维护实体的关系
  9. 一个老师教过多个学生,一个学生也被多个老师教过
  10.  
  11. 解决方案:增加一张中间关系表
  12. 老师与学生的关系表:ID(P),T_ID,S_ID
  13. 老师表与中间表形成一对多的关系,而中间表是多表;维护了能够唯一找到一表的关系;
  14. 同样的学生表与中间表也是一个一对多的关系;
  15. 学生找老师:找出学生ID--->中间表寻找匹配记录(多条)--->老师表匹配(一条)
  16. 老师找学生:找出老师ID--->中间表寻找匹配记录(多条)--->学生表匹配(一条)

mysql表的一对一/一对多/多对多联系的更多相关文章

  1. Mysql基础(八):MySQL 表的一对一、一对多、多对多问题

    将实体与实体的关系,反应到最终数据库表的设计上,将关系分为三种:一对一,一对多(多对一)和多对多,所有的关系都是表与表之间的关系; 一对一 一对一:一张表的一条记录只能与另外一条记录进行对应,反之亦然 ...

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

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

  3. Mysql表的约束设计和关联关系设计

    https://blog.csdn.net/u012750578/article/details/15026677 Mysql表的约束设计和关联关系设计 ======================表 ...

  4. Django之集合函数使用与mysql表的创建特殊字段分析

    1. 集合函数的使用场景: -- 单独使用: 不分组, 只查聚合结果 -- 分组使用: 按字段分组, 可查询分组字段与聚合结果 2. 导入聚合函数 from django.db.models impo ...

  5. mytabits表关联一对一(多对一?)

    mytabits表关联一对一(多对一?) association联合 联合元素用来处理“一对一”的关系.需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别).对 ...

  6. MySQL表完整性约束

    =======MySQL表完整性约束====== 目录: 一.介绍 二.not null 与 default 三.unique 四.primary key 五.auto_increment 六.for ...

  7. Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询

    一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增  create publish_id 传数字   (publish_id是数据库显示的字段名 ...

  8. JPA 一对一 一对多 多对一 多对多配置

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

  9. MySQL 表之间的关系

    表之间的关系 # 定义一张部门员工表 emp id name gander dep_name dep_desc 1 ming male 教学部 教书 2 lilei male 教学部 教书 3 ham ...

随机推荐

  1. Scrapy源码学习(一)

    用Scrapy已经有一段时间了,觉得该是看一下源码的时候了.最开始用的时候还是0.16的版本,现在稳定版已经到了0.18.结合使用Scrapy的过程,先从Scrapy的命令行看起. 一.准备 下载源代 ...

  2. robots.txt文件配置和使用方法详解

    robots.txt文件,提起这个概念,可能不少站长还很陌生:什么是robots.txt文件?robots.txt文件有什么作用?如何配置robots.txt文件?如何正确使用robots.txt文件 ...

  3. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化

    一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

  4. Windows 8.1 (64bit) 下搭建 Scrapy 0.22 环境

    我的Windows 8.1 环境 1.下载安装Python 2.7.6 在Python官方网站中下载Python2.7.6的Windows安装包,根据默认配置安装到C:\Python27目录. 安装完 ...

  5. iblog语法高亮示例

    -------------------------------------------------------------------------------------- iblog 是一款 Sub ...

  6. VS2010调试入门指南

    1 导言 在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间.通常,debug是指发现缺 ...

  7. 2016 医疗项目 Bootstrap 自适应页面布局(1)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. oracle 自定义函数

    函数和存储过程类似,可以简单的理解为一段可以执行某个活动/动作的子程序,可以作为一个系统对象被存储在数据库中,可以重复调用.与存储过程不同的是,函数总是向调用者返回一个值,而存储过程不能有返回值. C ...

  9. vs2008调试提示:未安装Silverlight托管调试包

    换个启动浏览器,解决了. 右击项目,选择“属性”,选择"web";启动操作设置“启动外部程序”,填入浏览器exe的路径. 命令行参数填入地址.即可.

  10. angular入门系列教程4

    主题: 本篇主要目的就是继续完善home页下的index子页面的内容,处理一个列表,进行增删改查过滤等操作. 效果图: 细节: 主要的更改有两个,一个是修改模板index.html,还有就是增加控制器 ...