DedeCMS 的数据库设计遵循了经典的内容管理系统架构,其核心思想是与表现分离”和“模型与字段分离”,理解其表结构,对于进行二次开发、数据迁移、性能优化和故障排查都至关重要。

(图片来源网络,侵删)
核心设计理念
在分析具体表之前,先理解其核心理念:
- 内容与表现分离:文章的内容(标题、正文)存储在数据库中,而它的最终展示样式(如文章列表页、内容页)则由模板文件(
.htm)决定,数据库只负责存储数据,不负责如何显示。 - 模型与字段分离:这是 DedeCMS 的一个重要特性,早期版本所有文章都存入
dede_archives表,字段固定,后来升级为“模型”系统,允许创建不同的内容模型(如文章、软件、图集、商品等),每个模型可以自定义不同的字段(如软件的版本、大小,商品的规格、价格等),这些自定义字段会存储在dede_addonXX(XX代表模型ID) 这类附加表中。 - 角色与权限分离:通过不同的会员组 (
dede_arctype) 和后台用户 (dede_admin) 来控制谁能发布、编辑、审核什么内容。
核心数据表分类与详解
我们可以将 DedeCMS 的数据表分为以下几大类:
表
这是整个系统的基石,存储了网站最核心的内容数据。
| 表名 | 中文名称 | 核心作用 | 关键字段解析 |
|---|---|---|---|
dede_archives |
文章主表 | 模型的“总入口”,无论你创建什么模型(文章、软件、图集),其最基本的信息(标题、关键词、作者、发布时间、ID等)都会先存入此表。 | id (主键, 内容唯一ID)typeid (栏目ID, 关联到dede_arctype)typeid2 (副栏目ID)title (文章标题)shorttitle (短标题)<brwriter (作者)<brsource (来源)<brpubdate (发布时间)<brsenddate (录入时间)<brflag (属性, 如'c'推荐,'h'头条)<brismake (是否生成静态页)<brarcrank (审核状态, 0为已审核)<brclick (点击量) |
dede_addonXX |
附加表/模型表 | 存储不同模型的“自定义字段”。XX是模型ID,文章模型可能对应dede_addonarticle,软件模型对应dede_addonsoft,具体字段由你在后台创建模型时定义。 |
aid (关联ID, 对应dede_archives表的id)其他字段如 body(文章正文)、filetype(软件类型)、language(编程语言)等,均为自定义字段。 |
dede_arctype |
栏目表 | 存储网站的所有栏目(分类)信息,是内容分类的核心。 | id (主键, 栏目ID)reid (父栏目ID, 用于构建多级栏目)<brtypename (栏目名称)<brtypedir (栏目目录, 用于生成URL路径)<brisdefault (是否为默认栏目)<brishidden (是否隐藏)<brcorank (排序权重) |
dede_arcmulti |
专题表 | 用于创建专题,将不同栏目下的文章聚合在一起。 | id (专题ID)<brtypeid (包含的栏目ID列表)<brtitle (专题名称)<brcontent (专题介绍) |
关系图:

