公共表
平台表(sys_platform)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| name | VARCHAR(32) | NOT NULL | 平台名称, Android Windows Linux iOS macOS Harmony OS Fuchsia Web |
| ## 应用表(sys_app) |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| name | VARCHAR(32) | NOT NULL | 应用名称 |
| bundle_id | VARCHAR(32) | NOT NULL | 应用 bundle id |
| platform_ids | JSON | 应用支持的平台,为空时表示支持所有平台 |
应用包表(sys_app_binary_info)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK, NOT NULL | 平台 id |
| version_code | INT UNSIGNED | NOT NULL | 版本号,UNIQUE |
| version_name | VARCHAR(32) | NOT NULL | 版本名 |
| is_force_update | BOOLEAN | DEFAULT FALSE | 是否强制更新 |
| url | TEXT | NOT NULL | 下载 url |
| release_note_id | BIGINT | NOT NULL | 发行日志 Id |
| length | BIGINT | NOT NULL | 应用包大小 |
| ## 用户表(sys_user) |
nick_name & email & phone 被称为 account.
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| nick_name | VARCHAR(64) | UNIQUE NOT NULL | 昵称 |
| password | VARBINARY(128) | SHA-256 | |
| VARCHAR(255) | UNIQUE | 邮箱 | |
| avatar | TEXT | 头像 | |
| phone | VARCHAR(64) | UNIQUE | 电话 |
| gender | TINYINT | 性别,0 -女,1 - 男 | |
| addr | TEXT | 地址 | |
| birthday | DATETIME | 生日 | |
| profile_bio | TEXT | 用户简介 | |
| qq_uid | VARCHAR(64) | QQ 用户 id | |
| qq_nick_name | VARCHAR(64) | QQ 昵称 | |
| wx_uid | VARCHAR(64) | 微信用户 id | |
| wx_nick_name | VARCHAR(64) | 微信用户昵称 | |
| register_time | DATETIME | DEFAULT CURRENT_TIMESTAMP | 注册时间 |
| last_login_time | DATETIME | 最后登录时间 | |
| last_logout_time | DATETIME | 最后登出时间 | |
| block_end_time | DATETIME | 被封禁的结束时间,如果为空表示没有被封禁 | |
| ## 客户端配置表(sys_client_config) |
客户端的在线配置
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id, 如果为空则表示全部平台 |
| version_code_range | VARCHAR(32) | 应用版本号在 version_code_range 范围内,则配置生效,为空表示全部版本都生效 | |
| config | JSON | 配置内容,见 ClientConifg |
ClientConifg
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| display_mode | TINYINT | DEFAULT 0 | 客户端显示模式:0 - 正常模式,1 - 默哀模式 |
| ## 客户端设备表(sys_client_device) | |||
| 1. 根据 uid 和 aid 限制用户登录设备数。 | |||
| 2. 从 ipv4* 获取 address**。 |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| user_id | BIGINT UNSIGNED | 用户 id ,如果用户没有登录,则 uid 为 -1 | |
| app_id | INT UNSIGNED | NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | NOT NULL | 平台 id |
| ipv4 | INT UNSIGNED | NOT NULL | 设备的 ipv4 |
| ipv6 | VARBINARY(16) | 设备的 ipv6 | |
| name | VARCHAR(32) | 设备名称 | |
| model | VARCHAR(32) | 型号 | |
| brand | VARCHAR(32) | Android系统定制商 | |
| board | VARCHAR(32) | 主板 | |
| system_name | VARCHAR(32) | NOT NULL | Android | Windows | Linux | iOS | macOS | Harmony OS | Fuchsia |
| system_version_code | INT UNSIGNED | NOT NULL | |
| system_version_name | VARCHAR(32) | NOT NULL | |
| system_arch | VARCHAR(32) | NOT NULL | 系统架构 |
| app_version_code | INT UNSIGNED | NOT NULL | |
| app_version_name | VARCHAR(32) | NOT NULL | |
| is_main | BOOLEAN | NOT NULL | 是否为主设备 |
| last_request_time | DATETIME | NOT NULL | 最近请求时间 |
| last_request_addr | TEXT | NOT NULL | 最近请求地址, 例如:中国·山东·青岛 |
| last_login_time | DATETIME | 用户最近登录时间 | |
| last_login_addr | VARCHAR(32) | 用户最近登录的地址 | |
| ## 帮助组表(sys_help_group) |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id,空表示全部平台 |
| version_code_range | VARCHAR(32) | 应用版本号范围,空表示全部版本 | |
| title | VARCHAR(128) | NOT NULL | 标题 |
帮助表(sys_help)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id,空表示全部平台 |
| help_group_id | BIGINT | NOT NULL | 帮助组的id |
| title | VARCHAR(128) | NOT NULL | 标题 |
| content_type | TINYINT | NOT NULL | 内容格式类型 1 URL 2 PLANTTEXT 3 HTML 4 MARKDOWN |
| content | LONGTEXT | NOT NULL | 内容 |
反馈表(sys_feedback)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id,空表示全部平台 |
| user_id | BIGINT UNSIGNED | NOT NULL | 用户 id |
| version_code | INT UNSIGNED | NOT NULL | 应用版本号 |
| version_name | VARCHAR(32) | NOT NULL | 应用版本名 |
| content | LONGTEXT | NOT NULL | 内容 |
| contact_type | TINYINT | NOT NULL | 联系方式类型 0 为 QQ 1 为 wechat 2 为 email |
| contact | VARCHAR(255) | NOT NULL | 联系方式 |
| ## 发行日志表(sys_release_notes) |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id,空表示全部平台 |
| version_code | INT UNSIGNED | NOT NULL | 应用版本号 |
| version_name | VARCHAR(32) | NOT NULL | 应用版本名 |
| notes | LONGTEXT | NOT NULL | 日志 |
系统消息表(sys_system_message)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id,空表示全部平台 |
| version_code_range | VARCHAR(32) | NOT NULL | 如果应用版本号在 version_code_range 范围内,则显示该条消息, 空表示全部应用版本号 |
| title | VARCHAR(128) | NOT NULL | 标题 |
| content_type | TINYINT | NOT NULL | 内容类型 0 URL 1 PLANTTEXT 2 HTML 3 MARKDOWN |
| content | LONGTEXT | NOT NULL | 内容 |
| js | LONGTEXT | NOT NULL | 当网站加载结束时执行 javascript。 |
| ## 订阅计划表(sys_subscription_plans) |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id, 如果为空则表示全部平台 |
| name | VARCHAR(100) | NOT NULL | 计划名称(如 “年度 VIP”) |
| code | VARCHAR(50) | UNIQUE, NOT NULL | 计划编码(如 “VIP_YEAR”,用于业务逻辑) |
| description | TEXT | NOT NULL | 计划描述(权益说明) |
| price | DECIMAL(10,2) | NOT NULL | 订阅价格(单位:元) |
| discount | TINYINT | 折扣,如 8 表示 8 折 | |
| start_time | DATETIME | 有效的起始时间 | |
| end_time | DATETIME | 有效的结束时间 | |
| duration | INT | NOT NULL | 订阅时长(单位:天,如 30 = 月度,365 = 年度),-1 表示永久 |
| status | TINYINT | DEFAULT 1 | 状态:1 - 启用,0 - 禁用(下架套餐) |
| sort | INT | DEFAULT 0 | 排序权重(前端展示顺序) |
订阅激活码表(sys_subscription_activation_code)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id, 如果为空则表示全部平台 |
| subscription_id | BIGINT | NOT NULL | 可以激活的对应产品 |
| code | VARCHAR(32) | NOT NULL | 产品激活码 |
| start_date | DATETIME | 有效的起始时间 | |
| end_date | DATETIME | 有效的结束时间 | |
| product_duration | INT | 产品的生效周期,空表示使用产品本身的生效周期,-1 表示永久激活 | |
| status | TINYINT | DEFAULT 1 | 状态:1 - 启用,0 - 禁用(下架激活码) |
订阅记录表(sys_user_subscriptions)
记录用户的实际订阅行为,关联用户和订阅计划,存储订阅的有效期、状态等关键信息。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| platform_id | INT UNSIGNED | FK | 平台 id, 如果为空则表示全部平台 |
| user_id | BIGINT UNSIGNED | FK, NOT NULL | 关联用户表id |
| plan_id | BIGINT UNSIGNED | FK, NOT NULL | 关联订阅计划表id |
| subscription_no | varchar(64) | UNIQUE, NOT NULL | 订阅订单号(业务唯一标识) |
| start_time | DATETIME | 订阅生效时间 | |
| end_time | DATETIME | 订阅到期时间 | |
| status | TINYINT | NOT NULL | 订阅状态:1 - 生效中,2 - 已过期,3 - 已取消,4 - 暂停(按需扩展) |
| is_auto_renew | TINYINT | DEFAULT 0 | 是否自动续费:1 - 是,0 - 否 |
| renewal_times | INT UNSIGNED | DEFAULT 0 | 自动续费次数(统计用) |
| cancel_time | DATETIME | 取消订阅时间(状态为 3 时填充) |
外键约束:
ALTER TABLE user_subscriptions ADD CONSTRAINT fk_user_subscriptions_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; ALTER TABLE user_subscriptions ADD CONSTRAINT fk_user_subscriptions_plan_id FOREIGN KEY (plan_id) REFERENCES subscription_plans(id) ON DELETE RESTRICT;
订阅优惠券表(sys_subscription_coupons)
若支持优惠券抵扣订阅费用,记录优惠券与订阅的关联。
| 字段名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
id |
BIGINT UNSIGNED | PK, AUTO_INCREMENT | 优惠券关联 ID |
subscription_id |
BIGINT UNSIGNED | FK, NOT NULL | 关联订阅记录表id |
coupon_id |
BIGINT UNSIGNED | FK, NOT NULL | 关联优惠券表id |
discount |
decimal(10,2) | NOT NULL | 抵扣金额 |
create_time |
datetime | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
角色表(sys_role)
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| name | VARCHAR(64) | NOT NULL | 角色名称(如超级管理员) |
| code | VARCHAR(64) | UNIQUE, NOT NULL | 角色编码(不可重复,用于权限判断)如 ADMIN |
| description | TEXT | 角色描述 | |
| parent_id | BIGINT UNSIGNED | 父角色 ID(支持角色继承) | |
| status | TINYINT | DEFAULT 1 | 状态(0 - 禁用,1 - 启用) |
权限表(sys_permission)
存储功能级权限,绑定具体的资源(如接口、按钮、菜单)。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| name | VARCHAR(64) | NOT NULL | 权限名称 |
| code | VARCHAR(64) | UNIQUE, NOT NULL | 权限编码(核心,用于校验),如 sys:user:add |
| resource_type | TINYINT | 资源类型(1 - 菜单,2 - 按钮,3 - 接口) | |
| resource_id | BIGINT UNSIGNED | 关联资源表 ID(如菜单 ID / 接口 ID) | |
| status | TINYINT | DEFAULT 1 | 状态(0 - 禁用,1 - 启用) |
| ## 用户 - 角色关联表(sys_user_role) | |||
| 用户与角色的多对多关联表(一个用户可拥有多个角色)。 |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| user_id | BIGINT UNSIGNED | FK, NOT NULL | 用户 id |
| role_id | BIGINT UNSIGNED | FK, NOT NULL | 角色 id |
| ## 角色 - 权限关联表(sys_role_permission) | |||
| 角色与权限的多对多关联表(一个角色可包含多个权限)。 |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| role_id | BIGINT UNSIGNED | FK, NOT NULL | 角色 id |
| permission_id | BIGINT UNSIGNED | FK, NOT NULL | 权限 id |
| ## 资源表(sys_resource) | |||
| 存储平台的资源实体(菜单、按钮、接口),权限最终绑定到资源上。 |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| name | VARCHAR(50) | NOT NULL | 资源名称,如:用户管理菜单 |
| type | TINYINT | NOT NULL | 资源类型(1 - 菜单,2 - 按钮,3 - 接口) |
| path | VARCHAR(200) | NOT NULL | 资源路径(菜单路由 / 接口 URL)如:/sys/user |
| component | VARCHAR(200) | NOT NULL | 前端组件路径(仅菜单),如:sys/user/List |
| sort | INT | DEFAULT 0 | 排序号(用于前端展示) |
| status | TINYINT | DEFAULT 1 | 状态(0 - 禁用,1 - 启用) |
| ## 数据权限表(sys_data_permission) | |||
| 存储角色的数据访问规则,解决 “能看什么数据” 的问题,是平台权限的核心扩展。 |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| ...Common | |||
| app_id | INT UNSIGNED | FK, NOT NULL | 应用 id |
| name | VARCHAR(50) | NOT NULL | 资源名称,如:用户管理菜单 |
| type | TINYINT | NOT NULL | 资源类型(1 - 菜单,2 - 按钮,3 - 接口) |
| path | VARCHAR(200) | NOT NULL | 资源路径(菜单路由 / 接口 URL)如:/sys/user |
| component | VARCHAR(200) | NOT NULL | 前端组件路径(仅菜单),如:sys/user/List |
| sort | INT | DEFAULT 0 | 排序号(用于前端展示) |
| status | TINYINT | DEFAULT 1 | 状态(0 - 禁用,1 - 启用) |