五、多表查询-1.多表关系介绍

一、概述

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一

二、一对多

五、多表查询-1.多表关系介绍_第1张图片

三、多对多

五、多表查询-1.多表关系介绍_第2张图片

【演示】

1、准备数据

(1)创建student表(学生表)

五、多表查询-1.多表关系介绍_第3张图片

五、多表查询-1.多表关系介绍_第4张图片 

(2)创建course表(课程表)

 五、多表查询-1.多表关系介绍_第5张图片

 五、多表查询-1.多表关系介绍_第6张图片

(3)创建中间表student_course

五、多表查询-1.多表关系介绍_第7张图片

 五、多表查询-1.多表关系介绍_第8张图片

 2、多表关系可视化

在中间表上右键:

五、多表查询-1.多表关系介绍_第9张图片

可看到多表之间的关系:

五、多表查询-1.多表关系介绍_第10张图片

 四、一对一

五、多表查询-1.多表关系介绍_第11张图片

 【演示】

 1、准备数据

五、多表查询-1.多表关系介绍_第12张图片

五、多表查询-1.多表关系介绍_第13张图片

五、多表查询-1.多表关系介绍_第14张图片

五、多表查询-1.多表关系介绍_第15张图片

 tb_user_edu表中的外键userid,关联的tb_user表中的主键id

 由于userid唯一约束,此时一条记录就对应一个用户的基本信息

【代码】



-- 多表关系演示(多对多)
create table student(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
) comment '学生表';
insert into student
values (null, '黛绮丝', '2000100101'),
       (null, '谢逊',   '2000100102'),
       (null, '殷天正', '2000100103'),
       (null, '韦一笑', '2000100104');

create table course(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
) comment '课程表';
insert into course
values (null, 'Java'),
       (null, 'PHP'),
       (null, 'MySQL'),
       (null, 'Hadoop');

create table student_course(
    id int auto_increment comment '主键' primary key ,
    studentid int not null comment '学生ID',
    courseid int not null comment '课程ID',
    constraint fk_courseid foreign key (courseid) references course(id),

    constraint fk_studentid foreign key (studentid) references student(id)
) comment '学生课程中间表';
insert into student_course
values (null, 1, 1),
       (null, 1, 2),
       (null, 1, 3),
       (null, 2, 2),
       (null, 2, 3),
       (null, 3, 4);

-- 一对一
create table tb_user(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    age int comment '年龄',
    gender char(1) comment '1:男, 2:女',
    phone char(11) comment '手机号'
) comment '用户基本信息表';

create table tb_user_edu(
    id int auto_increment primary key comment '主键ID',
    degree varchar(20) comment '学历',
    major varchar(50) comment '专业',
    primaryschool varchar(50) comment '小学',
    middleschool varchar(50) comment '中学',
    university varchar(50) comment '大学',
    userid int unique comment '用户ID',
    constraint fk_userid foreign key (userid) references tb_user(id)
) comment '用户教育信息表';

insert into tb_user(id, name, age, gender, phone)
values (null, '黄渤', 45, '1', '18800001111'),
       (null, '冰冰', 35, '2', '18800002222'),
       (null, '码云', 55, '1', '18800008888'),
       (null, '燕红', 50, '1', '18800009999');

insert into tb_user_edu(id ,degree, major, primaryschool, middleschool, university, userid)
values (null, '本科', '舞蹈', '静安区第一小学', '静安区第一中学', '北京舞蹈学院', 1),
       (null, '硕士', '表演', '朝阳区第一小学', '朝阳区第一中学', '北京电影学院', 2),
       (null, '本科', '英语', '杭州市第一小学', '杭州市第一中学', '杭州师范大学', 3),
       (null, '本科', '数学', '阳泉区第一小学', '阳泉区第一中学', '清华大学', 4);

你可能感兴趣的:(MySQL,数据库)