Skip to content

业务数据表 ​

1. 数据字典表 ​

1.1 字典类型表 (dicts) ​

字段名类型说明
idBIGINT主键
nameVARCHAR字典名称
codeVARCHAR字典编码(唯一)
statusTINYINT状态(0 禁用,1 启用)
sortINT排序权重(越小越靠前)
remarkVARCHAR备注
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

1.2 字典数据表 (dict_items) ​

字段名类型说明
idBIGINT主键
dict_idBIGINT所属字典 ID
labelVARCHAR字典项标签
valueVARCHAR字典项值
label_typeVARCHAR标签样式(default/primary/success/warning/danger/info,对应 Element Plus Tag type)
statusTINYINT状态(0 禁用,1 启用)
sortINT排序权重
remarkVARCHAR备注
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

删除字典时通过模型 booted 事件级联删除其所有字典项。

2. 应用发布表 (app_releases) ​

字段名类型说明
idBIGINT主键
nameVARCHAR应用名称
slugVARCHAR应用唯一标识(客户端传参用)
descriptionVARCHAR应用描述
iconVARCHAR应用图标 URL
sortINT排序权重
statusBOOLEAN启用状态
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间
deleted_atTIMESTAMP删除时间(软删除)

3. 应用版本表 (app_versions) ​

字段名类型说明
idBIGINT主键
app_release_idBIGINT所属应用 ID
platformVARCHAR平台(android/ios/harmony,枚举 AppPlatform)
versionVARCHAR语义化版本号(如 1.2.0)
buildINT构建号(整数递增,用于版本比较)
download_urlVARCHAR安装包下载地址
release_notesTEXT更新说明
min_supported_versionVARCHAR最低支持版本号
min_supported_buildINT最低支持构建号(低于此构建号需强制更新)
force_updateBOOLEAN是否强制更新
file_sizeBIGINT安装包大小(字节)
file_hashVARCHAR文件哈希(校验用)
statusVARCHAR发布状态(draft/published/withdrawn/obsolete,枚举 ReleaseStatus)
published_atTIMESTAMP发布时间
created_byBIGINT创建人管理员 ID
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间
deleted_atTIMESTAMP删除时间(软删除)

发布版本时会自动将同应用同平台下其他已发布版本置为 obsolete;已发布状态的版本不可删除,需先撤回或废弃。

版本状态流转:draft → published(publish)→ withdrawn(withdraw)/ obsolete(obsolete 或被新版本自动替换)。

4. 内容互动表 ​

4.1 点赞表 (likes) ​

字段类型说明
idbigint主键
user_idbigint点赞用户
source_type / source_idstring / bigint多态目标(morphs)
extrajson扩展信息
created_at / updated_attimestamp时间戳
  • 唯一约束 uniq_user_like:user_id + source_type + source_id,同一用户对同一资源只能点赞一次
  • 模型事件:created 时对目标 like_count 自增,deleted 时自减

4.2 收藏表 (collections) ​

字段类型说明
idbigint主键
user_idbigint收藏用户
source_type / source_idstring / bigint多态目标(morphs)
extrajson扩展信息
created_at / updated_attimestamp时间戳
  • 唯一约束 uniq_user_collection:user_id + source_type + source_id
  • 模型事件:created 时对目标 collection_count 自增,deleted 时自减

4.3 评论表 (comments) ​

字段类型说明
idbigint主键
user_idbigint评论用户
source_type / source_idstring / bigint多态目标(自关联可实现楼层回复)
is_topboolean是否置顶
statusstring审核状态
like_count / comment_countint点赞数 / 回复数
contentstring(1000)评论内容
mentioned_usersjson艾特用户 ID 列表
ip_addressip评论 IP
created_attimestamp评论时间(无 updated_at)

4.4 互动能力 Trait ​

被互动的业务模型通过 trait 接入,目标表需自备对应计数列:

Trait提供方法依赖计数列
HasLikeablelikes()、isLikedBy($user)like_count
HasCollectionablecollections()、isCollectedBy($user)collection_count
HasCommentablecomments()comment_count
  • source_type 仅接受 config/morph_maps.php 中注册的多态别名
  • 计数列由模型事件自动维护,接入前须确认目标表已有对应字段
  • 评论楼层回复约定:当 source_type = 'comment' 时表示本条为对另一条评论的回复,source_id 即父评论 ID;顶级评论的 source_type 指向业务实体(如 user、post)。后台判定回复关系与查询回复链均基于此约定,无需额外 parent_id 字段

4.5 访问记录表 (visits) ​

