前言

数据库的设计
首先需要我们了解表与表之间的关系,其次是掌握设计库的规范。今天学习的是数据库中表与表之间的关系,一对一,一对多(多对一),多对多。

一、多表之间的关系

概念:现实生活中,实体与实体之间肯定是有关系的,比如:部门和员工,老师和学生等;那么我们在设计表的时候,就应该体现出表与表之间的这种关系。

表与表之间有哪些关系呢?

一对一:使用较少;如:一个人只有一个身份证
一对多:最常用的关系;如:部门和员工
多对多:学生选课表和学生表, 一门课程可以有多个学生选择,一个学生选择多门课程

1、一对一 1:1

在实际的开发中应用不多,因为一对一可以创建成一张表。
实现原则:可以在任意一方添加唯一(unique)外键指向另一方的主键。

2、一对多(多对一)1:N

实现原则: 在从表(N对应的表)创建一个字段作为外键,指向主表(1对应的表)的主键

3、多对多 M:N

实现原则:需要创建第三张表作为中间表,中间表中至少两个字段,这两个字段分别作为外键分别指向两个表的主键。

举个例子:
我们出去旅游,去旅游网站查看有很多的旅游分类、旅游线路以及用户去订购喜欢的方案

用一张图来分析他们三者之间的关系,如下:


根据上图来设计表就简单很多啦~
(1)首先设计一张分类表:

CREATE TABLE tab_category (cid INT PRIMARY KEY AUTO_INCREMENT,-- cid 旅游线路分类主键,自动增长cname VARCHAR(100) NOT NULL UNIQUE-- cname 旅游线路分类名称非空,唯一,字符串 100
);

(2)设计一张线路表,因为分类表与线路表是1:N的关系,所以在多的那个表中需要增加一个外键

CREATE TABLE tab_route(rid INT PRIMARY KEY AUTO_INCREMENT,-- rid 旅游线路主键,自动增长rname VARCHAR(100) NOT NULL UNIQUE,-- rname 旅游线路名称非空,唯一,字符串 100price DOUBLE,-- price 价格rdate DATE,-- rdate 上架时间,日期类型cid INT,-- cid 外键,所属分类FOREIGN KEY (cid) REFERENCES tab_category(cid)
);

(3)设计用户表

CREATE TABLE tab_user (
uid INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(100) UNIQUE NOT NULL,PASSWORD VARCHAR(30) NOT NULL,NAME VARCHAR(100),birthday DATE,sex CHAR(1) DEFAULT '男',telephone VARCHAR(11),email VARCHAR(100)
);

(4)中间表,因为线路表和用户表之间是M:N的关系,所以需要一个中间表

CREATE TABLE tab_favorite (rid INT, -- 线路idDATE DATETIME,uid INT, -- 用户id-- 创建复合主键PRIMARY KEY(rid,uid), -- 联合主键FOREIGN KEY (rid) REFERENCES tab_route(rid),-- 外键FOREIGN KEY(uid) REFERENCES tab_user(uid)--外键
);

注意:多对多关系,中间表中还运用到了联合主键

Day04 数据库设计01 ~多表之间的关系(一对一,一对多,多对多)相关推荐

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

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

  2. java day27【DQL:查询语句、约束 、多表之间的关系 、范式 、数据库的备份和还原】...

    第一章  DQL:查询语句 1. 排序查询 * 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2... * 排序方式: * ASC:升序,默认的. ...

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

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

  4. MySQL总结(八)数据库表与表之间的关系-详解

    精选30+云产品,助力企业轻松上云!>>> 表与表之间的关系 1.表关系的概念 在现实生活中,实体与实体之间肯定是有关系的.比如:员工和部门,老师和学生等.那么我们在设计表的时候,就 ...

  5. mysql创建三个表相互关联_mysql – 在三个表之间创建关系

    What I've thought about here is using the ID from the junction table 'pricelist_products' as a forei ...

  6. mysql之表与表之间的关系

    目录 表与表之间的关系 数据库的三范式 练习题 查询学习课程"python"比课程 "java" 成绩高的学生的学号;  查询平均成绩大于65分的同学的姓名和平 ...

  7. mysql表一对多关系,mysql表与表之间的关系(多对多,一对多)

    #创建数据库 CREATE DATABASE day15; #使用 USE day15; #创建表 CREATE TABLE test1( id INT PRIMARY KEY AUTO_INCREM ...

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

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

  9. 第三天,编码设置,主键设置与删除,无关子查询,相关子查询,表与表之间的关系...

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

最新文章

  1. python背景虚化
  2. 二叉树的先序线索化、中序线索化、后序线索化的对比
  3. 【Leetcode】EASY题解....ing python
  4. 12行代码AC_Leecode 495. 提莫攻击——Leecode每日一题系列
  5. python内存的回收机制_简单介绍python的垃圾回收机制
  6. pycharm无法识别css,PyCharm中HTML页面CSS class名称自动完成功能失效的问题
  7. 在.NET Core中使用DispatchProxy“实现”非公开的接口
  8. pdf无法启动因计算机丢失,解决打开 PDF 文件时出现的文档损坏错误
  9. iphone怎样关闭副屏_小米新设计专利曝光:“Z”型折叠屏手机
  10. Java PipedInputStream available()方法与示例
  11. 字典dictionary
  12. 《统计学习方法》代码全解析——第二部分 感知机
  13. (分治)7617:输出前k大的数
  14. mysql集合查询的命令_MySQL数据库常用命令集合
  15. java开发个人项目_个人项目-WC (java实现)
  16. 时序动作检测SSAD《Single Shot Temporal Action Detection》
  17. python对数正态分布函数_将对数正态分布的拟合PDF缩放到python中的histrogram
  18. unity IK初步应用 让游戏物体眼镜对准摄像头
  19. java ide的配置(idea)
  20. 神奇的算法(一):欧几里德算法

热门文章

  1. Homebrew安装及换源
  2. 国家注册审核员实习找机构闭坑指南
  3. python画卡通_Python——turtle绘制动漫形象(魔法少女小圆晓美焰,super beautiful)...
  4. python怎样定义数组_python中定义数组的正确方法
  5. 【神奇bug】“金”、“⾦”不是同一个字
  6. WIndows安装vim
  7. 【像黑客一样写博客之九】微博访客
  8. Centos下载和安装教程
  9. 电脑文档数据恢复?别急,一招教你快速找回丢失数据!
  10. 微信小程序使用云函数进行RSA进行加密解密