From e1b5382004a0080ed0bd4dbc666f7494f7917160 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 4 Mar 2026 18:29:48 +0800 Subject: [PATCH] =?UTF-8?q?docs(sql):=20=E5=AE=8C=E6=88=90=20#19=20?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=B8=8E=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/sql/expiry.sql | 7 +++-- .../expiry_ddl_validation_2026-03-04.md | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 docs/sql/reports/expiry_ddl_validation_2026-03-04.md diff --git a/docs/sql/expiry.sql b/docs/sql/expiry.sql index ba6db88..b24011a 100644 --- a/docs/sql/expiry.sql +++ b/docs/sql/expiry.sql @@ -16,10 +16,13 @@ CREATE TABLE IF NOT EXISTS expiry_items ( quantity INT DEFAULT 1 COMMENT '数量', location VARCHAR(50) 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/discarded(expiring/expired 由业务动态计算)', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 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 '用户+过期日期索引(最常用查询)', @@ -34,7 +37,7 @@ CREATE TABLE IF NOT EXISTS expiry_items ( CREATE TABLE IF NOT EXISTS expiry_user_settings ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY 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 '创建时间', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', diff --git a/docs/sql/reports/expiry_ddl_validation_2026-03-04.md b/docs/sql/reports/expiry_ddl_validation_2026-03-04.md new file mode 100644 index 0000000..2ee0137 --- /dev/null +++ b/docs/sql/reports/expiry_ddl_validation_2026-03-04.md @@ -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+ 生效;若使用低版本,请在应用层保留同等校验逻辑。