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张表定稿,所有决策已确认
This commit is contained in:
2026-02-17 13:27:34 +01:00
parent 01df3d8710
commit 2e34dd172b
10 changed files with 2238 additions and 2 deletions

370
db/ishare_schema_v2.sql Normal file
View File

@@ -0,0 +1,370 @@
-- ============================================================
-- iShare 数据库设计 v2.0(修订版)
-- 修订时间: 2026-02-17
-- 修订说明: 修复原版缺陷,补充完整业务字段和新增表
-- 数据库: pigxx_app
-- ============================================================
USE pigxx_app;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ============================================================
-- 一、App 基础表(沿用原版,仅 app_user 追加字段)
-- ============================================================
-- app_user 追加字段ALTER不重建表
ALTER TABLE `app_user`
ADD COLUMN IF NOT EXISTS `invite_code` varchar(16) UNIQUE COMMENT '用户专属邀请码(注册时生成)' AFTER `email`,
ADD COLUMN IF NOT EXISTS `inviter_id` bigint DEFAULT NULL COMMENT '邀请人用户ID' AFTER `invite_code`;
-- ============================================================
-- 二、iShare 核心业务表修订版8 张原表 + 新增 6 张)
-- ============================================================
-- ------------------------------------------------------------
-- 2.1 as_platform_type — 平台类型
-- 修订: 加 status、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_platform_type`;
CREATE TABLE `as_platform_type` (
`id` bigint NOT NULL COMMENT '主键',
`name` varchar(64) NOT NULL COMMENT '类型名称(视频/音乐/AI等',
`platform_type` int NOT NULL DEFAULT 0 COMMENT '类型编号用于分类筛选0=全部',
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(升序)',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 0=禁用, 1=启用',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_platform_type` (`platform_type`),
KEY `idx_sort` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台类型表';
-- ------------------------------------------------------------
-- 2.2 as_platform — 流媒体平台
-- 修订: 加 description、status、del_flag、create_time/update_time
-- sort_order 从 varchar 改为 int
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_platform`;
CREATE TABLE `as_platform` (
`id` bigint NOT NULL COMMENT '主键',
`platform_name` varchar(128) NOT NULL COMMENT '平台名称',
`platform_type` int NOT NULL DEFAULT 0 COMMENT '平台类型(关联 as_platform_type.platform_type',
`icon` varchar(512) DEFAULT NULL COMMENT '应用图标 URL',
`description` varchar(512) DEFAULT NULL COMMENT '平台简介',
`company` varchar(128) DEFAULT NULL COMMENT '所属公司',
`website` varchar(256) DEFAULT NULL COMMENT '平台官网',
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(升序)',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 0=禁用, 1=启用',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_platform_type` (`platform_type`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流媒体平台表';
-- ------------------------------------------------------------
-- 2.3 as_sub_plan — 订阅计划
-- 修订: platform_id varchar→bigint, capacity varchar→int
-- 加 status、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_plan`;
CREATE TABLE `as_sub_plan` (
`id` bigint NOT NULL COMMENT '计划ID',
`name` varchar(128) NOT NULL COMMENT '计划名称(标准版/高级版等)',
`platform_id` bigint NOT NULL COMMENT '所属平台ID→ as_platform.id',
`capacity` int NOT NULL DEFAULT 1 COMMENT '席位容量(该计划最多可共享人数)',
`remark` varchar(256) DEFAULT NULL COMMENT '备注',
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(升序)',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 0=禁用, 1=启用',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_platform_id` (`platform_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订阅计划表';
-- ------------------------------------------------------------
-- 2.4 as_sub_payroll — 付费方案
-- 修订: sub_plans(Long,注释混乱) → sub_plan_id(bigint,明确1:1)
-- 加 duration_months、original_price、is_active
-- del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_payroll`;
CREATE TABLE `as_sub_payroll` (
`id` bigint NOT NULL COMMENT '主键',
`sub_plan_id` bigint NOT NULL COMMENT '所属订阅计划ID→ as_sub_plan.id',
`platform_id` bigint NOT NULL COMMENT '平台ID冗余便于查询',
`payroll` tinyint NOT NULL COMMENT '付费周期: 1=月付, 2=季付, 3=年付',
`duration_months` int NOT NULL COMMENT '实际月数: 1/3/12与 payroll 对应)',
`price` decimal(10,2) NOT NULL COMMENT '售价',
`original_price` decimal(10,2) DEFAULT NULL COMMENT '划线价(原价,用于展示折扣)',
`currency` varchar(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位CNY/USD等',
`region` varchar(64) DEFAULT NULL COMMENT '适用地区',
`is_active` tinyint NOT NULL DEFAULT 1 COMMENT '是否上架: 0=下架, 1=上架',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_sub_plan_id` (`sub_plan_id`),
KEY `idx_platform_id` (`platform_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='付费方案表';
-- ------------------------------------------------------------
-- 2.5 as_sub_product — 订阅产品(合租商品)
-- 修订: Tags→tags(命名修复), 加 platform_id、status、cover_image
-- product_type/sub_type 从 Long 改为 tinyint
-- 加 total_capacity、del_flag、create_by/update_by
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_product`;
CREATE TABLE `as_sub_product` (
`id` bigint NOT NULL COMMENT '主键',
`title` varchar(256) NOT NULL COMMENT '产品标题',
`description` varchar(1024) DEFAULT NULL COMMENT '产品描述',
`cover_image` varchar(512) DEFAULT NULL COMMENT '封面图 URL',
`tags` varchar(256) DEFAULT NULL COMMENT '标签(逗号分隔)',
`platform_id` bigint NOT NULL COMMENT '所属平台ID→ as_platform.id冗余加速查询',
`sub_plan_ids` varchar(256) DEFAULT NULL COMMENT '关联订阅计划ID列表逗号分隔',
`product_type` tinyint NOT NULL DEFAULT 1 COMMENT '产品类型: 1=自营, 2=个人',
`sub_type` tinyint NOT NULL DEFAULT 1 COMMENT '订阅类型: 1=单品, 2=多品组合',
`total_capacity` int NOT NULL DEFAULT 1 COMMENT '总席位数(该商品可供多少人购买)',
`amount` decimal(10,2) DEFAULT NULL COMMENT '基准价格(月)',
`star` decimal(3,1) DEFAULT 0.0 COMMENT '综合评分0.0-5.0,由评价聚合更新)',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=草稿, 1=上架, 2=下架, 3=售完',
`user_id` bigint DEFAULT NULL COMMENT '发布者用户ID→ app_user.user_id',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_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_platform_id` (`platform_id`),
KEY `idx_status` (`status`),
KEY `idx_product_type` (`product_type`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订阅产品表(合租商品)';
-- ------------------------------------------------------------
-- 2.6 as_sub_account — 流媒体平台账号凭据
-- 修订: user_id/sub_plan_id/sub_payroll_id/platform_id int→bigint
-- passwd_salt int→varchar(64,存hex/base64)
-- 加 encrypt_type、status、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_account`;
CREATE TABLE `as_sub_account` (
`id` bigint NOT NULL COMMENT '主键',
`product_id` bigint DEFAULT NULL COMMENT '关联产品ID→ as_sub_product.id',
`sub_plan_id` bigint DEFAULT NULL COMMENT '订阅计划ID→ as_sub_plan.id',
`sub_payroll_id` bigint DEFAULT NULL COMMENT '付费方案ID→ as_sub_payroll.id',
`platform_id` bigint NOT NULL COMMENT '平台ID→ as_platform.id',
`user_id` bigint NOT NULL COMMENT '账号持有者用户ID主用户→ app_user.user_id',
`account_name` varchar(256) NOT NULL COMMENT '平台登录用户名/邮箱',
`account_passwd` varchar(512) NOT NULL COMMENT '平台登录密码(加密存储)',
`passwd_salt` varchar(64) NOT NULL COMMENT '加密盐值Base64/Hex16字节随机',
`encrypt_type` tinyint NOT NULL DEFAULT 1 COMMENT '加密算法: 1=AES-256-GCM',
`region` varchar(64) DEFAULT NULL COMMENT '账号所在地区',
`share_type` tinyint DEFAULT NULL COMMENT '分享类型',
`account_type` tinyint DEFAULT NULL COMMENT '账号类型(主账号/子账号等)',
`renew_date` datetime DEFAULT NULL COMMENT '账号在平台的下次续费日',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '账号状态: 0=正常, 1=已失效, 2=异常/被封',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_product_id` (`product_id`),
KEY `idx_platform_id` (`platform_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流媒体平台账号凭据表';
-- ------------------------------------------------------------
-- 2.7 as_user_sub — 合租槽(共享池)
-- 语义修订: 代表"一个合租位池",不代表个人订阅
-- 修订: remark int→varchar, plan_id/user_id/main_account int→bigint
-- 加 product_id、status、expire_time、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_user_sub`;
CREATE TABLE `as_user_sub` (
`id` bigint NOT NULL COMMENT '主键',
`product_id` bigint NOT NULL COMMENT '关联产品ID→ as_sub_product.id',
`plan_id` bigint NOT NULL COMMENT '订阅计划ID→ as_sub_plan.id',
`platform_id` bigint NOT NULL COMMENT '平台ID冗余加速查询',
`host_user_id` bigint NOT NULL COMMENT '车主用户ID提供账号的一方→ app_user.user_id',
`account_id` bigint DEFAULT NULL COMMENT '关联平台账号ID→ as_sub_account.id',
`capacity` int NOT NULL COMMENT '总席位数(来自 as_sub_plan.capacity',
`capacity_loaded` int NOT NULL DEFAULT 0 COMMENT '已占用席位数',
`region` varchar(64) DEFAULT NULL COMMENT '地区',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=可加入, 1=已满, 2=已到期, 3=已关闭',
`expire_time` datetime DEFAULT NULL COMMENT '该合租槽到期时间(来自最晚成员到期时间)',
`remark` varchar(512) DEFAULT NULL COMMENT '备注(车主说明)',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_product_id` (`product_id`),
KEY `idx_plan_id` (`plan_id`),
KEY `idx_host_user_id` (`host_user_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合租槽表(共享席位池)';
-- ------------------------------------------------------------
-- 2.8 as_sub_product_comment — 产品评价
-- 修订: 加 del_flag、is_anonymous、reply_id支持追评
-- star 字段加注释明确 1-5 范围
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_product_comment`;
CREATE TABLE `as_sub_product_comment` (
`id` bigint NOT NULL COMMENT '主键',
`product_id` bigint NOT NULL COMMENT '关联产品ID→ as_sub_product.id',
`user_id` bigint NOT NULL COMMENT '评价用户ID→ app_user.user_id',
`order_id` bigint DEFAULT NULL COMMENT '关联订单ID校验是否已购买',
`star` tinyint NOT NULL COMMENT '评分 1-5服务端校验范围',
`comment` varchar(1024) DEFAULT NULL COMMENT '评价内容',
`is_anonymous` tinyint NOT NULL DEFAULT 0 COMMENT '是否匿名: 0=公开, 1=匿名',
`reply_id` bigint DEFAULT NULL COMMENT '回复的评价ID追评/商家回复NULL=原始评价)',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_product_id` (`product_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_reply_id` (`reply_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品评价表';
-- ============================================================
-- 三、新增表(原版缺失的核心业务表)
-- ============================================================
-- ------------------------------------------------------------
-- 3.1 as_user_sub_member — 个人订阅记录(原版最大缺失)
-- 语义: 某用户购买加入了某合租槽,追踪个人维度
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_user_sub_member` (
`id` bigint NOT NULL COMMENT '主键',
`sub_id` bigint NOT NULL COMMENT '关联合租槽ID→ as_user_sub.id',
`user_id` bigint NOT NULL COMMENT '订阅用户ID→ app_user.user_id',
`order_id` bigint NOT NULL COMMENT '关联订单ID→ as_order.id',
`payroll_id` bigint NOT NULL COMMENT '购买的付费方案ID→ as_sub_payroll.id',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=待激活, 1=使用中, 2=已到期, 3=已退订',
`start_time` datetime NOT NULL COMMENT '订阅开始时间',
`expire_time` datetime NOT NULL COMMENT '订阅到期时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`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_sub_user` (`sub_id`, `user_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_status` (`status`),
KEY `idx_expire` (`expire_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='个人订阅记录表';
-- ------------------------------------------------------------
-- 3.2 as_order — 订单表
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_order` (
`id` bigint NOT NULL COMMENT '主键',
`order_no` varchar(32) NOT NULL COMMENT '订单号(业务唯一,格式: AS+时间戳+随机)',
`user_id` bigint NOT NULL COMMENT '购买用户ID→ app_user.user_id',
`product_id` bigint NOT NULL COMMENT '商品ID→ as_sub_product.id',
`payroll_id` bigint NOT NULL COMMENT '付费方案ID→ as_sub_payroll.id',
`original_amount` decimal(10,2) NOT NULL COMMENT '原价(快照,防止价格变动)',
`discount_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '优惠金额',
`amount` decimal(10,2) NOT NULL COMMENT '实付金额',
`pay_type` tinyint DEFAULT NULL COMMENT '支付方式: 1=余额, 2=支付宝, 3=微信支付',
`pay_no` varchar(64) DEFAULT NULL COMMENT '第三方支付单号',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=待支付, 1=已支付, 2=已完成, 3=已退款, 4=已取消',
`member_id` bigint DEFAULT NULL COMMENT '关联个人订阅记录ID→ as_user_sub_member.id支付成功后填充',
`remark` varchar(256) DEFAULT NULL COMMENT '备注',
`expire_time` datetime NOT NULL COMMENT '订单过期时间(未支付自动取消,默认 +15min',
`pay_time` datetime DEFAULT NULL COMMENT '实际支付时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
`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_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_product_id` (`product_id`),
KEY `idx_status` (`status`),
KEY `idx_expire` (`expire_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
-- ------------------------------------------------------------
-- 3.3 as_wallet — 用户钱包
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_wallet` (
`id` bigint NOT NULL COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '用户ID→ app_user.user_id一人一钱包',
`balance` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '可用余额',
`frozen_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '冻结金额(退款/提现处理中)',
`total_income` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '累计收入',
`total_expense` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '累计支出',
`version` int NOT NULL DEFAULT 0 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_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户钱包表';
-- ------------------------------------------------------------
-- 3.4 as_wallet_log — 钱包流水
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_wallet_log` (
`id` bigint NOT NULL COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '用户ID→ app_user.user_id',
`amount` decimal(10,2) NOT NULL COMMENT '变动金额(正=收入, 负=支出)',
`type` tinyint NOT NULL COMMENT '类型: 1=充值, 2=消费, 3=退款, 4=邀请返现, 5=提现',
`order_id` bigint DEFAULT NULL COMMENT '关联订单ID→ as_order.id可空',
`balance_after` decimal(10,2) NOT NULL COMMENT '操作后余额(快照,便于对账)',
`remark` varchar(256) DEFAULT NULL COMMENT '说明(如:订阅 Netflix 高级版 3 个月)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='钱包流水表';
-- ------------------------------------------------------------
-- 3.5 as_invite — 邀请关系
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_invite` (
`id` bigint NOT NULL COMMENT '主键',
`inviter_id` bigint NOT NULL COMMENT '邀请人用户ID→ app_user.user_id',
`invitee_id` bigint NOT NULL COMMENT '被邀请人用户ID→ app_user.user_id',
`invite_code` varchar(16) NOT NULL COMMENT '使用的邀请码',
`reward_amount` decimal(10,2) DEFAULT NULL COMMENT '返现金额(首次购买后确定)',
`reward_status` tinyint NOT NULL DEFAULT 0 COMMENT '返现状态: 0=待发放, 1=已发放, 2=已失效',
`reward_time` datetime DEFAULT NULL COMMENT '返现发放时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(注册时间)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_invitee` (`invitee_id`),
KEY `idx_inviter_id` (`inviter_id`),
KEY `idx_invite_code` (`invite_code`),
KEY `idx_reward_status` (`reward_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请关系表';
-- ------------------------------------------------------------
-- 3.6 as_notification — 系统通知
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_notification` (
`id` bigint NOT NULL COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '目标用户ID→ app_user.user_id0=全体广播)',
`title` varchar(128) NOT NULL COMMENT '通知标题',
`content` varchar(1024) NOT NULL COMMENT '通知内容',
`type` tinyint NOT NULL COMMENT '类型: 1=续费提醒, 2=订单通知, 3=系统公告, 4=邀请奖励',
`ref_id` bigint DEFAULT NULL COMMENT '关联业务ID订单ID/订阅ID等按 type 解析)',
`is_read` tinyint NOT NULL DEFAULT 0 COMMENT '是否已读: 0=未读, 1=已读',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_is_read` (`is_read`),
KEY `idx_type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统通知表';
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,129 @@
-- ============================================================
-- 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
-- ============================================================

View File

@@ -0,0 +1,59 @@
-- ============================================================
-- iShare 数据库设计 v3 → v4 增量脚本
-- 修订时间: 2026-02-17
-- 依据: 决策确认决策1-4,6
-- ============================================================
USE pigxx_app;
SET NAMES utf8mb4;
-- ============================================================
-- 决策4: 新增 as_invite_config — 邀请返现规则配置表
-- 返现类型/金额/触发条件均可配置,支持多套规则(启用一套)
-- ============================================================
CREATE TABLE IF NOT EXISTS `as_invite_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(64) NOT NULL COMMENT '规则名称(管理后台展示用)',
`reward_type` tinyint NOT NULL DEFAULT 1 COMMENT '返现类型: 1=固定金额, 2=按比例(%',
`reward_value` decimal(10,4) NOT NULL DEFAULT 0 COMMENT '返现值type=1时为金额CNY; type=2时为百分比如5.00=5%',
`trigger_type` tinyint NOT NULL DEFAULT 1 COMMENT '触发条件: 1=被邀请人首次购买, 2=被邀请人每次购买',
`min_order_amount` decimal(10,2) DEFAULT NULL COMMENT '触发最低订单金额NULL=不限)',
`reward_delay_days` int NOT NULL DEFAULT 0 COMMENT '返现延迟天数0=立即N=N天后发放防退款刷单',
`is_active` tinyint NOT NULL DEFAULT 0 COMMENT '是否启用: 0=禁用, 1=启用(同一时刻只有一条有效)',
`remark` varchar(256) DEFAULT NULL COMMENT '规则备注',
`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_is_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='邀请返现规则配置表(可配置,启用一套)';
-- ============================================================
-- 决策2: Phase 1 无拼车广场
-- as_user_sub_member.status=4等待车主录入凭据一期不启用
-- 修改注释说明,字段值保留供 Phase 2 使用
-- ============================================================
ALTER TABLE `as_user_sub_member`
MODIFY COLUMN `status` tinyint NOT NULL DEFAULT 0
COMMENT '状态: 0=待激活, 1=使用中, 2=已到期, 3=已退订 | Phase2: 4=等待车主录入凭据(拼车广场)';
-- as_sub_product.product_type=2个人发布Phase 1 不启用
-- 修改注释说明
ALTER TABLE `as_sub_product`
MODIFY COLUMN `product_type` tinyint NOT NULL DEFAULT 1
COMMENT '产品类型: 1=自营Phase1启用, 2=个人发布Phase2拼车广场';
-- ============================================================
-- 决策6: 提现功能 Phase 2
-- as_wallet_log.type=5提现一期不启用字段保留
-- ============================================================
ALTER TABLE `as_wallet_log`
MODIFY COLUMN `type` tinyint NOT NULL
COMMENT '流水类型: 1=充值, 2=消费, 3=退款, 4=邀请返现 | Phase2: 5=提现';
-- ============================================================
-- END
-- ============================================================