JavaWeb——MySQL-多表设计(5/5):案例-表结构(分类表(category)、菜品表(dish)、套餐表(set_meal)、套餐菜品关系表(set_meal_dish))

目录

分类表(category)

字段确定依据

字段详细设计

表创建执行

菜品表(dish)

字段剖析与确定

字段设计详述

表创建执行

套餐表(set_meal)

字段规划逻辑

字段规格详述

表创建实施

套餐菜品关系表(set_meal_dish)

字段设计原理

表创建操作

多表关系总结与流程回顾

多表关系明晰

多表设计流程复盘


JavaWeb——MySQL-多表设计(4/5):案例-关系分析(苍穹外卖项目概述、页面原型、表结构设计流程规划)-优快云博客

分类表(category)

字段确定依据

        依据分类管理页面原型,梳理出分类名称、类型、排序、状态、操作时间等核心字段。同时,考虑业务规则对字段特性的要求,如分类名称长度限制、类型取值范围、排序值范围、状态默认值及非空约束等,为精准定义字段提供依据。

字段详细设计

  • id

        设为主键,选无符号整数类型(INT UNSIGNED),勾选PRIMARY KEYAUTO_INCREMENT,确保唯一且自增,为数据记录提供唯一标识与高效插入机制。

  • name

        字符串类型(VARCHAR(20)),限 2 - 20 字符,勾选NOT NULL保障必填,依业务确认是否UNIQUE。用于存储分类名称,精准定位与管理分类信息,维护数据准确性与一致性。

  • type

        采用TINYINT UNSIGNED,依约定 1 为菜品分类、2 为套餐分类,设NOT NULL,确保分类类型准确完整录入,支撑分类筛选与统计分析。

  • sort

        TINYINT UNSIGNED存 0 - 99 排序值,勾选NOT NULL,实现分类有序展示与排序管理,优化用户查找体验,提升系统交互效率。

  • status

        TINYINT UNSIGNED存 0(停用)/1(启用)状态,默认 0 且NOT NULL,满足分类状态管理需求,确保分类初始状态可控,适应业务流程动态变化。

  • create_time 

        与update_timeDATETIME类型,设NOT NULL,精确记录分类创建与修改时间戳,为数据审计、版本控制与业务流程追溯提供关键依据,保障数据完整性与可追溯性。

表创建执行

create table category
(
    id          int unsigned primary key auto_increment comment '主键ID',
    name        varchar(20)      not null unique comment '分类名称',
    type        tinyint unsigned not null comment '类型 1 菜品分类 2 套餐分类',
    sort        tinyint unsigned not null comment '顺序',
    status      tinyint unsigned not null default 0 comment '状态 0 禁用,1 启用',
    create_time datetime         not null comment '创建时间',
    update_time datetime         not null comment '更新时间'
) comment '菜品及套餐分类';

菜品表(dish)

字段剖析与确定

        从菜品管理页面原型及新建菜品页面信息提炼字段,涵盖菜品名称、分类(关联分类表category_id)、价格、图片、描述、售卖状态及操作时间等关键信息,并依据页面说明明确各字段长度、是否必填、是否唯一等约束条件。

字段设计详述

  • id

        同分类表id设计,作主键确保唯一性与自增,为菜品记录赋予稳定标识,提升数据管理效率与准确性。

  • name

        VARCHAR(20)存菜品名,限 2 - 20 字符,NOT NULLUNIQUE约束保数据完整唯一,助用户精准识别菜品,避免数据冲突,优化查询检索。

  • category_id

        INT UNSIGNED关联分类表主键,NOT NULL确保菜品归有效分类,建逻辑外键维护数据关系,实现分类查询菜品及菜品溯源分类,强化数据关联性与一致性。

  • price

        DECIMAL(8, 2)存价格,适配货币金额格式(8 位总长、2 位小数),NOT NULL保证价格必填,精确记录菜品价格信息,支撑价格计算、统计与业务逻辑处理。

  • image

        VARCHAR(300)存图片访问路径,NOT NULL确保路径完整,实现菜品图片灵活存储管理,优化系统资源利用与前端展示交互。

  • description

        VARCHAR(200)存菜品描述,选填字段,为用户提供菜品详情展示空间,增强信息透明度,提升用户点餐决策体验。

  • status

        TINYINT UNSIGNED记 0(停售)/1(起售)状态,默认 0 且NOT NULL,有效管理菜品售卖状态,契合业务运营流程,确保状态数据可靠更新与查询。

  • create_time 

        与update_time:功能同分类表对应字段,为菜品数据全生命周期管理提供时间维度记录,助力数据监控、分析与系统运维优化。

