订单变更记录表(store_order_change_log)使用说明
表设计目的
记录每次下单/更新订单时商品种类和数量的变化,用于展示每次操作都加了什么商品。
核心字段说明
1. batch_no(批次号)
- 作用:同一时间点的操作使用同一批次号,用于分组展示
- 格式建议:
ORDER{orderId}_{timestamp} 或 ORDER{orderId}_{yyyyMMddHHmmss}
- 示例:
ORDER123_20250202143025 表示订单123在2025-02-02 14:30:25的操作批次
2. operation_type(操作类型)
- 1:首次下单 - 创建订单时的操作
- 3:更新订单 - 更新订单时重新下单(只记录新增或数量增加的商品)
3. quantity_change(数量变化)
- 正数:新增的数量
- 负数:减少的数量(如果支持减少)
- 示例:
+2 表示新增2份,-1 表示减少1份
4. quantity_before / quantity_after(变化前后数量)
- quantity_before:变化前的数量
- quantity_after:变化后的数量
- 用途:用于展示变化前后对比
使用场景
场景1:查询订单的所有变更记录(按时间排序)
SELECT
batch_no,
operation_type,
operation_time,
cuisine_name,
quantity_change,
quantity_before,
quantity_after,
amount_change
FROM store_order_change_log
WHERE order_id = 123
AND delete_flag = 0
ORDER BY operation_time ASC;
场景2:按批次分组展示每次操作
SELECT
batch_no,
operation_type,
operation_time,
COUNT(*) as item_count,
SUM(quantity_change) as total_quantity_change,
SUM(amount_change) as total_amount_change,
GROUP_CONCAT(CONCAT(cuisine_name, ' x', quantity_change) SEPARATOR ', ') as items
FROM store_order_change_log
WHERE order_id = 123
AND delete_flag = 0
GROUP BY batch_no, operation_type, operation_time
ORDER BY operation_time ASC;
场景3:查询某次操作的所有商品
SELECT
cuisine_name,
quantity_change,
unit_price,
amount_change
FROM store_order_change_log
WHERE batch_no = 'ORDER123_20250202143025'
AND delete_flag = 0
ORDER BY cuisine_id;
场景4:查询更新订单记录
SELECT
batch_no,
operation_time,
cuisine_name,
quantity_change,
amount_change
FROM store_order_change_log
WHERE order_id = 123
AND operation_type = 3 -- 更新订单
AND delete_flag = 0
ORDER BY operation_time DESC;
数据记录示例
假设订单123的操作历史:
首次下单(batch_no: ORDER123_20250202140000)
| cuisine_name |
quantity_change |
quantity_before |
quantity_after |
amount_change |
| 石板肉酱豆腐 |
1 |
0 |
1 |
19.90 |
| 经典三杯鸡 |
1 |
0 |
1 |
26.90 |
第一次更新订单(batch_no: ORDER123_20250202143000)
| cuisine_name |
quantity_change |
quantity_before |
quantity_after |
amount_change |
| 经典三杯鸡 |
1 |
1 |
2 |
26.90 |
| 宫保鸡丁 |
1 |
0 |
1 |
28.00 |
第二次更新订单(batch_no: ORDER123_20250202150000)
| cuisine_name |
quantity_change |
quantity_before |
quantity_after |
amount_change |
| 石板肉酱豆腐 |
1 |
1 |
2 |
19.90 |
前端展示建议
展示格式1:时间线展示
14:00 - 首次下单
• 石板肉酱豆腐 x1
• 经典三杯鸡 x1
14:30 - 更新订单
• 经典三杯鸡 x1(累计:2)
• 宫保鸡丁 x1
15:00 - 更新订单
• 石板肉酱豆腐 x1(累计:2)
展示格式2:批次卡片展示
批次1:首次下单(14:00)
石板肉酱豆腐 x1 ¥19.90
经典三杯鸡 x1 ¥26.90
小计:¥46.80
批次2:更新订单(14:30)
经典三杯鸡 x1 ¥26.90
宫保鸡丁 x1 ¥28.00
小计:¥54.90
批次3:更新订单(15:00)
石板肉酱豆腐 x1 ¥19.90
小计:¥19.90
注意事项
- 批次号生成:同一时间点的所有商品变化应该使用同一个批次号
- 数量计算:quantity_change 应该只记录本次变化,不是累计数量
- 逻辑删除:使用 delete_flag 进行逻辑删除,保留历史记录
- 索引优化:已创建必要的索引,查询性能有保障