(图片来源网络,侵删)
[栏目表 dede_arctype]
| (typeid)
|
V
[文章主表 dede_archives] -- (aid) --> [附加表 dede_addonXX]
| (typeid)
|
V
[专题表 dede_arcmulti]
会员与权限表
| 表名 | 中文名称 | 核心作用 | 关键字段解析 |
|---|---|---|---|
dede_member |
会员主表 | 存储所有注册会员的基本信息。 | mid (主键, 会员ID)uname (用户名)<brpwd (密码, 加密存储)<bremail (邮箱)<brscores (积分)<brmoney (余额) |
dede_member_space |
会员空间表 | 存储会员空间的个性化信息,如头像、昵称、简介等。 | mid (关联dede_member的mid)<br`spacename` (空间名称)<br> sign (个性签名) |
dede_arcmember |
会员投稿表 | 记录会员发布的文章信息,关联到dede_archives。 |
aid (文章ID, 关联dede_archives)<brmid (会员ID, 关联dede_member)<brdtime (投稿时间) |
dede_admin |
后台管理员表 | 存储后台管理员账户。 | id (主键)userid (管理员工号)<brpwd (密码)<brtypeid (管理权限组ID, 关联dede_admintype) |
dede_admintype |
管理员组表 | 定义后台管理员的权限范围。 | id (组ID)<brtypename (组名称)<brpurviews (权限JSON字符串) |
评论与互动表
| 表名 | 中文名称 | 核心作用 | 关键字段解析 |
|---|---|---|---|
dede_feedback |
评论表 | 存储用户对内容的评论。 | id (评论ID)<braid (被评论内容的ID, 关联dede_archives)<brtypeid (栏目ID)<brusername (评论者)<brarctitle (被评论内容的标题)<brdtime (评论时间)<brmsg (评论内容) |
dede_digg |
踩/顶表 | 记录用户对内容的顶/踩操作。 | id (主键)<braid (内容ID)<brip (用户IP)<brdiggtype (操作类型, 1为顶, -1为踩) |
模板与风格表
| 表名 | 中文名称 | 核心作用 | 关键字段解析 |
|---|---|---|---|
dede_templets |
模板文件表 | 存储系统中可用的模板文件信息,方便在后台管理。 | id (主键)<brtempletpath (模板文件路径)<brtypename (模板名称) |
dede_skin |
风色表 | 定义网站的风格(一套模板+一套CSS+一套JS)。 | id (风格ID)<brsid (风格分类ID)<brname (风格名称)<brtemplets (默认模板目录) |
系统配置与辅助表
| 表名 | 中文名称 | 核心作用 | 关键字段解析 |
|---|---|---|---|
dede_homepageset |
首页设置表 | 存储首页的一些配置,如首页标题、关键字、Logo等。 | item (配置项名称)<brvalue (配置项值) |
dede_config |
系统配置表 | 存储DedeCMS的全局配置项。 | aid (主键)<brvarname (变量名)<brinfo (变量值) |
dede_enews |
邮件订阅表 | 存储订阅了网站更新的用户邮箱。 | id (主键)<bremail (邮箱地址)<bruserid (用户ID)<brtime (订阅时间) |
dede_friendlink |
友情链接表 | 存储网站的友情链接信息。 | id (主键)<brurl (链接地址)<brwebname (网站名称)<brlogo (Logo图片) |
dede_admintype |
(见上文) | 管理员权限组 | |
dede_admintype_purview |
管理员权限明细表 | 详细定义每个管理员组对每个具体功能模块的权限。 | typeid (管理员组ID)<brmid (功能模块ID)<brpurview (权限值) |
数据流与工作原理简述
-
:
- 管理员或会员在前台/后台提交内容。
- 系统首先将标题、作者、栏目等通用信息写入
dede_archives表,生成一个id(我们称之为aid)。 - 系统根据内容的模型ID,找到对应的附加表(如
dede_addonarticle),将正文等自定义字段与这个aid一起写入附加表。 - 如果开启了审核,
dede_archives.arcrank字段会先被设置为非0值,直到审核通过才变为0。
-
内容展示:
- 用户访问一个栏目或文章页面。
- DedeCMS 的 PHP 脚本根据 URL 参数(如
aid=123或typeid=5)查询数据库。 - 查询流程:
- 如果是文章页:先从
dede_archives表中根据aid查出基本信息,再根据typeid从dede_arctype表中查出栏目信息,最后根据模型ID找到对应的附加表,查出正文等自定义字段。 - 如果是列表页:先从
dede_arctype表中根据typeid找到栏目,再从dede_archives表中根据typeid和arcrank=0(已审核) 等条件查询出该栏目下的所有文章列表。
- 如果是文章页:先从
- PHP 将查询出的数据赋值给模板引擎。
- 模板引擎加载对应的
.htm模板文件,将数据填充进去,最终生成 HTML 页面输出给用户。
常见应用场景与SQL示例
场景1:查找某个栏目下所有“已审核”且“为头条”的文章
SELECT
a.id, a.title, a.pubdate, t.typename
FROM
dede_archives AS a
JOIN
dede_arctype AS t ON a.typeid = t.id
WHERE
a.typeid = 10 -- 假设栏目ID为10
AND a.arcrank = 0 -- 已审核
AND a.flag LIKE '%h%' -- 包含h属性(头条)
ORDER BY
a.pubdate DESC;
场景2:查找某个会员发布的所有文章及其所属栏目
SELECT
m.uname, a.title, t.typename, a.pubdate
FROM
dede_member AS m
JOIN
dede_arcmember AS am ON m.mid = am.mid
JOIN
dede_archives AS a ON am.aid = a.id
JOIN
dede_arctype AS t ON a.typeid = t.id
WHERE
m.uname = '张三';
场景3:批量修改某个自定义字段的值(将所有文章的“来源”改为“本站原创”)
UPDATE dede_archives SET source = '本站原创' WHERE source = '';
总结与建议
- 理解
archives和addonXX的关系:这是理解 DedeCMS 数据结构的关键,几乎所有内容查询都需要关联这两个表。 - 善用
arcrank字段:arcrank=0代表内容已发布(可见),非0值代表处于待审核、草稿等状态,在开发查询逻辑时,务必加上这个条件。 - 备份!备份!备份!:在进行任何直接操作数据库的操作(如
DELETE,UPDATE)之前,务必备份数据库,一个错误的 SQL 语句可能导致灾难性后果。 - 性能优化:对于大型网站,
dede_archives表可能会变得非常庞大,可以考虑对typeid,pubdate,flag等常用查询字段建立索引,以显著提升查询速度。
通过以上分析,你应该对 DedeCMS 的数据库表结构有了清晰的认识,这不仅能帮助你更好地管理网站,也为后续的二次开发打下了坚实的基础。

(图片来源网络,侵删)
