当前位置: 首页 > news >正文

菜鸟之路day31一一MySQL之多表设计

菜鸟之路day31一一MySQL之多表设计

作者:blue

时间:2025.5.9

文章目录

  • 菜鸟之路day31一一MySQL之多表设计
    • 0.概述
    • 一.多表设计
      • 1.1一对多
      • 1.2一对一
      • 1.3多对多

0.概述

内容学习自黑马程序员BV1m84y1w7Tb

一.多表设计

1.1一对多

一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键

例子:一个部门对应多个员工,设计部门表如下

-- 部门
create table tb_dept (id int unsigned primary key auto_increment comment 'ID',name varchar(10) not null unique comment '部门名称',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '部门表';

为员工表新添加‘部门ID’字段,关联部门表

alter table tb_empadd dept_id int unsigned null comment '部门ID';

注意这样简单的添加两张表之间的联系,只是在逻辑层面添加了两张表的联系

在数据库层面并没有物理层面上的联系

我们可以通过添加外键的方式为两张表添加物理层面上的联系,使两张表是存在实际关联的

在这里插入图片描述

在平时开发过程中,更常使用的是逻辑外键

在这里插入图片描述

1.2一对一

案例:用户与身份证信息的关系

关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率

实现:在任意一方加入外键,惯量另一方的主键,并且设置外键为唯一的(UNIQUE)

示例:

-- 创建学生表
CREATE TABLE students (student_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT,gender INT,email VARCHAR(100) UNIQUE
);-- 创建学生证表,与学生表一对一关系
CREATE TABLE student_identities (identity_id INT PRIMARY KEY AUTO_INCREMENT,student_id INT UNIQUE,identity_number VARCHAR(20) UNIQUE NOT NULL,issue_date DATE NOT NULL,expiry_date DATE NOT NULL,FOREIGN KEY (student_id) REFERENCES students(student_id)
);

在这里插入图片描述

1.3多对多

案例:学生与课程的关系

关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

示例:

学生选课表,他与学生表之间是多对多的关系,即一个学生可以选择多门课程,一个课程可以被多个学生选择,为了符合这种多对多的关系,我决定建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

-- 创建课程表
CREATE TABLE courses (course_id INT PRIMARY KEY AUTO_INCREMENT,course_name VARCHAR(100) NOT NULL,teacher VARCHAR(50),credit TINYINT
);-- 创建选课关系表(中间表)
CREATE TABLE student_courses (id INT PRIMARY KEY AUTO_INCREMENT,student_id INT NOT NULL,course_id INT NOT NULL,FOREIGN KEY (student_id) REFERENCES students(student_id),FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

在这里插入图片描述

案例:

分类表

create table category
(id          int unsigned auto_increment comment '主键ID'primary key,name        varchar(20)                null comment '分类名称',type        tinyint unsigned           null comment '分类类型 1.菜品分类,2.套餐分类',sort        tinyint unsigned           not null comment '排序',status      tinyint unsigned default 0 null comment '状态字段: 0:停用 1:启用',create_time datetime                   not null,update_time datetime                   not null
)comment '分类表';

菜品表

create table dish
(id          int unsigned auto_increment comment '菜品id'primary key,name        varchar(20)                  not null comment '菜品名称',category_id int unsigned                 not null comment '分类id',price       decimal(8, 2)                not null comment '价格',image       varchar(300)                 not null comment '图像',description varchar(200)                 null,status      tinyint unsigned default '0' not null comment '状态',create_time datetime                     not null comment '创建时间',update_time datetime                     not null comment '更新时间'
)comment '菜品表';

套餐类

create table setmeal
(id          int auto_increment comment '主键ID'primary key,name        varchar(20)      not null comment '套餐名称',category_id int unsigned     not null,price       decimal(8, 2)    not null,image       varchar(300)     not null comment '图片',description varchar(200)     null comment '描述信息',status      tinyint unsigned not null comment '状态 0 停售 1 起售',create_time datetime         not null,update_time datetime         not null
)comment '套餐类';

套餐菜品关系表

create table setmeal_dish
(id         int unsigned auto_increment comment '主键ID'primary key,setmeal_id int unsigned     not null comment '套餐ID',dish_id    int unsigned     not null,copies     tinyint unsigned not null
)comment '套餐菜品关系表';

在这里插入图片描述

http://www.xdnf.cn/news/389863.html

相关文章:

  • windows怎么修改DNS
  • Bash 字符串语法糖详解
  • Kubernetes 集群部署应用
  • Web 性能优化三:页面首屏加载优化全流程:从服务器到骨架屏
  • Model Context Protocol(MCP)入门
  • C++中什么是函数指针?
  • DAY 22 复习日kaggle泰坦里克号人员生还预测
  • 第一章 例行性工作(任务计划)
  • Python基础总结(十)之函数
  • Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
  • 广东省省考备考(第八天5.11)—言语:片段阅读(每日一练)
  • 数据库备份与策略【全量备份、增量备份、日志恢复】
  • python:trimesh 用于 STL 文件解析和 3D 操作
  • 深入剖析缓存与数据库一致性:Java技术视角下的解决方案与实践
  • 【连载14】基础智能体的进展与挑战综述-多智能体系统设计
  • MySQL 数据库故障排查指南
  • 网络安全设备配置与管理-实验5-p150虚拟防火墙配置
  • 【计算机网络】NAT技术、内网穿透与代理服务器全解析:原理、应用及实践
  • JVM中的安全点是什么,作用又是什么?
  • python 新闻 api + react js 客户端。
  • MinIO自定义权限策略语法深度解析
  • 苍穹外卖-创建阿里云oss工具包
  • Agent杂货铺
  • 大模型知识蒸馏(Qwen2.5系列模型KL散度蒸馏)
  • leetcode热题100——day26
  • 当虚拟照进现实——《GTA6》如何重新定义开放世界的可能性‌
  • Git的核心作用详解
  • pwm控制
  • istio in action之服务网格和istio组件
  • LLM框架