字段类型说明
idbigint主键
user_idbigint访问用户
source_type / source_idstring(255) / bigint多态目标(无 morphs,自行维护)
ipvarbinary(16)访问 IP(与 login_histories 一致,支持 IPv4/IPv6)
created_attimestamp访问时间(无 updated_at,append-only)
  • 索引:idx_visit_source(source_type,source_id)、idx_visit_user_source(user_id,source_type,source_id)
  • 不做唯一约束:同一用户对同一资源可重复记录访问(PV 语义)
  • 仅 Api 模块提供记录与查询接口,Admin 后台暂不实现
  • 模型 Visit 关闭 updated_at,仅 created_at 由数据库 CURRENT_TIMESTAMP 填充

5. 钱包相关表(真实货币) ​

设计原则:余额热数据落在持有者主表字段上(查询零 Join),记录层全部多态。 未来其他模型(如 admin_users、未来的 merchants)需要支持钱包时,只需在其表追加 balance / frozen_balance 两个字段并 use HasWalletBalance,记录层无需任何改动。

5.1 钱包流水表 (wallet_trades) ​

字段名类型说明
idBIGINT主键(从 10000000 起)
owner_typeVARCHAR(64)持有者类型(多态,取 config/morph_maps.php 别名,如 user)
owner_idBIGINT持有者 ID
amountDECIMAL(16,2)本次变动金额(正增负减)
before_balanceDECIMAL(16,2)变动前可用余额快照
after_balanceDECIMAL(16,2)变动后可用余额快照
before_frozenDECIMAL(16,2)变动前冻结余额快照
after_frozenDECIMAL(16,2)变动后冻结余额快照
typeVARCHAR(32)交易类型(枚举 WalletTradeType)
source_typeVARCHAR(64)业务来源类型(多态,如订单、提现单)
source_idBIGINT业务来源 ID
statusVARCHAR(20)流水状态(pending/success/failed)
descriptionVARCHAR(255)交易描述
created_atTIMESTAMP交易时间

索引:(owner_type, owner_id, created_at) 复合索引、(source_type, source_id) 复合索引、type 索引。

冻结/解冻操作只变动冻结余额而不动可用余额,因此必须同时保留 before_frozen / after_frozen 快照,否则无法完整审计对账。

5.2 充值订单表 (recharges) ​

字段名类型说明
idBIGINT主键
owner_type / owner_idVARCHAR(64) / BIGINT持有者(多态)
order_noVARCHAR(64)订单号(唯一,前缀 R + 日期 + 随机串)
amountDECIMAL(16,2)充值金额
bonus_amountDECIMAL(16,2)赠送金额(按 wallet.recharge_bonus_rate 计算)
pay_channelVARCHAR(32)支付渠道(manual/wechat/alipay/apple,当前仅 manual 可用)
pay_statusVARCHAR(20)支付状态(pending/success/failed/expired/closed)
transaction_idVARCHAR(128)渠道流水号(唯一,防重复入账;手动确认为空)
confirmed_byBIGINT手动确认到账的管理员 ID
paid_atTIMESTAMP支付完成时间
expired_atTIMESTAMP订单过期时间(默认创建后 30 分钟)
client_ipVARCHAR(45)下单 IP
remarkVARCHAR(255)备注
callback_payloadJSON渠道原始回调报文(渠道接入后使用)
created_at / updated_atTIMESTAMP时间戳

索引:order_no 唯一索引、transaction_id 唯一索引、(owner_type, owner_id, created_at) 复合索引、pay_status 索引、expired_at 索引。

5.3 提现申请表 (withdraws) ​

字段名类型说明
idBIGINT主键(从 10000000 起)
owner_type / owner_idVARCHAR(64) / BIGINT持有者(多态,别名 user)
order_noVARCHAR(64)提现单号(唯一,前缀 W + YmdHis + 6 位随机)
amountDECIMAL(16,2)申请提现金额
feeDECIMAL(16,2)手续费(按 wallet.withdraw_fee_rate 百分比计算,默认 0)
actual_amountDECIMAL(16,2)实际到账金额(amount - fee)
account_typeVARCHAR(32)收款账户类型(枚举 WithdrawAccountType:wechat/alipay/bank)
account_infoJSON收款账户信息(账号、姓名等,响应脱敏展示)
statusVARCHAR(20)状态(枚举 WithdrawStatus,默认 pending)
reviewed_byBIGINT审核管理员 ID(nullable)
reviewed_atTIMESTAMP审核时间(nullable)
reject_reasonVARCHAR(255)驳回原因(nullable)
transfer_atTIMESTAMP打款完成时间(nullable)
fail_reasonVARCHAR(255)打款失败原因(nullable)
remarkVARCHAR(255)管理员备注(nullable)
client_ipVARCHAR(45)下单 IP(nullable)
created_at / updated_atTIMESTAMP时间戳

索引:order_no 唯一索引、idx_withdraw_owner_at (owner_type, owner_id, created_at) 复合索引、idx_withdraw_status (status)。

