Files
pigx_ishare/DATABASE_DESIGN_OVERVIEW.md
Admin fda1c8bdda docs(db): v4 定稿 - 决策确认,Phase D 完成
决策1: 余额+支付宝+微信(复用 pigx-pay)
决策2: 拼车广场 Phase2,一期仅自营
决策3: 凭据查看需二次验证(SMS OTP)
决策4: 邀请返现完全可配置,新增 as_invite_config 表
决策5: 已在 v3 改为关联表
决策6: 提现 Phase2,一期只充值+消费

变更:
- 新增 db/ishare_schema_v4_delta.sql(含 as_invite_config)
- 新增 DECISIONS.md(完整决策记录)
- 更新 DATABASE_DESIGN_OVERVIEW.md(v4 定稿,28张表)

Phase D (系统设计) 正式完成
2026-02-17 13:17:01 +01:00

8.0 KiB
Raw Blame History

iShare 数据库设计概要

版本v4决策确认后最终版
修订时间2026-02-17
完整建表 SQLv2 基础版):db/ishare_schema_v2.sql
增量 SQLdb/ishare_schema_v3_delta.sqldb/ishare_schema_v4_delta.sql
完整字段说明:DATABASE_DESIGN_V2.md
设计决策记录:DECISIONS.md


一、表总览28 张表)

1.1 App 基础表(复用 PigX共 9 张)

# 表名 说明 变更
1 app_user 用户 追加 invite_codeinviter_id
2-9 app_role / app_user_role / app_social_details / app_article* / app_page / app_tabbar 框架基础 沿用

1.2 业务表iShare 专属,共 19 张)

平台与产品

# 表名 说明 Phase
10 as_platform_type 平台分类 P1
11 as_platform 流媒体平台 P1
12 as_sub_plan 订阅计划 P1
13 as_sub_payroll 付费方案(月/季/年) P1
14 as_sub_product 合租商品P1仅 type=1 自营) P1
15 as_product_plan_rel 产品-计划 M:N 关联 P1
16 as_sub_account 平台账号凭据AES 加密) P1
17 as_sub_product_comment 商品评价 P1
18 as_banner 首页 Banner 广告位 P1

订阅与订单

