Skip to content

开发—数字字典

Discuz! X3.4 的 数据字典(Data Dictionary) 是理解其架构核心和开发扩展的基础。

1. 数据字典的作用

数据字典就是对数据库结构的系统化说明文档,在 Discuz! 中主要用于以下目的:

用途 说明
✅ 插件开发/二开 理解系统核心表结构,规范扩展字段或创建新表
✅ 数据迁移与导入导出 了解数据依赖关系,做结构映射
✅ 接口开发对接 通过字段了解逻辑层调用方式(如用户、帖子)
✅ 性能优化 识别热点表与字段,评估索引设计是否合理
✅ 排查问题 调试过程中快速定位表、字段、主键、外键

2. Discuz! X3.4 的数据库设计逻辑概述

Discuz! 使用了模块化的数据分区模型,符合高可扩展性的 PHP 社区产品设计理念。以下为其核心设计逻辑:

1. 统一前缀模型(pre_)

所有系统表均以 pre_ 为前缀,例如:

pre_forum_thread         -- 主题主表  
pre_forum_post           -- 回复内容表  
pre_common_member        -- 用户主表  
pre_ucenter_members      -- UCenter 用户表(逻辑对接)  

利用统一前缀可以实现多站共库共表或分库部署,例如 pre1_, pre2_ 对应不同论坛。

2. 逻辑功能划分(按模块分类)

模块 代表表(举例) 说明
用户系统 pre_common_member* 用户信息、扩展、字段、群组等
论坛系统 pre_forum_* 主题、帖子、板块、附件
通知系统 pre_home_notification 私信通知、提醒机制
积分系统 pre_common_credit* 积分记录、交易日志
缓存系统 pre_common_syscache 用于缓存结构(template、setting)
应用接口 pre_ucenter_* / uc_ 与 UCenter 统一认证系统对接
内容审核 pre_common_moderate 审核队列管理(帖子、注册、评论)

3. 拆分策略(大表分表)

Discuz! 为了提升大表性能,对高频数据做了逻辑+物理拆分:

表名 说明
pre_forum_post 回复表,按 pid 拆分为多个子表
pre_forum_attachment 附件主表,分为 attachment_n 表
pre_common_member 拆分为基本信息、扩展、字段三张表

这体现出 Discuz! 对高并发写入和热点表负载的优化策略。

3. 数据字典的框架结构(官方页面结构)

官方数据字典
结构说明包括:

字段 类型 默认值 注释(含逻辑含义)
tid int(10) 0 主题ID,主键
fid smallint(6) 0 所属版块ID
authorid mediumint 0 发帖人ID
displayorder tinyint(1) 0 置顶标记