Files
pigx_ishare/DATABASE_DESIGN.md
2026-02-16 23:20:59 +08:00

281 lines
10 KiB
Markdown
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 (AiShare) 数据库设计文档
> 模块: `as-app-server` — iShare 项目新增的核心业务模块pigx-5.2 原版中不存在)
>
> 生成日期: 2026-02-16
---
## 一、数据库表清单
### 1. 核心业务表as_* — iShare 新增)
| 表名 | 用途 |
|------|------|
| `as_platform` | 流媒体平台Netflix、Spotify 等) |
| `as_platform_type` | 平台分类(视频、音乐等) |
| `as_sub_plan` | 订阅计划(如 Netflix 标准版、高级版) |
| `as_sub_payroll` | 付费方案(月付/季付/年付 + 价格) |
| `as_sub_account` | 订阅账号(实际的平台登录凭据) |
| `as_sub_product` | 订阅产品(面向用户的合租商品) |
| `as_sub_product_comment` | 产品评价 |
| `as_user_sub` | 用户订阅关系(用户参与的合租) |
### 2. App 基础表app_* — 来自 pigx-app 模板SQL 中有建表语句)
| 表名 | 用途 |
|------|------|
| `app_user` | App 用户 |
| `app_role` | App 角色 |
| `app_user_role` | 用户-角色关联 |
| `app_social_details` | 社交登录配置(微信小程序等) |
| `app_article` | 文章资讯 |
| `app_article_category` | 文章分类 |
| `app_article_collect` | 文章收藏 |
| `app_page` | 页面装修(首页/个人中心 JSON 配置) |
| `app_tabbar` | 底部导航栏 |
---
## 二、核心业务表详细结构
### 2.1 `as_platform` — 流媒体平台
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `platform_name` | varchar | 平台名称 |
| `platform_type` | int | 平台类型(关联 as_platform_type0=全部 |
| `icon` | varchar | 应用图标 URL |
| `company` | varchar | 所属公司 |
| `website` | varchar | 平台官网 |
| `sort_order` | varchar | 排序 |
| `product_code` | varchar | 产品编码(格式: 类型_名称_id |
### 2.2 `as_platform_type` — 平台类型
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `name` | varchar | 类型名称视频、音乐、AI |
| `platform_type` | int | 类型编号0=全部 |
| `sort_order` | varchar | 排序 |
### 2.3 `as_sub_plan` — 订阅计划
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 计划 ID |
| `name` | varchar | 计划名称(如:标准版、高级版) |
| `platform_id` | varchar | 所属平台 ID |
| `capacity` | varchar | 用户容量(可共享席位数) |
| `remark` | varchar | 备注 |
| `sort_order` | varchar | 排序 |
### 2.4 `as_sub_payroll` — 付费方案
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `sub_plans` | bigint | 关联的订阅计划 ID |
| `platform_id` | int | 平台 ID |
| `payroll` | int | 付费周期1=月付, 2=季付, 3=年付 |
| `price` | decimal | 价格 |
| `currency` | varchar | 货币CNY/USD 等) |
| `region` | varchar | 地区 |
| `product_code` | varchar | 产品编码 |
### 2.5 `as_sub_account` — 订阅账号
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `product_id` | bigint | 关联产品 ID |
| `sub_plan_id` | int | 订阅计划 ID |
| `user_id` | int | 账号持有者(主用户) |
| `sub_payroll_id` | int | 付费方案 ID |
| `region` | varchar | 地区 |
| `share_type` | int | 分享类型 |
| `account_type` | int | 账号类型 |
| `renew_date` | datetime | 续费日期 |
| `platform_id` | int | 平台 ID |
| `account_name` | varchar | 平台登录用户名 |
| `account_passwd` | varchar | 平台登录密码 |
| `passwd_salt` | int | 密码盐值 |
### 2.6 `as_sub_product` — 订阅产品(合租商品)
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `star` | int | 综合评分 |
| `title` | varchar | 产品标题 |
| `description` | varchar | 描述 |
| `tags` | varchar | 标签(逗号分隔) |
| `sub_plan_ids` | varchar | 关联的订阅计划 ID 列表 |
| `amount` | decimal | 总价 |
| `user_id` | bigint | 发布者用户 ID |
| `product_type` | bigint | 产品类型1=自营, 2=个人 |
| `create_time` | datetime | 创建时间 |
| `update_time` | datetime | 更新时间 |
| `product_code` | varchar | 产品编码类型_名称_id |
| `sub_type` | bigint | 订阅类型1=单品, 2=多品(组合) |
### 2.7 `as_sub_product_comment` — 产品评价
> 注: 实体类 `@TableName` 误标为 `as_sub_product`,实际应为 `as_sub_product_comment`
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `star` | int | 评分 |
| `comment` | varchar | 评价内容 |
| `user_id` | bigint | 评价用户 |
| `product_id` | bigint | 关联产品 ID |
| `create_time` | datetime | 创建时间 |
| `update_time` | datetime | 更新时间 |
### 2.8 `as_user_sub` — 用户订阅关系
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `platform_id` | int | 平台 ID |
| `capacity` | int | 总容量(席位数) |
| `capacity_loaded` | int | 已占用容量 |
| `plan_id` | int | 订阅计划 ID |
| `user_id` | int | 用户 ID |
| `main_account` | int | 主账号 ID关联 as_sub_account |
| `region` | varchar | 地区 |
| `target_ip` | varchar | 目标 IP用于区域限制 |
| `remark` | int | 备注 |
---
## 三、App 基础表详细结构
### 3.1 `app_user` — App 用户
| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| `user_id` | bigint | PK | 用户 ID |
| `username` | varchar(255) | | 用户名 |
| `password` | varchar(255) | | 密码BCrypt |
| `salt` | varchar(255) | | 盐值 |
| `phone` | varchar(20) | | 手机号 |
| `avatar` | varchar(255) | | 头像 |
| `nickname` | varchar(64) | | 昵称 |
| `name` | varchar(64) | | 姓名 |
| `email` | varchar(128) | | 邮箱 |
| `wx_openid` | varchar(32) | | 微信 OpenID |
| `lock_flag` | char(1) | 默认 '0' | 锁定状态 |
| `del_flag` | char(1) | 默认 '0' | 删除标志 |
| `tenant_id` | bigint | NOT NULL | 租户 ID |
| `create_by/update_by` | varchar(64) | | 操作人 |
| `create_time/update_time` | datetime | | 时间戳 |
| `last_modified_time` | datetime | | 最后密码修改时间 |
### 3.2 `app_role` — 角色表
| 字段 | 类型 | 说明 |
|------|------|------|
| `role_id` | bigint (PK) | 角色 ID |
| `role_name` | varchar(64) | 角色名 |
| `role_code` | varchar(64) | 角色编码(如 APP_USER |
| `role_desc` | varchar(255) | 描述 |
| `tenant_id` | bigint | 租户 ID |
### 3.3 `app_user_role` — 用户角色关联
| 字段 | 类型 | 说明 |
|------|------|------|
| `user_id` | bigint (PK) | 用户 ID |
| `role_id` | bigint (PK) | 角色 ID |
### 3.4 其他 App 表
- **`app_social_details`**: 社交登录配置type/app_id/app_secret/redirect_url
- **`app_article`**: 文章title/intro/content/author/visit/sort/cid→分类
- **`app_article_category`**: 文章分类name/sort/is_show
- **`app_article_collect`**: 文章收藏user_id/article_id
- **`app_page`**: 页面装修page_type/page_name/page_data JSON
- **`app_tabbar`**: 底部导航name/selected/unselected 图标/link JSON
所有 app_* 表均包含 `del_flag`, `create_by`, `update_by`, `create_time`, `update_time`, `tenant_id` 公共字段。
---
## 四、ER 关系
```
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_plans]
as_sub_plan (N) >──< (N) as_sub_product [sub_plan_ids, 逗号分隔]
as_sub_product (1) ──< (N) as_sub_product_comment [product_id]
as_sub_product (1) ──< (N) as_sub_account [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_sub_plan (1) ──< (N) as_user_sub [plan_id]
as_sub_account (1) ──< (N) as_user_sub [main_account]
app_user (1) ──< (N) as_sub_product [user_id — 产品发布者]
app_user (1) ──< (N) as_sub_account [user_id — 账号持有者]
app_user (1) ──< (N) as_user_sub [user_id — 订阅参与者]
app_user (1) ──< (N) as_sub_product_comment [user_id]
app_user (N) >──< (N) app_role [通过 app_user_role]
app_article_category (1) ──< (N) app_article [cid]
app_user (1) ──< (N) app_article_collect [user_id]
app_article (1) ──< (N) app_article_collect [article_id]
```
---
## 五、核心业务模型总结
iShare 是一个 **流媒体账号合租平台**,核心业务流程:
```
平台类型 (as_platform_type)
└── 平台 (as_platform): Netflix, Spotify, ChatGPT...
└── 订阅计划 (as_sub_plan): 标准版、高级版(含容量/席位数)
└── 付费方案 (as_sub_payroll): 月/季/年付 + 价格
└── 订阅账号 (as_sub_account): 实际登录凭据
订阅产品 (as_sub_product): 面向用户的合租商品
├── 关联多个订阅计划 (sub_plan_ids)
├── 产品类型: 自营(1) / 个人(2)
├── 订阅类型: 单品(1) / 多品组合(2)
└── 产品评价 (as_sub_product_comment)
用户订阅 (as_user_sub): 用户参与合租
├── 关联平台、计划、主账号
└── 容量管理 (capacity / capacity_loaded)
```
### 关键业务概念
1. **平台 (Platform)**: 流媒体服务商,按类型分类
2. **订阅计划 (SubPlan)**: 平台的会员等级,定义席位容量
3. **付费方案 (SubPayroll)**: 计划的定价策略(支持多地区多货币)
4. **订阅账号 (SubAccount)**: 实际的平台账号密码,由主用户持有
5. **订阅产品 (SubProduct)**: 合租商品,可组合多个计划,支持自营/个人发布
6. **用户订阅 (UserSub)**: 用户加入合租的记录,跟踪席位占用
7. **产品评价 (SubProductComment)**: 用户对合租产品的评分和评论
### 代码注意事项
⚠️ `AsSubProductComment` 实体类的 `@TableName("as_sub_product")` 可能是 bug应为 `as_sub_product_comment`
---
## 六、SQL 建表语句
核心业务表as_***没有在 SQL 脚本中找到建表语句**,仅在 Java 实体类中定义。这些表可能通过以下方式创建:
- MyBatis-Plus 自动建表
- 手动在数据库中创建
- 尚未提交的 migration 脚本
App 基础表的完整建表语句见: `db/999pigxx_app.sql`