状态流转:pending →(审核通过)approved →(打款成功)success;pending →(审核驳回)rejected(自动解冻);approved →(打款失败)failed(自动解冻)。rejected/success/failed 为终态。

5.4 钱包相关枚举 ​

WalletTradeType(钱包交易类型):

值说明
recharge充值
withdraw提现
freeze冻结
unfreeze解冻
payment消费
refund退款
admin_recharge后台充正
admin_deduct后台扣减

WithdrawStatus(提现状态):

值说明
pending待审核
approved审核通过,待打款
rejected已驳回(自动解冻退回)
success打款成功(结算冻结,资金流出)
failed打款失败(自动解冻退回)

WithdrawAccountType(收款账户类型):

值说明
wechat微信
alipay支付宝
bank银行卡

与现有积分/金币体系的关系:钱包是独立的真实货币账本,与现有 available_points(积分)、available_coins(金币)两套虚拟资产体系并行且互不影响,本期不做迁移或合并。

6. 虚拟资产流水表 ​

表名说明
coin_trades金币流水记录
point_records积分记录
point_trades积分流水记录

7. 实名认证表 (identity_verifications) ​

字段名类型说明
idBIGINT主键
verifiable_typeVARCHAR(100)申请人类型(多态)
verifiable_idBIGINT申请人 ID
typeVARCHAR(16)认证类型(personal 个人 / enterprise 企业)
statusVARCHAR(16)审核状态(pending/review/approved/rejected,默认 pending)
real_nameVARCHAR(64)真实姓名(个人认证)
id_card_noVARCHAR(32)身份证号(密文存储,响应隐藏)
id_card_frontVARCHAR身份证人像面图片路径
id_card_backVARCHAR身份证国徽面图片路径
handheldVARCHAR手持身份证图片路径
company_nameVARCHAR(128)企业名称(企业认证)
credit_codeVARCHAR(32)统一社会信用代码(18 位)
legal_person_nameVARCHAR(64)法人姓名(企业认证)
legal_person_id_card_noVARCHAR(32)法人身份证号(密文存储,响应隐藏)
business_licenseVARCHAR营业执照图片路径
opening_permitVARCHAR开户许可证图片路径
bank_accountVARCHAR(64)对公账户(响应隐藏)
bank_nameVARCHAR(64)开户行
admin_idBIGINT审核管理员 ID
reject_reasonVARCHAR(32)驳回原因(字典 identity_reject_reason 的 value)
reject_remarkTEXT驳回备注
submitted_atTIMESTAMP提交时间
reviewed_atTIMESTAMP审核时间
expires_atTIMESTAMP认证有效期(通过后自动 +3 年)
created_at / updated_atTIMESTAMP时间戳

索引:(verifiable_type, verifiable_id) 复合索引、type 索引、status 索引、admin_id 索引。

敏感字段(id_card_no、legal_person_id_card_no、bank_account)通过模型 #[Hidden] 在所有响应中自动隐藏。驳回原因通过预置字典 identity_reject_reason 管理,迁移时自动 seed。

users 表关联字段:

字段名类型说明
identity_typeVARCHAR(16)实名认证类型(personal/enterprise),null 表示未认证
identity_statusVARCHAR(16)实名认证状态(默认 unsubmitted,索引)

用户表直接存储认证状态热数据,查询零 Join。identity_verified 为逻辑属性,由 identity_status === approved 派生。

详见 实名认证技术方案。

8. 用户分群表 ​

8.1 分群定义表 (user_segments) ​

字段名类型说明
idBIGINT主键(从 10000000 起)
codeVARCHAR(64)分群编码(规则分群必填且唯一,手动可空)
nameVARCHAR(64)分群名称
label_typeVARCHAR(16)标签样式(default/primary/success/warning/danger/info)
typeTINYINT分群类型(1=手动,2=规则)
groupVARCHAR(32)分组(用户画像/运营分群/风控 等)
descriptionVARCHAR(500)分群说明
sortINT排序权重(越小越靠前)
statusBOOLEAN启用状态(0=禁用,1=启用)
ruleJSON规则定义(仅 type=2 有效,结构含 version/logic/conditions)
last_synced_atTIMESTAMP最近一次规则刷新时间
last_synced_user_countINT最近一次规则匹配用户数
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

索引:code 唯一索引、type 索引、group 索引、status 索引。

8.2 分群成员表 (user_segment_memberships) ​

字段名类型说明
idBIGINT主键
segment_idBIGINT分群 ID(外键,级联删除)
user_idBIGINT用户 ID(外键,级联删除)
sourceTINYINT打标来源(1=手动,2=规则)
created_atTIMESTAMP打标时间

索引:uniq_segment_user 唯一约束(segment_id + user_id)、idx_user_segment(user_id + segment_id)、idx_segment_source_time(segment_id + source + created_at)。

