MySQL中的关系
关系
将实体与实体的关系,反应到最终数据库表的设计中来。将关系分为三种:一对一,一对多(多对一)和多对多。
所有的关系都是指的是表与表之间的关系。
一对一
一张表中的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然。
学生表:姓名,性别,年龄,身高,体重,婚姻状况,籍贯,家庭住址,紧急联系人
id | 姓名 | 性别 | 年龄 | 身高 | 体重 | 婚姻 | 体重 | 籍贯 | 家庭住址 | 紧急联系人 |
---|
表设计成以上这种形式,符合要求,其中姓名,性别,年龄,身高,体重属于
解决方案:将常用的和不常用的信息分离存储,分成两张表。常用数据,但是婚姻,籍贯,住址和联系人属于不常用数据,如果每次查询都是查询所有数据,不常用数据就会影响效率,实际又不用。
常用信息表
id | 姓名 | 性别 | 年龄 | 身高 | 体重 |
---|
不常用信息表:保证不常用信息与常用信息一定能够对应上:找一个具有唯一性的字段来共同连接两张表。
id | 婚姻 | 体重 | 籍贯 | 家庭住址 | 紧急联系人 |
---|
一个常用表中的一条记录,只能在一张不常用表中匹配一条记录。反之亦然。
一对多
一张表中有一条记录可以对应另一张表中的多条记录,但是反之,另外一张表的一条记录只能对应另一张表的一条记录。这种关系就是一对多或者多对一
母亲与孩子的关系
妈妈表:
id | 名字 | 年龄 |
---|
孩子表:
id | 名字 | 年龄 |
---|
以上关系:一个妈妈可以在孩子表中找到多条记录,但是一个孩子表只能找到一个妈妈。是一种典型的一对多的关系
以上设计:解决了实体的实际表问题,但是没有解决关系问题:孩子找不到妈妈,妈妈也找不到孩子。
解决方案:在一张表中增加一个字段,能够找到另一张表的记录。应该在孩子表中增加一个字段指向妈妈表:因为孩子表的记录只能匹配到一条妈妈表的记录。
id | 名字 | 年龄 |
---|
孩子表:
id | 名字 | 年龄 | 妈妈 id |
---|
多对多
一张表中一个记录能够对应另外一张表中的多条记录,反之亦然。
老师教学:老师和学生
老师表:
T_id | 姓名 | 性别 |
---|
学生表:
S_id | 姓名 | 性别 |
---|
以上设计方案L实现了实体的设计,但是没有维护实体的关系。
解决方案:不管在哪张表中增加字段,都会出现一个问题:该字段要保存多个数据,而且是与其它表有关系的字段,不符合表设计规范。增加一张新表,专门维护两张表之间的关系
老师表:
T_id | 姓名 | 性别 |
---|
学生表:
S_id | 姓名 | 性别 |
---|
中间关系表
id | T_ID | S_ID |
---|
学生找老师:找出学生id –> 中间表寻找匹配记录 –> 老师表匹配
老师找学生:找出老师id –> 重甲表寻找匹配记录 –> 学生表匹配
MySQL中的关系的更多相关文章
- mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决
※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE var ...
- mysql中主外键关系
一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...
- mysql|中主外键关系(转)
http://my.oschina.net/liting/blog/356150 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- MySQL中的连接、实例、会话、数据库、线程之间的关系
MySQL中的实例.数据库关系简介 1.MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号 ...
- mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci的关系
mysql中的utf8mb4.utf8mb4_unicode_ci.utf8mb4_general_ci的关系 一.总结 一句话总结: utf8mb4是utf8的超集并完全兼容utf8,能够用四个字节 ...
- MySQL中redo log、undo log、binlog关系以及区别
MySQL中redo log.undo log.binlog关系以及区别 本文转载自:MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结 ...
- mysql中的实例、数据库关系简介
MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workben ...
- mysql中数据库database、实例instance、会话session的关系
1. No suitable driver found for http://127.0.0.1:3306/test jdbc_url错误,jdbc走自己的协议. 正确的路径应该是:jdbc:mysq ...
随机推荐
- docker使用记录二:mysql安装与配置
docker 安装mysql 和挂载 仓库位置: https://hub.docker.com/_/mysql/ 安装的同时挂载data资料卷和config 配置的资料卷刀磁盘上 docker run ...
- Cocos2d-x之物理引擎
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 在很多的游戏设计中一般都会涉及和模拟到真实的物理世界.然而游戏中模拟真实世界的物理会很复杂.使用已经写好的物理引擎会用很大的帮助和便利. ...
- 洛谷 P1119 灾后重建——dijstra
先上一波题目 https://www.luogu.org/problem/P1119 这道题我们可以将询问按时间排序 然后随着询问将相应已经重建成功的点进行操作 每次更新一个点就以他为起点跑一遍dij ...
- List集合--Vector子类
Vector子类 Vector是一个原始古老的程序类,这个类是在JDK1.0的时候就提供的,而后到了JDK1.2的时候,由于有一部分开发者已经习惯于使用Vector,并且许多的系统类也是基于Vecto ...
- qt ui界面控件布局设计
1.布局控件简介: 水平布局,里面的控件将水平展示,布局器里面的控件大小若没有固定,其大小将随着布局的大小而自动拉伸.可以通过设置其左(layoutLeftMargin).上(layoutTopMar ...
- VMware Converter Standalone迁移概要
VMware Converter 迁移工具使用:1.基本概念 1.1基本组件: converter standalone server:包含server和worker两个服务,这两个服务经常一起安装 ...
- vue 如何读取编译携带的参数
vue 环境有很多套,我们需要根据不同环境设置不同的一些参数,如何不装任何依赖的情况下获取参数 下面是我制作官网,需要根据开发还是生产环境配置不同CDN,用vue-cli2+webpack,配置是再: ...
- SessionFactory是线程安全的吗?Session是线程安全的吗?两个线程能共享一个Session吗?
(1)SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问.SessionFactory一般只会在启动的时候构建.对于应用程序,最好将Sess ...
- Java集合框架是什么?说出一些集合框架的优点?
每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array. 随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在 ...
- 【QT学习】数独游戏
前几天刷leetcode刷到一题,讲sudokuSolver,写完感觉很有意思,遂想做一个数独游戏,百度了一下如何自动生成题库,参考某位大神安卓下的实现思路,自己做了一套文字版的数独游戏,后来想乘机会 ...