MySQL 多表关系(多表查询 一)

多表关系描述

MySQL是一种关系型数据库管理系统,它支持多表关系,这在数据库设计和查询中非常重要。

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

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

一对一(1-1)

关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另
一张表中,以提升操作效率
实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

案例:用户(表) 与 用户详情(表)的关系。

每个用户只能对应一个详情信息,每个详情情信息只能对应一个用户( user_detail表 外键 指向 user表 主键)

-- 创建用户表
CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  -- 其他用户表字段...
);

-- 创建用户详情表
CREATE TABLE user_details (
  id INT PRIMARY KEY,
  user_id INT UNIQUE,
  card_number VARCHAR(20),
  -- 其他用户详情表字段...
);

-- 添加一对一关系的外键约束
alter table user_details 
add constraint fk_user_id
foreign key (user_id) references users(id);

一对多(1-N或N-1)

关系:一个表中的记录可以关联到另一个表中的多个记录

实现: 在多的一方建立外键,指向一的一方的主键

案例:部门表和员工表的关系。

一个部门可以有多个员工,而一个员工只能属于一个部门(emp表 外键 指向 dept表 主键)

-- 创建部门表
CREATE TABLE departments (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  -- 其他部门表字段...
);

-- 创建员工表
CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  department_id INT,
  -- 其他员工表字段...
);

-- 添加一对多关系的外键约束
alter table employees
add constraint fk_department_id
foreign key (department_id) references departments(id);

多对多(N-N)

关系:一个表的记录可以关联到另一个表的多个记录,反之亦然

实现:在MySQL中,无法直接实现多对多关系,需要通过中间表来实现。建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

案例:学生表和课程表的关系。

一个学生可以选择多门课程,而一门课程也可以被多个学生选择。为了建立多对多关系,可以创建一个名为"选课"(student_course)的中间表,它包含学生ID和课程ID两个字段,用于记录学生和课程的关联关系。

-- 创建中间表、建立多对多关系(两个外键)
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_course_id foreign key (course_id) references course (id),
    constraint fk_student_id foreign key (student_id) references student (id)
)comment '选课表';

上一篇:MySQL - 外键(foreign key)约束的作用和使用

下一篇:MySQL 连接查询(多表查询 二)

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