Files
pigx_ishare/DATABASE_DESIGN_V2.md
阿米狗 0192fc3523 feat: database design v2.0 - fix 15 defects, add 6 new tables
fixes:
- as_platform_type/platform: add status/del_flag/timestamps, sort_order varchar->int
- as_sub_plan: platform_id varchar->bigint, capacity varchar->int
- as_sub_payroll: rename sub_plans->sub_plan_id, add duration_months/original_price/is_active
- as_sub_product: fix Tags->tags naming bug, add platform_id/cover_image/status/total_capacity, type fields Long->tinyint
- as_sub_account: 4 int->bigint fields, passwd_salt int->varchar(64), add encrypt_type/status
- as_user_sub: remark int->varchar(bug fix), int->bigint fields, add product_id/status/expire_time, rename user_id->host_user_id/main_account->account_id
- as_sub_product_comment: add order_id/is_anonymous/reply_id/del_flag

new tables:
- as_user_sub_member: individual subscription record (critical missing table)
- as_order: full order table with state machine
- as_wallet: user wallet with optimistic lock
- as_wallet_log: balance transaction log
- as_invite: invitation relationship
- as_notification: system notifications
2026-02-17 19:36:55 +08:00

19 KiB
Raw Blame History

iShare 数据库设计 v2.0(修订版)

基于原版 v1.02023-08 骨架)审查后全面修订 修订时间: 2026-02-17 建表脚本: db/ishare_schema_v2.sql


一、修订说明

1.1 原版问题总结

类型 数量 说明
🔴 严重缺陷 4 项 直接导致核心功能不可用
🟠 重要问题 6 项 数据类型错误/查询困难
🟡 设计缺失 5 项 运营/安全功能不完整

1.2 修订内容

表名 修订类型 主要变更
as_platform_type 补充 statusdel_flag、时间戳;sort_order varchar→int
as_platform 补充 descriptionstatusdel_flag、时间戳;sort_order varchar→int
as_sub_plan 修复+补充 platform_id varchar→bigintcapacity varchar→int;加状态/软删除/时间戳
as_sub_payroll 重构 sub_planssub_plan_id(语义明确);加 duration_monthsoriginal_priceis_active;软删除/时间戳
as_sub_product 修复+补充 Tagstags(命名修复);加 platform_idcover_imagestatustotal_capacityproduct_type/sub_type Long→tinyint
as_sub_account 修复+补充 4个字段 int→bigintpasswd_salt int→varchar(64);加 encrypt_typestatus、软删除/时间戳
as_user_sub 语义修订+修复 重定义为"合租槽(共享池)"remark int→varchar;字段 int→bigintproduct_idstatusexpire_time、软删除/时间戳;user_idhost_user_id(语义明确);main_accountaccount_id
as_sub_product_comment 补充 order_id(购买验证)、is_anonymousreply_id(追评)、del_flag
as_user_sub_member 新增 个人订阅记录(原版最大缺失),含 statusstart_timeexpire_time
as_order 新增 完整订单表(含状态机、价格快照、支付信息)
as_wallet 新增 用户钱包(含乐观锁 version 防并发)
as_wallet_log 新增 钱包流水(含 balance_after 快照便于对账)
as_invite 新增 邀请关系与返现
as_notification 新增 系统通知(续费提醒/订单/公告/奖励)
app_user 追加字段 invite_code(专属邀请码)、inviter_id

二、表结构v2.0

2.1 as_platform_type — 平台类型

