iShare 数据库设计 v2.0(修订版)
基于原版 v1.0(2023-08 骨架)审查后全面修订
修订时间: 2026-02-17
建表脚本: db/ishare_schema_v2.sql
一、修订说明
1.1 原版问题总结
| 类型 |
数量 |
说明 |
| 🔴 严重缺陷 |
4 项 |
直接导致核心功能不可用 |
| 🟠 重要问题 |
6 项 |
数据类型错误/查询困难 |
| 🟡 设计缺失 |
5 项 |
运营/安全功能不完整 |
1.2 修订内容
| 表名 |
修订类型 |
主要变更 |
as_platform_type |
补充 |
加 status、del_flag、时间戳;sort_order varchar→int |
as_platform |
补充 |
加 description、status、del_flag、时间戳;sort_order varchar→int |
as_sub_plan |
修复+补充 |
platform_id varchar→bigint;capacity varchar→int;加状态/软删除/时间戳 |
as_sub_payroll |
重构 |
sub_plans→sub_plan_id(语义明确);加 duration_months、original_price、is_active;软删除/时间戳 |
as_sub_product |
修复+补充 |
Tags→tags(命名修复);加 platform_id、cover_image、status、total_capacity;product_type/sub_type Long→tinyint |
as_sub_account |
修复+补充 |
4个字段 int→bigint;passwd_salt int→varchar(64);加 encrypt_type、status、软删除/时间戳 |
as_user_sub |
语义修订+修复 |
重定义为"合租槽(共享池)";remark int→varchar;字段 int→bigint;加 product_id、status、expire_time、软删除/时间戳;user_id→host_user_id(语义明确);main_account→account_id |
as_sub_product_comment |
补充 |
加 order_id(购买验证)、is_anonymous、reply_id(追评)、del_flag |
as_user_sub_member |
新增 |
个人订阅记录(原版最大缺失),含 status、start_time、expire_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 |
新增 |
| 字段 |
类型 |
说明 |
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 |
|
订单状态机:
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_user_sub_member 状态机
五、重要设计说明
5.1 容量管理与并发控制
席位超卖防护:
as_sub_product.total_capacity — 总席位(固定值)
as_user_sub.capacity_loaded — 已占用(购买时 +1,退订/到期时 -1)
- 购买时通过 乐观锁 控制:
更新行数 = 0 则说明已满,拒绝购买
5.2 账号凭据加密
- 算法:AES-256-GCM(
encrypt_type = 1)
account_passwd:密文(Base64 编码)
passwd_salt:随机 IV(16字节,Base64 编码,原 int 类型错误已修复)
- 密钥:存于服务端配置/环境变量,不入库
5.3 钱包余额并发控制
as_wallet.version 字段实现乐观锁:
更新行数 = 0 则说明并发冲突或余额不足
5.4 订阅到期任务
定时任务(建议每日 02:00):
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 张表