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 ...
随机推荐
- fiddler接口知识
1. 访问接口时经常会出现乱码的情况,需要fiddler解码操作 2.域名过滤
- ubuntu 配置php环境
第一步:先更新 sudo apt-get update 第二步:安装 安装 Apache2: sudo apt-get install apache2 安装PHP模块: sudo apt-get in ...
- matplotlib系列——线的属性
幕布视图:https://mubu.com/doc/alG8r_3iSw 参考文献:嵩天的Python课程讲义 示例(更多示例:matplotlib系列——折线图) 效果 颜色 线的风格 标记类型 ...
- Python之字符串转换为日期、结合时区的日期操作
一.字符串转换为日期 方法一 s = '2019-01-20' print(datetime.strptime(s, '%Y-%m-%d')) # 2019-01-20 00:00:00 方法二 de ...
- Vue.js 3 Step 创建一个组件
Step1:Vue.extend()创建组件 Step2:Vue.component()注册组件,注册的标签一定要用小写 Step3:挂载点使用组件 <!doctype html> < ...
- LeetCode Array Easy 283. Move Zeroes
Description Given an array nums, write a function to move all 0's to the end of it while maintaining ...
- mybatis 自定义查询语句
通过mybatis插件生成的mapper文件只有基本的增.删.改.查.汇总.但是实际使用场景中,总是有各种需要连表.汇总.分组查询的需求,那我们一般都通过自定义查询语句去实现. 有时候会有表结构更改的 ...
- egg 连接mysql 在mysql 插入数据
1.配置mysql exports.mysql = { enable: true, package: 'egg-mysql' }; 'use strict'; module.exports = app ...
- Python中yaml和json文件的读取和应用
Python对yaml和json文件的读取: yaml文件读取: 首先创建一个yaml文件test.yaml import yaml #引入包 f=open(path) #建立Python的文件 ...
- MySQL UNSIGNED
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484087.html UNSIGNED属性就是将数字类型无符号化,与C.C++这些程序语言中的uns ...