字段 类型 说明
id bigint PK 主键
name varchar(64) NOT NULL 类型名称(视频/音乐/AI等
platform_type int DEFAULT 0 类型编号0=全部,用于筛选)
sort_order int DEFAULT 0 排序权重(升序,原为 varchar
status tinyint DEFAULT 1 新增 0=禁用, 1=启用
del_flag char(1) DEFAULT '0' 新增 软删除
create_time datetime 新增
update_time datetime 新增

2.2 as_platform — 流媒体平台

字段 类型 说明
id bigint PK 主键
platform_name varchar(128) NOT NULL 平台名称
platform_type int DEFAULT 0 关联类型编号
icon varchar(512) 图标 URL
description varchar(512) 新增 平台简介
company varchar(128) 所属公司
website varchar(256) 官网
sort_order int DEFAULT 0 排序(原为 varchar
status tinyint DEFAULT 1 新增 0=禁用, 1=启用
del_flag char(1) DEFAULT '0' 新增 软删除
create_time datetime 新增
update_time datetime 新增

2.3 as_sub_plan — 订阅计划

字段 类型 说明
id bigint PK 主键
name varchar(128) NOT NULL 计划名称
platform_id bigint NOT NULL 所属平台(原为 varchar已修复
capacity int NOT NULL DEFAULT 1 席位容量(原为 varchar已修复
remark varchar(256) 备注
sort_order int DEFAULT 0 排序
status tinyint DEFAULT 1 新增 0=禁用, 1=启用
del_flag char(1) DEFAULT '0' 新增 软删除
create_time datetime 新增
update_time datetime 新增

2.4 as_sub_payroll — 付费方案

字段 类型 说明
id bigint PK 主键
sub_plan_id bigint NOT NULL 所属订阅计划(sub_plans 注释混乱,已重命名+澄清
platform_id bigint NOT NULL 平台ID冗余
payroll tinyint NOT NULL 周期: 1=月付, 2=季付, 3=年付
duration_months int NOT NULL 新增 实际月数: 1/3/12
price decimal(10,2) 售价
original_price decimal(10,2) 新增 划线价(显示折扣用)
currency varchar(8) DEFAULT 'CNY' 货币单位
region varchar(64) 适用地区
is_active tinyint DEFAULT 1 新增 0=下架, 1=上架
del_flag char(1) DEFAULT '0' 新增 软删除
create_time datetime 新增
update_time datetime 新增

2.5 as_sub_product — 订阅产品(合租商品)

字段 类型 说明
id bigint PK 主键
title varchar(256) NOT NULL 产品标题
description varchar(1024) 描述
cover_image varchar(512) 新增 封面图 URL
tags varchar(256) 标签(逗号分隔,原字段名 Tags 大写 Bug 已修复
platform_id bigint NOT NULL 新增 所属平台(加速查询)
sub_plan_ids varchar(256) 关联计划ID列表逗号分隔保留现状
product_type tinyint NOT NULL DEFAULT 1 1=自营, 2=个人(原为 Long已修复
sub_type tinyint NOT NULL DEFAULT 1 1=单品, 2=多品组合(原为 Long已修复
total_capacity int NOT NULL DEFAULT 1 新增 总席位数
amount decimal(10,2) 基准月价
star decimal(3,1) DEFAULT 0.0 综合评分(由评价聚合更新)
status tinyint NOT NULL DEFAULT 0 新增 0=草稿, 1=上架, 2=下架, 3=售完
user_id bigint 发布者用户ID
del_flag char(1) DEFAULT '0' 新增 软删除
create_by / update_by varchar(64) 新增
create_time / update_time datetime

2.6 as_sub_account — 平台账号凭据

字段 类型 说明
id bigint PK 主键
product_id bigint 关联产品ID
sub_plan_id bigint 订阅计划ID原 int已修复
sub_payroll_id bigint 付费方案ID原 int已修复
platform_id bigint NOT NULL 平台ID原 int已修复
user_id bigint NOT NULL 账号持有者(原 int已修复
account_name varchar(256) NOT NULL 平台登录用户名/邮箱
account_passwd varchar(512) NOT NULL 加密后的密码
passwd_salt varchar(64) NOT NULL 加密盐值(原 int 已修复为 varchar(64)
encrypt_type tinyint NOT NULL DEFAULT 1 新增 加密算法: 1=AES-256-GCM
region varchar(64) 账号地区
share_type tinyint 分享类型
account_type tinyint 账号类型
renew_date datetime 账号下次续费日
status tinyint NOT NULL DEFAULT 0 新增 0=正常, 1=已失效, 2=异常/被封
del_flag char(1) DEFAULT '0' 新增 软删除
create_time / update_time datetime 新增

2.7 as_user_sub — 合租槽(共享池)

语义修订:代表"一个共享席位池",不代表个人订阅。个人订阅记录见 as_user_sub_member

字段 类型 说明
id bigint PK 主键
product_id bigint NOT NULL 新增 关联产品
plan_id bigint NOT NULL 订阅计划(原 int已修复
platform_id bigint NOT NULL 平台(冗余)
host_user_id bigint NOT NULL 重命名自 user_id车主用户ID语义明确
account_id bigint 重命名自 main_account,关联凭据(语义明确)
capacity int NOT NULL 总席位数
capacity_loaded int NOT NULL DEFAULT 0 已占用席位数
region varchar(64) 地区
status tinyint NOT NULL DEFAULT 0 新增 0=可加入, 1=已满, 2=已到期, 3=已关闭
expire_time datetime 新增 合租槽到期时间
remark varchar(512) 车主说明(原 int已修复为 varchar
del_flag char(1) DEFAULT '0' 新增 软删除
create_time / update_time datetime 新增

2.8 as_sub_product_comment — 产品评价

字段 类型 说明
id bigint PK 主键
product_id bigint NOT NULL 关联产品
user_id bigint NOT NULL 评价用户
order_id bigint 新增 关联订单(验证是否购买过)
star tinyint NOT NULL 评分 1-5
comment varchar(1024) 评价内容
is_anonymous tinyint DEFAULT 0 新增 0=公开, 1=匿名
reply_id bigint 新增 回复的评价ID追评/商家回复)
del_flag char(1) DEFAULT '0' 新增 软删除
create_time / update_time datetime

2.9 as_user_sub_member — 个人订阅记录 【新增,原版最大缺失】

原版无此表,导致"哪些用户加入了哪个合租位"完全无法追踪。

字段 类型 说明
id bigint PK 主键
sub_id bigint NOT NULL 所在合租槽(→ as_user_sub.id
user_id bigint NOT NULL 订阅用户
order_id bigint NOT NULL 来源订单(→ as_order.id
payroll_id bigint NOT NULL 购买的付费方案
status tinyint NOT NULL DEFAULT 0 0=待激活, 1=使用中, 2=已到期, 3=已退订
start_time datetime NOT NULL 订阅开始时间
expire_time datetime NOT NULL 订阅到期时间
del_flag char(1) DEFAULT '0' 软删除
create_time / update_time datetime
UK: (sub_id, user_id) 同一合租槽同一用户只能有一条有效记录

2.10 as_order — 订单表 【新增】

字段 类型 说明
id bigint PK 主键
order_no varchar(32) UNIQUE 业务订单号AS+时间戳+随机)
user_id bigint NOT NULL 购买用户
product_id bigint NOT NULL 商品
payroll_id bigint NOT NULL 付费方案
original_amount decimal(10,2) 原价快照(防价格变动)
discount_amount decimal(10,2) DEFAULT 0 优惠金额
amount decimal(10,2) 实付金额
pay_type tinyint 1=余额, 2=支付宝, 3=微信
pay_no varchar(64) 第三方支付单号
status tinyint NOT NULL DEFAULT 0 0=待支付, 1=已支付, 2=已完成, 3=已退款, 4=已取消
member_id bigint 关联个人订阅记录(支付后填充)
expire_time datetime NOT NULL 订单过期时间(默认 +15min
pay_time datetime 实际支付时间
del_flag char(1) DEFAULT '0' 软删除
create_time / update_time datetime

订单状态机:

[待支付] → 15分钟超时 → [已取消]
[待支付] → 支付成功   → [已支付] → 激活订阅 → [已完成]
[已支付/已完成] → 退款 → [已退款]

2.11 as_wallet — 用户钱包 【新增】

字段 类型 说明
id bigint PK 主键
user_id bigint UNIQUE 用户(一人一钱包)
balance decimal(10,2) 可用余额
frozen_amount decimal(10,2) 冻结金额
total_income decimal(10,2) 累计收入
total_expense decimal(10,2) 累计支出
version int DEFAULT 0 乐观锁版本号(防并发余额错误)
create_time / update_time datetime

2.12 as_wallet_log — 钱包流水 【新增】

字段 类型 说明
id bigint PK 主键
user_id bigint NOT NULL 用户
amount decimal(10,2) 金额(正=收入, 负=支出)
type tinyint 1=充值, 2=消费, 3=退款, 4=邀请返现, 5=提现
order_id bigint 关联订单(可空)
balance_after decimal(10,2) 操作后余额快照(对账用)
remark varchar(256) 说明
create_time datetime

2.13 as_invite — 邀请关系 【新增】

字段 类型 说明
id bigint PK 主键
inviter_id bigint NOT NULL 邀请人
invitee_id bigint NOT NULL UNIQUE 被邀请人(一个人只有一条邀请记录)
invite_code varchar(16) 使用的邀请码
reward_amount decimal(10,2) 返现金额
reward_status tinyint DEFAULT 0 0=待发放, 1=已发放, 2=已失效
reward_time datetime 返现时间
create_time datetime 注册时间

2.14 as_notification — 系统通知 【新增】

字段 类型 说明
id bigint PK 主键
user_id bigint NOT NULL 目标用户0=全体广播)
title varchar(128) 通知标题
content varchar(1024) 通知内容
type tinyint 1=续费提醒, 2=订单通知, 3=系统公告, 4=邀请奖励
ref_id bigint 关联业务ID按 type 解析)
is_read tinyint DEFAULT 0 0=未读, 1=已读
create_time datetime

三、完整 ER 关系图v2.0

as_platform_type (1) ──< (N) as_platform          [platform_type]
as_platform      (1) ──< (N) as_sub_plan           [platform_id]
as_sub_plan      (1) ──< (N) as_sub_payroll        [sub_plan_id]
as_sub_plan      (N) >──< (N) as_sub_product       [sub_plan_ids 逗号分隔]
as_platform      (1) ──< (N) as_sub_product        [platform_id 冗余]

as_sub_product   (1) ──< (N) as_sub_product_comment [product_id]
as_sub_product   (1) ──< (N) as_sub_account         [product_id]
as_sub_product   (1) ──< (N) as_user_sub            [product_id]
as_sub_plan      (1) ──< (N) as_sub_account         [sub_plan_id]
as_sub_payroll   (1) ──< (N) as_sub_account         [sub_payroll_id]

as_user_sub      (1) ──< (N) as_user_sub_member    [sub_id]  ← 新增关键表
as_order         (1) ──< (1) as_user_sub_member    [order_id]
as_sub_payroll   (1) ──< (N) as_user_sub_member    [payroll_id]

as_sub_product   (1) ──< (N) as_order              [product_id]
as_sub_payroll   (1) ──< (N) as_order              [payroll_id]
as_order         (1) ──< (N) as_wallet_log         [order_id]

app_user (1) ──< (1) as_wallet                     [user_id]
as_wallet (1) ──< (N) as_wallet_log                [user_id]

app_user (1) ──< (N) as_order                      [user_id]
app_user (1) ──< (N) as_user_sub [as host]         [host_user_id]
app_user (1) ──< (N) as_user_sub_member            [user_id]
app_user (1) ──< (N) as_sub_product                [user_id 发布者]
app_user (1) ──< (N) as_sub_account                [user_id 持有者]
app_user (1) ──< (N) as_sub_product_comment        [user_id]
app_user (1) ──< (N) as_notification               [user_id]

app_user (1) ──< (N) as_invite [as inviter]        [inviter_id]
app_user (1) ──< (1) as_invite [as invitee]        [invitee_id]

四、as_user_sub_member 状态机

     购买成功(order paid)
[待激活] ──────────────→ [使用中]
                            │
                ┌───────────┤
                │           │
           主动退订       到期
                │           │
                ↓           ↓
           [已退订]      [已到期]
                            │
                          续费
                            │
                            ↓
                         [使用中]

五、重要设计说明

5.1 容量管理与并发控制

席位超卖防护:

  • as_sub_product.total_capacity — 总席位(固定值)
  • as_user_sub.capacity_loaded — 已占用(购买时 +1退订/到期时 -1
  • 购买时通过 乐观锁 控制:
    UPDATE as_user_sub
    SET capacity_loaded = capacity_loaded + 1
    WHERE id = ? AND capacity_loaded < capacity
    
    更新行数 = 0 则说明已满,拒绝购买

5.2 账号凭据加密

  • 算法AES-256-GCMencrypt_type = 1
  • account_passwd密文Base64 编码)
  • passwd_salt:随机 IV16字节Base64 编码,原 int 类型错误已修复
  • 密钥:存于服务端配置/环境变量,不入库

5.3 钱包余额并发控制

  • as_wallet.version 字段实现乐观锁:
    UPDATE as_wallet
    SET balance = balance - ?, version = version + 1
    WHERE user_id = ? AND version = ? AND balance >= ?
    
    更新行数 = 0 则说明并发冲突或余额不足

5.4 订阅到期任务

定时任务(建议每日 02:00

1. 查询 expire_time < now() + 7d 且 status = 1 的 as_user_sub_member
   → 生成 as_notificationtype=1续费提醒

2. 查询 expire_time < now() 且 status = 1 的 as_user_sub_member
   → UPDATE status = 2已到期
   → UPDATE as_user_sub SET capacity_loaded = capacity_loaded - 1

5.5 评价限制

  • 写评价前校验:as_order 存在且 status IN (2,3)user_id 匹配
  • star 范围 1-5服务端强制校验
  • as_sub_product.star 由定时任务或触发器聚合更新AVG

六、数据库表总览v2.0

# 表名 类型 状态
1 app_user App基础 追加2字段
2 app_role App基础 沿用
3 app_user_role App基础 沿用
4 app_social_details App基础 沿用
5 app_article_category App基础 沿用
6 app_article App基础 沿用
7 app_article_collect App基础 沿用
8 app_page App基础 沿用
9 app_tabbar App基础 沿用
10 as_platform_type 业务 修订
11 as_platform 业务 修订
12 as_sub_plan 业务 修订
13 as_sub_payroll 业务 修订
14 as_sub_product 业务 修订
15 as_sub_account 业务 修订
16 as_user_sub 业务 修订(语义重定义)
17 as_sub_product_comment 业务 修订
18 as_user_sub_member 业务 新增
19 as_order 业务 新增
20 as_wallet 业务 新增
21 as_wallet_log 业务 新增
22 as_invite 业务 新增
23 as_notification 业务 新增

合计9 张 App 基础表 + 14 张业务表 = 23 张表