docs(sql): 完成 #19 过期模块数据库脚本与校验

This commit is contained in:
root
2026-03-04 18:29:48 +08:00
parent cc16b342d7
commit e1b5382004
2 changed files with 31 additions and 2 deletions
+5 -2
View File
@@ -16,10 +16,13 @@ CREATE TABLE IF NOT EXISTS expiry_items (
quantity INT DEFAULT 1 COMMENT '数量', quantity INT DEFAULT 1 COMMENT '数量',
location VARCHAR(50) DEFAULT NULL COMMENT '存放位置(可选)', location VARCHAR(50) DEFAULT NULL COMMENT '存放位置(可选)',
remark VARCHAR(255) DEFAULT NULL COMMENT '备注(可选)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注(可选)',
status VARCHAR(20) DEFAULT 'normal' COMMENT '状态:normal/used/expired/discarded', status VARCHAR(20) DEFAULT 'normal' COMMENT '状态:normal/used/discardedexpiring/expired 由业务动态计算)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at TIMESTAMP NULL DEFAULT NULL COMMENT '软删除时间', deleted_at TIMESTAMP NULL DEFAULT NULL COMMENT '软删除时间',
CONSTRAINT chk_expiry_category CHECK (category IN ('food', 'medicine', 'cosmetic', 'other')),
CONSTRAINT chk_expiry_quantity CHECK (quantity > 0),
CONSTRAINT chk_expiry_status CHECK (status IN ('normal', 'used', 'discarded')),
-- 索引 -- 索引
INDEX idx_user_expiry (user_id, expiry_date) COMMENT '用户+过期日期索引(最常用查询)', INDEX idx_user_expiry (user_id, expiry_date) COMMENT '用户+过期日期索引(最常用查询)',
@@ -34,7 +37,7 @@ CREATE TABLE IF NOT EXISTS expiry_items (
CREATE TABLE IF NOT EXISTS expiry_user_settings ( CREATE TABLE IF NOT EXISTS expiry_user_settings (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
user_id BIGINT UNSIGNED NOT NULL UNIQUE COMMENT '用户ID(唯一)', user_id BIGINT UNSIGNED NOT NULL UNIQUE COMMENT '用户ID(唯一)',
remind_days JSON DEFAULT '[7,3,1]' COMMENT '提醒天数数组,例如 [7,3,1]', remind_days JSON DEFAULT (JSON_ARRAY(7,3,1)) COMMENT '提醒天数数组,例如 [7,3,1]',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
@@ -0,0 +1,26 @@
# Expiry DDL 验证报告(2026-03-04
## 结论
- `expiry_items``expiry_user_settings` 两张表结构已齐备。
- 索引覆盖了用户维度的核心查询路径。
- 已补充关键约束,降低脏数据进入数据库的风险。
## 本次补充项
1. `expiry_items` 增加 `CHECK` 约束:
- `category IN ('food', 'medicine', 'cosmetic', 'other')`
- `quantity > 0`
- `status IN ('normal', 'used', 'discarded')`
2. `expiry_user_settings.remind_days` 默认值改为:
- `JSON_ARRAY(7,3,1)`
## 校验命令
```sql
SHOW CREATE TABLE expiry_items;
SHOW CREATE TABLE expiry_user_settings;
SHOW INDEX FROM expiry_items;
SHOW INDEX FROM expiry_user_settings;
```
## 兼容性说明
- `CHECK` 约束在 MySQL 8.0+ 生效;若使用低版本,请在应用层保留同等校验逻辑。