Files
work_flow_ishare/db/ishare_schema_v3_delta.sql
Admin 2e34dd172b init: iShare Phase D 设计文档完整归档
文档清单:
- README.md                     仓库导航
- iShare-dev-plan.md            开发规划
- SYSTEM_DESIGN.md              系统设计(角色/流程/接口)
- DATABASE_DESIGN_V2.md         数据库完整字段设计
- DATABASE_DESIGN_OVERVIEW.md   设计概要 v4(28张表)
- DECISIONS.md                  6个关键决策记录
- db/ishare_schema_v2.sql       基础建表 SQL
- db/ishare_schema_v3_delta.sql v2→v3 增量(评审修复)
- db/ishare_schema_v4_delta.sql v3→v4 增量(决策确认)
- memory_2026-02-17.md          工作日志

Phase D 完成:28张表定稿,所有决策已确认
2026-02-17 13:27:34 +01:00

130 lines
6.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- iShare 数据库设计 v2 → v3 增量脚本
-- 修订时间: 2026-02-17
-- 处理评审问题: R1, R2, I1, I2, I3(文档), L1, L2
-- ============================================================
USE pigxx_app;
SET NAMES utf8mb4;
-- ============================================================
-- R2: 修复 as_user_sub_member 唯一键问题
-- 原 UNIQUE(sub_id, user_id) 导致续费覆盖历史记录
-- 改为:允许多条记录,逻辑约束同 sub_id+user_id 只有一条 status=1
-- ============================================================
ALTER TABLE `as_user_sub_member`
DROP INDEX IF EXISTS `uk_sub_user`;
-- 补充索引(定时任务/我的订阅高频查询)
ALTER TABLE `as_user_sub_member`
ADD INDEX IF NOT EXISTS `idx_user_status` (`user_id`, `status`),
ADD INDEX IF NOT EXISTS `idx_expire_status` (`expire_time`, `status`);
-- L1: status 增加 4=等待车主录入凭据(广场拼车场景)
-- 注:仅修改注释,逻辑不变;应用层处理状态值
ALTER TABLE `as_user_sub_member`
MODIFY COLUMN `status` tinyint NOT NULL DEFAULT 0
COMMENT '状态: 0=待激活, 1=使用中, 2=已到期, 3=已退订, 4=等待车主录入凭据';
-- ============================================================
-- I2: as_sub_product.sub_plan_ids 逗号分隔改为关联表
-- ============================================================
-- 新增 M:N 关联表
CREATE TABLE IF NOT EXISTS `as_product_plan_rel` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`product_id` bigint NOT NULL COMMENT '产品ID→ as_sub_product.id',
`plan_id` bigint NOT NULL COMMENT '订阅计划ID→ as_sub_plan.id',
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(同产品内多计划的展示顺序)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_product_plan` (`product_id`, `plan_id`),
KEY `idx_product_id` (`product_id`),
KEY `idx_plan_id` (`plan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='产品-订阅计划关联表M:N';
-- 移除旧的逗号分隔字段
ALTER TABLE `as_sub_product`
DROP COLUMN IF EXISTS `sub_plan_ids`;
-- 补充 as_sub_product 高频查询索引
ALTER TABLE `as_sub_product`
ADD INDEX IF NOT EXISTS `idx_product_type_status` (`product_type`, `status`);
-- ============================================================
-- R1: 新增 as_recharge — 钱包充值单
-- 支持外部支付充值时追踪(待支付→成功→到账)
-- ============================================================
CREATE TABLE IF NOT EXISTS `as_recharge` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`recharge_no` varchar(32) NOT NULL COMMENT '充值单号RC+时间戳+随机,业务唯一)',
`user_id` bigint NOT NULL COMMENT '用户ID→ app_user.user_id',
`amount` decimal(10,2) NOT NULL COMMENT '充值金额',
`pay_type` tinyint NOT NULL COMMENT '支付方式: 1=人工充值(管理员), 2=支付宝, 3=微信支付',
`pay_no` varchar(64) DEFAULT NULL COMMENT '第三方支付单号(外部支付时回填)',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=待支付, 1=已支付/已到账, 2=支付失败, 3=已取消',
`remark` varchar(256) DEFAULT NULL COMMENT '备注(人工充值时填写原因)',
`operator_id` bigint DEFAULT NULL COMMENT '操作人ID人工充值时为管理员ID',
`expire_time` datetime DEFAULT NULL COMMENT '订单过期时间(外部支付时 +15min',
`pay_time` datetime DEFAULT NULL COMMENT '实际支付/到账时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_recharge_no` (`recharge_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_status` (`status`),
KEY `idx_pay_no` (`pay_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='钱包充值单表(含外部支付追踪)';
-- ============================================================
-- I1: 新增 as_banner — 首页广告位/Banner
-- ============================================================
CREATE TABLE IF NOT EXISTS `as_banner` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`title` varchar(128) NOT NULL COMMENT 'Banner 标题(后台管理用)',
`image_url` varchar(512) NOT NULL COMMENT 'Banner 图片 URL',
`link_type` tinyint NOT NULL DEFAULT 0 COMMENT '跳转类型: 0=无跳转, 1=商品详情, 2=外部链接, 3=平台分类',
`link_target` varchar(512) DEFAULT NULL COMMENT '跳转目标商品ID/URL/分类ID按 link_type 解析)',
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(升序,值小靠前)',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=草稿, 1=展示中, 2=已下线',
`start_time` datetime DEFAULT NULL COMMENT '展示开始时间NULL=立即生效)',
`end_time` datetime DEFAULT NULL COMMENT '展示结束时间NULL=长期有效)',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_status_sort` (`status`, `sort_order`),
KEY `idx_time_range` (`start_time`, `end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='首页 Banner 广告位表';
-- ============================================================
-- L2: 补充关键查询索引
-- ============================================================
-- as_order: 用户订单列表 / 状态过滤
ALTER TABLE `as_order`
ADD INDEX IF NOT EXISTS `idx_user_status` (`user_id`, `status`);
-- as_notification: 未读消息数
ALTER TABLE `as_notification`
ADD INDEX IF NOT EXISTS `idx_user_read` (`user_id`, `is_read`);
-- as_user_sub: 商品下的可用合租槽
ALTER TABLE `as_user_sub`
ADD INDEX IF NOT EXISTS `idx_product_status` (`product_id`, `status`);
-- as_sub_account: 产品下的账号列表
ALTER TABLE `as_sub_account`
ADD INDEX IF NOT EXISTS `idx_product_status` (`product_id`, `status`);
-- ============================================================
-- END
-- ============================================================