关系

将实体与实体的关系,反应到最终数据库表的设计中来。将关系分为三种:一对一,一对多(多对一)和多对多。
所有的关系都是指的是表与表之间的关系。

一对一

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

学生表:姓名,性别,年龄,身高,体重,婚姻状况,籍贯,家庭住址,紧急联系人

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中的关系的更多相关文章

  1. mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决

    ※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE var ...

  2. mysql中主外键关系

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...

  3. mysql|中主外键关系(转)

    http://my.oschina.net/liting/blog/356150 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标 ...

  4. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  5. MySQL中的连接、实例、会话、数据库、线程之间的关系

    MySQL中的实例.数据库关系简介 1.MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号 ...

  6. mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci的关系

    mysql中的utf8mb4.utf8mb4_unicode_ci.utf8mb4_general_ci的关系 一.总结 一句话总结: utf8mb4是utf8的超集并完全兼容utf8,能够用四个字节 ...

  7. MySQL中redo log、undo log、binlog关系以及区别

    MySQL中redo log.undo log.binlog关系以及区别 本文转载自:MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结 ...

  8. mysql中的实例、数据库关系简介

    MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workben ...

  9. mysql中数据库database、实例instance、会话session的关系

    1. No suitable driver found for http://127.0.0.1:3306/test jdbc_url错误,jdbc走自己的协议. 正确的路径应该是:jdbc:mysq ...

随机推荐

  1. (转)微信调用扫码和支付功能是都报错 the permission value is offline verifying

    原文地址:https://blog.csdn.net/qq_34794885/article/details/98504970

  2. 利用Graphziv帮助理解复杂的类层次关系

    最近在学习osg三维视景仿真平台,学习的过程中涉及到许多的类与类之间的继承和包含关系.在复杂点的例子中,许多的类和节点组合在一起,很容易让人迷失方向.在编译源代码的时候,无意间发现了Graphviz这 ...

  3. Django 登录验证码

    url.py: url(r'^verifycode/$',views.verifycode), url(r'^verifycodefile/$',views.verifycodefile), url( ...

  4. Cocos2d Box2D之简介

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. Box2D是一个用于模拟2D刚体物体的C++引擎.Box2D集成了大量的物理力学和运动学的计算,并将物理模拟过程封装到类对象中,将对物体的 ...

  5. 一些关于SEO优化的笔记

    高级搜索指令: 双引号:“xxx” 代表完全匹配的搜索 减号:-(减号前面必须是空格,后面必须没有空格)代表搜索不包含减号后面的词的页面 filetype:用于搜索特定文件格式(百度支持的文件类型:P ...

  6. js数据处理-----数据拷贝

    一.理解深拷贝与浅拷贝 如下代码,把 a  的值赋给  b ,修改 b 的值会直接修改到  a 的值,这叫浅拷贝.(其实他们修改的是同一个对象) var a = [1,2,3,4,5]; var b ...

  7. Yii 1.1 cookie删不掉

    我的cookie是这样设置的: $cookie = new CHttpCookie('username','Jack'); $cookie->expire = time()+60*60*24*3 ...

  8. 开源图标字体 uiw-iconfont v1.2.6 发布,新增图标

    uiw-iconfont v1.2.6 已发布,uiw-iconfont 是从 uiw 组件库抽离出来的图标字体,基于 svg 图片生成的图标字体. 更新内容 新增 map android-o das ...

  9. Java中 Map用法

    public static Map GetGoodTypes() { Map goodTypes=new HashMap(); goodTypes.put(1,"原材料"); go ...

  10. Codeforces 1178E

    题意:给你一个长度为n的字符串,只包含a, b, c3种字符,字符串中相邻字符一定不同,问是否存在一个长度为n / 2(向下取整)的子序列是回文的,有就输出. 思路:相邻的字符一定不同,并且一共只有3 ...