docs: add expiry docs and sql script
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
-- 保质期提醒小程序 - 数据库初始化脚本
|
||||
-- 执行前请确保已创建数据库并选择正确的数据库
|
||||
|
||||
-- ============================================
|
||||
-- 1. 物品表 (expiry_items)
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS expiry_items (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID(关联 users 表)',
|
||||
mini_program_id BIGINT UNSIGNED NOT NULL COMMENT '小程序ID(关联 mini_programs 表)',
|
||||
name VARCHAR(100) NOT NULL COMMENT '物品名称',
|
||||
category VARCHAR(20) NOT NULL COMMENT '分类:food/medicine/cosmetic/other',
|
||||
production_date DATE DEFAULT NULL COMMENT '生产日期(可选)',
|
||||
expiry_date DATE NOT NULL COMMENT '过期日期',
|
||||
shelf_life_days INT DEFAULT NULL COMMENT '保质期天数(可选)',
|
||||
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',
|
||||
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 '软删除时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_user_expiry (user_id, expiry_date) COMMENT '用户+过期日期索引(最常用查询)',
|
||||
INDEX idx_user_category (user_id, category) COMMENT '用户+分类索引',
|
||||
INDEX idx_user_status (user_id, status) COMMENT '用户+状态索引',
|
||||
INDEX idx_deleted_at (deleted_at) COMMENT '软删除索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保质期物品表';
|
||||
|
||||
-- ============================================
|
||||
-- 2. 用户设置表 (expiry_user_settings)
|
||||
-- ============================================
|
||||
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]',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_user_id (user_id) COMMENT '用户ID索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保质期用户设置表';
|
||||
|
||||
-- ============================================
|
||||
-- 3. 插入测试数据(可选)
|
||||
-- ============================================
|
||||
-- 注意:以下测试数据需要根据实际的 user_id 和 mini_program_id 调整
|
||||
|
||||
-- 示例:假设 user_id=1, mini_program_id=1
|
||||
-- INSERT INTO expiry_items (user_id, mini_program_id, name, category, production_date, expiry_date, shelf_life_days, quantity, location, remark) VALUES
|
||||
-- (1, 1, '伊利纯牛奶', 'food', '2026-02-01', '2026-03-10', 37, 6, '冰箱', ''),
|
||||
-- (1, 1, '感冒灵颗粒', 'medicine', NULL, '2027-12-31', NULL, 1, '药箱', ''),
|
||||
-- (1, 1, '雅诗兰黛面霜', 'cosmetic', '2025-06-01', '2028-06-01', 1095, 1, '梳妆台', '');
|
||||
|
||||
-- 插入默认用户设置
|
||||
-- INSERT INTO expiry_user_settings (user_id, remind_days) VALUES
|
||||
-- (1, '[7,3,1]');
|
||||
|
||||
-- ============================================
|
||||
-- 4. 验证表结构
|
||||
-- ============================================
|
||||
-- 查看表结构
|
||||
-- SHOW CREATE TABLE expiry_items;
|
||||
-- SHOW CREATE TABLE expiry_user_settings;
|
||||
|
||||
-- 查看索引
|
||||
-- SHOW INDEX FROM expiry_items;
|
||||
-- SHOW INDEX FROM expiry_user_settings;
|
||||
|
||||
-- ============================================
|
||||
-- 5. 常用查询示例
|
||||
-- ============================================
|
||||
|
||||
-- 查询用户的所有物品
|
||||
-- SELECT * FROM expiry_items WHERE user_id = 1 AND deleted_at IS NULL;
|
||||
|
||||
-- 查询即将过期的物品(7天内)
|
||||
-- SELECT * FROM expiry_items
|
||||
-- WHERE user_id = 1
|
||||
-- AND deleted_at IS NULL
|
||||
-- AND expiry_date BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
|
||||
-- ORDER BY expiry_date ASC;
|
||||
|
||||
-- 查询已过期的物品
|
||||
-- SELECT * FROM expiry_items
|
||||
-- WHERE user_id = 1
|
||||
-- AND deleted_at IS NULL
|
||||
-- AND expiry_date < CURDATE()
|
||||
-- ORDER BY expiry_date DESC;
|
||||
|
||||
-- 统计汇总
|
||||
-- SELECT
|
||||
-- COUNT(*) as total_items,
|
||||
-- SUM(CASE WHEN expiry_date BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY) THEN 1 ELSE 0 END) as expiring_soon,
|
||||
-- SUM(CASE WHEN expiry_date < CURDATE() THEN 1 ELSE 0 END) as expired,
|
||||
-- SUM(CASE WHEN expiry_date > DATE_ADD(CURDATE(), INTERVAL 7 DAY) THEN 1 ELSE 0 END) as normal
|
||||
-- FROM expiry_items
|
||||
-- WHERE user_id = 1
|
||||
-- AND deleted_at IS NULL
|
||||
-- AND status NOT IN ('used', 'discarded');
|
||||
|
||||
-- ============================================
|
||||
-- 6. 数据清理(谨慎使用)
|
||||
-- ============================================
|
||||
|
||||
-- 物理删除已软删除超过30天的记录
|
||||
-- DELETE FROM expiry_items
|
||||
-- WHERE deleted_at IS NOT NULL
|
||||
-- AND deleted_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
|
||||
|
||||
-- 清空测试数据(谨慎使用!)
|
||||
-- TRUNCATE TABLE expiry_items;
|
||||
-- TRUNCATE TABLE expiry_user_settings;
|
||||
|
||||
-- ============================================
|
||||
-- 7. 性能优化建议
|
||||
-- ============================================
|
||||
|
||||
-- 定期分析表,优化查询性能
|
||||
-- ANALYZE TABLE expiry_items;
|
||||
-- ANALYZE TABLE expiry_user_settings;
|
||||
|
||||
-- 查看表状态
|
||||
-- SHOW TABLE STATUS LIKE 'expiry_%';
|
||||
|
||||
-- ============================================
|
||||
-- 初始化完成
|
||||
-- ============================================
|
||||
Reference in New Issue
Block a user