# 表名 说明 Phase
19 as_user_sub 合租槽/共享池 P1
20 as_user_sub_member 个人订阅记录status=4 P2用 P1
21 as_order 订单(三种支付方式,复用 pigx-pay P1

钱包与推广

# 表名 说明 Phase
22 as_recharge 充值单(人工/支付宝/微信) P1
23 as_wallet 用户钱包(乐观锁防并发) P1
24 as_wallet_log 钱包流水type=5 提现 P2用 P1
25 as_invite 邀请关系与返现记录 P1
26 as_invite_config 邀请返现规则配置(可配置) P1
27 as_notification 系统通知 P1

二、核心 ER 关系概览

as_platform_type (1) ──< (N) as_platform
as_platform      (1) ──< (N) as_sub_plan
as_sub_plan      (1) ──< (N) as_sub_payroll
as_sub_plan      (N) >──< (N) as_sub_product   [via as_product_plan_rel]
as_platform      (1) ──< (N) as_sub_product    [platform_id 冗余]

as_sub_product   (1) ──< (N) as_sub_account
as_sub_product   (1) ──< (N) as_user_sub
as_user_sub      (1) ──< (N) as_user_sub_member

as_sub_product   (1) ──< (N) as_order
as_order         (1) ──< (1) as_user_sub_member [order_id]

app_user (1) ──< (1) as_wallet
as_wallet (1) ──< (N) as_wallet_log
as_wallet (1) ──< (N) as_recharge              [user_id]
app_user  (1) ──< (N) as_order
app_user  (1) ──< (N) as_recharge
app_user  (1) ──< (N) as_user_sub_member
app_user  (1) ──< (N) as_invite [as inviter]
app_user  (1) ──< (1) as_invite [as invitee]
app_user  (1) ──< (N) as_notification

as_invite_config (1:active) ──→ as_invite      [规则快照到 reward_amount]

三、关键状态机

3.1 订单as_order

[待支付(0)] ─→ 15min 超时 ─→ [已取消(4)]
[待支付(0)] ─→ 支付成功   ─→ [已支付(1)] ─→ 激活订阅 ─→ [已完成(2)]
[已支付/完成] ─→ 退款      ─→ [已退款(3)]

支付方式: 1=余额 / 2=支付宝 / 3=微信(均通过 pigx-pay 模块处理)

3.2 充值单as_recharge

人工充值(管理员): 直接创建 status=1 记录
外部支付:
  [待支付(0)] ─→ 支付成功 ─→ [已到账(1)] ─→ as_wallet.balance +amount
            ─→ 15min 超时 ─→ [已取消(3)]
            ─→ 支付失败   ─→ [失败(2)]

3.3 个人订阅as_user_sub_member

[待激活(0)] ─→ 订单完成 ─→ [使用中(1)]
[使用中(1)] ─→ 到期      ─→ [已到期(2)] ─→ 续费 → 新建记录回到[待激活(0)]
            ─→ 主动退订  ─→ [已退订(3)]

[Phase2] 拼车广场付款后 → [等待车主录入凭据(4)] → 车主录入 → [使用中(1)]

续费策略:新建 member 记录旧记录置为2=已到期(保留历史,便于对账)

3.4 合租槽as_user_sub

[可加入(0)] ─→ 席位满 ─→ [已满(1)]
[可加入/已满] ─→ 到期     ─→ [已到期(2)]
             ─→ 车主关闭 ─→ [已关闭(3)]

四、关键设计机制

4.1 席位超卖防护(乐观锁)

UPDATE as_user_sub
SET capacity_loaded = capacity_loaded + 1
WHERE id = ? AND capacity_loaded < capacity;
-- affected rows = 0 → 席位已满,拒绝购买

4.2 账号凭据安全

  • 存储AES-256-GCM 加密,密钥存环境变量不入库
  • 查看:需二次验证SMS OTP 或密码重输OTP 存 Redis TTL 5min
  • 返回:服务端解密后返回明文,不记录日志,前端倒计时隐藏

4.3 支付集成

  • 复用 pigx-pay 模块(已集成支付宝 + 微信)
  • 购买商品 → as_orderpay_type 2/3→ pigx-pay 回调 → 更新订单状态 → 创建 member 记录
  • 余额充值 → as_rechargepay_type 2/3→ pigx-pay 回调 → 更新充值单 → 增加钱包余额

4.4 邀请返现(可配置规则)

1. 管理后台配置 as_invite_config选择激活规则
2. 被邀请人注册 → 写入 as_invite 记录
3. 触发条件满足(首次购买 or 每次购买)
   → 读取当前 is_active=1 的 as_invite_config
   → 计算返现金额(快照到 as_invite.reward_amount
   → 延迟发放reward_delay_days 天后)
   → as_wallet_logtype=4+ as_wallet.balance +reward_amount

4.5 钱包余额并发控制(乐观锁)

UPDATE as_wallet
SET balance = balance - ?, version = version + 1
WHERE user_id = ? AND version = ? AND balance >= ?;
-- affected rows = 0 → 并发冲突或余额不足

4.6 订阅到期定时任务(每日 02:00

1. expire_time < now()+7天 且 status=1 → 推送续费提醒
2. expire_time < now()    且 status=1 → 置 status=2capacity_loaded -1
3. as_order.expire_time < now() 且 status=0 → 置 status=4取消
4. as_recharge.expire_time < now() 且 status=0 → 置 status=3取消

五、关键索引清单

索引字段 用途
as_user_sub_member (user_id, status) 我的订阅列表
as_user_sub_member (expire_time, status) 定时任务扫描到期
as_order (user_id, status) 用户订单列表
as_notification (user_id, is_read) 未读通知数
as_user_sub (product_id, status) 商品可用合租槽
as_sub_account (product_id, status) 产品账号列表
as_sub_product (product_type, status) 商品分类查询
as_banner (status, sort_order) 首页 Banner
as_recharge (user_id, status) 充值记录查询
as_product_plan_rel (product_id) / (plan_id) M:N 双向查询
as_invite_config (is_active) 读取当前规则

六、版本变更记录

版本 变更内容
v1 原版骨架2023-08有多项严重缺陷
v2 全面修订修复15项缺陷新增6张表23张
v3 评审修订修复7个问题新增3张表27张
v4 决策确认:新增 as_invite_config28张Phase 1/2 范围明确

七、所有待决策项(已全部确认

# 问题 决策
1 付费方式一期 C - 余额+支付宝+微信(复用 pigx-pay
2 拼车广场 C - Phase 1 不做Phase 2 追加
3 凭据展示 B - 二次验证SMS OTP 或密码重输)
4 邀请返现 完全可配置(类型/金额/触发条件),无上限
5 M:N 关联 v3 已改为 as_product_plan_rel
6 提现功能 B - Phase 2一期只充值+消费

Phase D系统设计 全部完成


最后更新2026-02-17 · v4 定稿