目录
JavaWeb——MySQL-多表设计(4/5):案例-关系分析(苍穹外卖项目概述、页面原型、表结构设计流程规划)-优快云博客
分类表(category)
字段确定依据
依据分类管理页面原型,梳理出分类名称、类型、排序、状态、操作时间等核心字段。同时,考虑业务规则对字段特性的要求,如分类名称长度限制、类型取值范围、排序值范围、状态默认值及非空约束等,为精准定义字段提供依据。
字段详细设计
- id
设为主键,选无符号整数类型(INT UNSIGNED
),勾选PRIMARY KEY
与AUTO_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_time
:DATETIME
类型,设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 NULL
与UNIQUE
约束保数据完整唯一,助用户精准识别菜品,避免数据冲突,优化查询检索。
- 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 NULL
与UNIQUE
约束并存,确保套餐名称精准唯一,提升套餐识别度与数据质量,规避命名冲突。
- 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_id
(INT UNSIGNED
)与dish_id
(INT 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_id
与dish_id
外键,无缝连接套餐与菜品表,详细记录套餐菜品组合及份数,灵活适应复杂业务场景,有力支撑套餐定制、菜品关联分析与精准营销推荐,提升外卖业务组合创新与用户体验优化潜力。
多表设计流程复盘
- 需求剖析与表梳理
针对各表,依据业务规则深度解析字段细节,含类型选择、约束设定(非空、唯一、默认值等),编写SQL代码或者借图形化工具高效创建表结构,生成完整、规范、高效的数据库表集合。
END
学习自:黑马程序员——JavaWeb课程