MySQL-多表设计-案例-关系分析

案例

  • 参考页面原型及需求,设计合理的表结构
  • 需求
    • 参考资料中提供的《苍穹外卖_管理后台》页面原型,设计分类管理、菜品管理、套餐管理模块的表结构
  • 步骤

    • 阅读页面原型及需求文档,分析各个模块涉及的表结构,及表结构之间的关系

    • 对于不同的项目表与表之间存在着不同的关系没具体要通过项目的需求文档来确定表与表之间的关系
    • 本次案例具体实行页面
    • MySQL-多表设计-案例-关系分析_第1张图片
    • MySQL-多表设计-案例-关系分析_第2张图片
    • 可知分类表和菜品表为1:n的关系,分类表和套餐表也是1:n的关系,菜品表和套餐表为m:n的关系
      • 一对多的关系,需要在多的一方添加一中的主键信息
      • 多对多的关系,需要额外创建一张中间表来维护
    • 根据页面原型及需求文档,分析各个表结构中具体的字段及约束

    • 各个表中的属性及约束如下
    • 分类表
    • MySQL-多表设计-案例-关系分析_第3张图片
    • 具体创建代码如下:
    • create table category
      (
          id          int unsigned auto_increment comment '主键id
      '
              primary key,
          name        varchar(20)                  not null comment '分类名称
      ',
          type        tinyint unsigned             not null comment '分类类型:
      1:菜品分类
      2:套餐分类',
          sort        tinyint unsigned             not null comment '排序字段',
          status      tinyint unsigned default '0' not null comment '状态信息
      0:停用
      1:启用',
          create_time datetime                     not null comment '创建时间',
          update_time datetime                     not null comment '更新时间',
          constraint name
              unique (name)
      )
          comment '分类表';
    • 菜品表

    • MySQL-多表设计-案例-关系分析_第4张图片

    • 具体的创建代码如下

    • create table dish
      (
          id          int unsigned auto_increment comment '主键id'
              primary key,
          name        varchar(20)                  not null comment '菜品名称
      ',
          category_id int unsigned                 not null,
          price       decimal(8, 2)                not null comment '价格
      ',
          image       varchar(300)                 not null comment '图像',
          description varchar(200)                 null comment '描述信息',
          status      tinyint unsigned default '0' not null comment '状态字段
      0:停售
      1:在售',
          create_time datetime                     not null comment '创建时间',
          updatetime  datetime                     not null comment '修改时间',
          constraint name
              unique (name)
      )
          comment '菜品表';
      
      
    • 套餐表

    • 具体需求如下:

    • MySQL-多表设计-案例-关系分析_第5张图片

    • 具体创建代码如下:

    • create table setmeal
      (
          id0         int unsigned auto_increment comment '主键id'
              primary key,
          name        varchar(20)                  not null comment '套餐名称',
          ctegory_id  int unsigned                 null comment '套餐分类id',
          price       decimal(8, 2)                not null comment '套餐价格
      ',
          image       varchar(300)                 not null comment '套餐图片',
          description varchar(200)                 null comment '套餐描述',
          status      tinyint unsigned default '0' null comment '状态:
      0:停售
      1;起售',
          create_time datetime                     not null comment '创建时间',
          update_time datetime                     not null comment '更新时间',
          constraint name
              unique (name)
      )
          comment '套餐表';
      
      
    • 套餐菜品关系表
    • 由于套餐与菜品为多对多的关系,因此要额外创建一个表来将两个表联系起来
    • 具体代码如下
    • create table setmeal_dish
      (
          id      int unsigned auto_increment comment '主键id'
              primary key,
          setMeal int unsigned     not null comment '套餐id',
          dish_id int unsigned     not null comment '菜品id',
          copies  tinyint unsigned not null comment '菜品份数'
      );
      
      
  •  总结

    • 在本项目中,分类表与菜品表为一对多的关系,分类表与套餐表是一对多的关系,菜品表与套餐表为多对多的关系
      • 一对多的关系:在多的一方添加一的一方的主键作为外键,实现表与表之间建立联系
      • 多对多的关系:需要创建一个中间表,分别关联另外两张表的主键

你可能感兴趣的:(Java,Web学习跟踪笔记,mysql,数据库)