开发—数字字典¶
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 | 置顶标记 |