用户软删时通过 UserObserver 自动清理分群成员记录。规则同步增量 diff 仅操作 source=2 的成员,不影响手动打标的成员。

8.3 分群异步任务表 (segment_tasks) ​

字段名类型说明
idBIGINT主键
admin_idBIGINT提交任务的管理员 ID
typeVARCHAR(32)任务类型(attach 打标 / detach 解标)
payloadJSON任务载荷(segment_ids + user_ids)
total_countINT计划处理总数
processed_countINT已处理数
added_countINT实际新增/解绑数
statusVARCHAR(16)状态(pending/running/completed/failed)
error_messageVARCHAR(1000)失败原因
started_atTIMESTAMP开始执行时间
finished_atTIMESTAMP完成时间
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

索引:admin_id 索引、type 索引、status + created_at 复合索引。

当批量打标/解标操作超过 BATCH_LIMIT=1000 时自动创建任务记录并派发 BulkSegmentTaskJob,任务完成后发送站内信通知管理员。

9. 举报表 (reports) ​

字段名类型说明
idBIGINT主键
user_idBIGINT举报人用户 ID
reportable_idBIGINT被举报对象 ID
reportable_typeVARCHAR(255)被举报对象多态类型(morph alias:comment / user,由 Relation::enforceMorphMap() 全局别名统一管理)
categoryVARCHAR(32)举报分类(取自字典 report_category)
reasonVARCHAR(500)举报描述(可空)
evidenceJSON证据图片 URL 数组(可空)
statusVARCHAR(16)处理状态(pending/processing/resolved/rejected)
handler_idBIGINT处理人管理员 ID(可空)
process_remarkVARCHAR(500)处理备注(可空)
process_actionsJSON处置动作记录(可空,格式见 §10)
processed_atTIMESTAMP处理时间(可空)
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间(列存在,但模型声明 UPDATED_AT = null 不自动维护,值恒为 NULL)

索引:

  • 主键
  • reportable_type + reportable_id 复合索引(多态查询)
  • status + category + created_at 复合索引(筛选)
  • handler_id + processed_at 复合索引(按处理人查询)
  • user_id + status 复合索引(用户自己的举报列表)

字典:report_category(举报分类),固定 9 项:色情低俗、暴力血腥、政治敏感、广告营销、辱骂人身攻击、虚假信息、侵权抄袭、违法违规、其他。

唯一性约束:业务层校验同一 (user_id, reportable_type, reportable_id) 在 pending/processing 状态下不可重复提交,数据库层不强制。

10. process_actions JSON 协议 ​

reports.process_actions 为 JSON 数组,每项结构:

json
[
  { "type": "hide_comment", "reason": null },
  { "type": "delete_comment", "reason": null },
  { "type": "freeze_user", "reason": null }
]
字段类型说明
typestring处置动作类型:hide_comment / delete_comment / freeze_user
reasonstring | null动作说明(可空)

11. 系统基础表 ​

表名说明
sessions会话存储
cache / cache_locks缓存/缓存锁
jobs / job_batches / failed_jobs队列任务/批次/失败任务
pulse_values / pulse_entries / pulse_aggregatesLaravel Pulse 监控数据

12. AI 知识库表 ​

12.1 知识库文档表 (knowledge_documents) ​

字段名类型说明
idBIGINT主键
titleVARCHAR(200)文档标题
contentLONGTEXT文档原始内容
statusVARCHAR(20)索引状态(pending/processing/ready/failed,枚举 KnowledgeDocumentStatus),带索引
is_enabledBOOLEAN是否启用(停用的文档不参与检索)
chunks_countUNSIGNED INT分块数量
tokensUNSIGNED INT向量化消耗的 Tokens
errorVARCHAR(500)最近一次索引失败原因(可空)
created_byBIGINT创建管理员 ID(可空,带索引)
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

文档保存后自动派发 ProcessKnowledgeDocumentJob 异步索引任务(段落分块 + Embedding 向量化);内容变更自动重建,亦可手动 reindex。索引状态流转:pending → processing → ready/failed。

12.2 知识库文档分块表 (knowledge_chunks) ​

字段名类型说明
idBIGINT主键
document_idBIGINT所属文档 ID(外键级联删除,带索引)
contentTEXT分块文本内容
embeddingJSON向量(JSON 数组,维度由配置的 Embedding 模型决定,默认 2048)
tokensUNSIGNED INT该分块向量化消耗的 Tokens
sortUNSIGNED SMALLINT分块在文档内的顺序
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

语义检索时将查询文本向量化,与分块向量做余弦相似度计算,按得分降序返回 Top-N;仅召回「已完成索引且启用」文档的分块。


文档来源:PRD 第 5.1 节