表创建执行

create table dish
(
    id          int unsigned primary key auto_increment comment '主键ID',
    name        varchar(20)      not null unique 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) comment '描述信息',
    status      tinyint unsigned not null default 0 comment '状态, 0 停售 1 起售',
    create_time datetime         not null comment '创建时间',
    update_time datetime         not null comment '更新时间'
) comment '菜品';

套餐表(set_meal)

字段规划逻辑

        参照套餐管理页面原型与新建套餐页面规则,梳理套餐名称、分类(关联分类表category_id)、价格、图片、描述、售卖状态及操作时间等字段,结合业务规范明确各字段特性与约束,为表结构设计锚定方向。

字段规格详述

  • id

        延续主键设计范式,INT UNSIGNED型并设PRIMARY KEY AUTO_INCREMENT,赋予套餐唯一标识,保障数据管理精准性与插入高效性。

  • name

        VARCHAR(20)容纳套餐名,2 - 20 字符限制、NOT NULLUNIQUE约束并存,确保套餐名称精准唯一,提升套餐识别度与数据质量,规避命名冲突。

  • category_id

        INT UNSIGNED作外键关联分类表主键,NOT NULL强制套餐关联有效分类,构建逻辑外键关联体系,确保套餐分类归属准确,优化分类套餐查询检索逻辑。

  • price

        同菜品表price字段,DECIMAL(8, 2)格式精准存储价格,NOT NULL确保完整性,为套餐价格核算、比较与业务决策筑牢数据基石。

  • image

        VARCHAR(300)存图片路径,NOT NULL保障路径完备,支撑套餐图片灵活管理与前端可视化呈现,提升用户点餐界面吸引力与交互体验。

  • description

        VARCHAR(200)承载套餐描述,选填设计赋予业务灵活性,丰富套餐信息展示维度,助力用户了解套餐详情与特色。

  • status

        TINYINT UNSIGNED定义 0(停售)/1(起售)状态,默认 0 且NOT NULL,紧密贴合业务运营节奏,精准管控套餐售卖动态,确保状态切换稳定可靠。

  • create_time 

        与update_time:时间戳字段,DATETIME型与NOT NULL设定,忠实记录套餐创建修改轨迹,为业务审计、数据分析与系统优化注入时间维度洞察,强化数据生命周期管理效能。

表创建实施

create table setmeal
(
    id          int unsigned primary key auto_increment comment '主键ID',
    name        varchar(20)      not null unique 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) comment '描述信息',
    status      tinyint unsigned not null default 0 comment '状态 0:停用 1:启用',
    create_time datetime         not null comment '创建时间',
    update_time datetime         not null comment '更新时间'
) comment '套餐';

套餐菜品关系表(set_meal_dish)

字段设计原理

        为处理套餐与菜品多对多关系而生,设主键id确保记录唯一标识。

        核心字段set_meal_idINT UNSIGNED)与dish_idINT UNSIGNED)分别作外键关联套餐表与菜品表主键,严格NOT NULL约束,精准锚定关联关系,确保数据关联稳固准确。

        新增copies字段(TINYINT UNSIGNED)记录套餐中菜品份数,NOT NULL保证数据完整性,完整刻画套餐菜品组合细节,为业务逻辑实现提供核心数据支撑。

表创建操作

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

多表关系总结与流程回顾

多表关系明晰

  • 分类 - 菜品

        一对多关系,菜品表category_id外键连分类表id,实现分类与菜品层级关联,助快速查询分类下菜品及追溯菜品分类源头,优化数据检索与业务逻辑处理效率,提升外卖业务数据管理粒度与精度。

  • 分类 - 套餐

        一对多架构,套餐表category_id外键指向分类表id,精准构建分类套餐映射,确保套餐在分类体系中精准定位与高效管理,支撑按分类筛选套餐等业务操作,强化外卖业务分类导航与套餐组织效能。

  • 菜品 - 套餐

        多对多纽带,套餐菜品关系表凭借set_meal_iddish_id外键,无缝连接套餐与菜品表,详细记录套餐菜品组合及份数,灵活适应复杂业务场景,有力支撑套餐定制、菜品关联分析与精准营销推荐,提升外卖业务组合创新与用户体验优化潜力。

多表设计流程复盘

  • 需求剖析与表梳理

        针对各表,依据业务规则深度解析字段细节,含类型选择、约束设定(非空、唯一、默认值等),编写SQL代码或者借图形化工具高效创建表结构,生成完整、规范、高效的数据库表集合。


END 


学习自:黑马程序员——JavaWeb课程 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值