织梦CMS的数据库设计采用了分离的模型,这是其灵活性的关键,理解这个模型对于进行二次开发、数据迁移或排查问题至关重要。

(图片来源网络,侵删)
核心思想是:
- 栏目(分类):像一个文件夹,用于组织内容,它有自己独立的表。
- 内容(文章):具体的文章、图片等信息,存储在另一个表中。
- 关联:通过一个中间表,将内容和它所属的栏目关联起来。
下面是核心的几个数据表及其字段详解。
核心栏目表:dede_arctype
这个表存储了网站所有的栏目(分类)信息,首页”、“公司简介”、“产品中心”、“新闻动态”等。
表结构(关键字段说明):

(图片来源网络,侵删)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| id | mediumint(8) unsigned | 主键,自增ID,每个栏目的唯一标识。 |
| topid | smallint(6) unsigned | 父栏目ID,用于实现栏目的多级(无限级)分类,如果为0,则为顶级栏目。 |
| sortrank | smallint(6) unsigned | 排序权重,数字越小,排序越靠前。 |
| typename | varchar(50) | 栏目名称,如“产品中心”。 |
| typedir | varchar(100) | 栏目目录,栏目的URL路径,如 {cmspath}/product/。 |
| isdefault | smallint(6) | 是否为默认栏目,通常为0。 |
| defaultname | varchar(50) | 默认文档名称,当栏目为空时,显示的默认页面文件名。 |
| issystem | smallint(6) | 是否为系统栏目,1表示系统自带栏目(如“首页”),0为用户创建栏目。 |
| channeltype | smallint(6) | 内容模型ID,指定该栏目下存放的内容类型(文章、软件、商品等),对应dede_channeltype表。 |
| corank | smallint(6) | 栏目权限等级。 |
| description | varchar(255) | 栏目描述,用于SEO。 |
| keywords | varchar(255) | 栏目关键词,用于SEO。 |
| seotitle | varchar(80) | 。 |
| moresite | smallint(6) | 是否启用多站点。 |
| siteurl | varchar(255) | 站点URL。 |
| sitepath | varchar(100) | 站点目录。 |
| modname | varchar(50) | 栏目模板。 |
| templet | varchar(50) | 封面模板。 |
| contenttemplet` | varchar(50) | 列表模板。 |
| addtable` | varchar(50) | 附加表,如果使用了自定义模型,内容会存放在这个指定的附加表中。 |
| useradminstyle | smallint(6) | 后台管理样式。 |
小结: dede_arctype是栏目的“户口本”,定义了栏目的名称、结构、路径和模板。
表:dede_archives
这个表存储了所有内容(文章、软件等)的公共信息属于哪个栏目,使用什么模型,其最核心、共通的字段都存在这里。
表结构(关键字段说明):
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| id | mediumint(8) unsigned | 主键,自增ID的唯一标识。 |
| typeid | smallint(6) unsigned | 栏目ID。这是连接栏目和内容的关键字段!指向dede_arctype表的id。 |
| typeid2 | smallint(6) unsigned | 副栏目ID可以同时属于主栏目和副栏目。 |
| sortrank | smallint(6) unsigned | 排序权重,后台的排序依据。 |
| flag | varchar(30) | 属性标识,如c(推荐), h(头条), p(图片)等,用逗号分隔。 |
| ismake | smallint(6) | 是否直接生成HTML,1为是,0为否(动态浏览)。 |
| channel | smallint(6) | 内容所属模型ID,与dede_arctype表的channeltype对应。 |
| arcrank | smallint(6) | 阅读权限,0为开放,>0为需要指定权限。 |
| click | int(10) unsigned | 点击量。 |
| money` | smallint(6) | 付费金额。 |
| shorttitle | varchar(50) | ,用于列表页显示。 |
| color` | varchar(10) | 标题颜色。 |
| writer` | varchar(30) | 作者。 |
| source` | varchar(50) | 来源。 |
| litpic` | varchar(100) | 缩略图/封面图。 |
| pubdate` | int(10) unsigned | 发布时间,Unix时间戳。 |
| senddate` | int(10) unsigned | 提交时间,Unix时间戳。 |
| mid` | int(10) unsigned | 发布会员ID。 |
| keywords` | varchar(255) | 内容关键词。 |
| description` | varchar(255) | 内容摘要。 |
| text` | mediumtext | 文章正文。重要:早期版本可能用此字段存储内容,但新版更推荐使用附加表。 |
| ishtml` | smallint(6) | 是否生成静态页。 |
| filename` | varchar(100) | 自定义文件名。 |
| dutyadmin` | varchar(30) | 责任编辑。 |
小结: dede_archives的“身份证”,存储了标题、时间、作者、所属栏目等公共信息。typeid字段是理解内容与栏目关系的关键。

(图片来源网络,侵删)
内容模型附加表(非常重要)
织梦CMS的一大特色是支持模型,你可以创建一个“产品”模型,它除了有文章的标题、正文外,还需要“价格”、“规格”、“型号”等字段。
这些自定义字段不会存储在dede_archives表中,而是会存放在一个或多个附加表中。
-
附加表由谁定义? 在后台的“内容模型管理”中,每创建一个新模型,系统都会自动为其创建一个对应的附加表,表名通常为
dede_addonXX(XX为模型ID)。 -
附加表如何与主内容关联?
dede_archives表中的addtable字段,会记录内容所使用的附加表名(如dede_addonarticle)。- 附加表中,必须有一个与
dede_archives表关联的字段,通常是aid,它与dede_archives的id对应。
举例说明:
假设我们有一个默认的“文章”模型,它的附加表是 dede_addonarticle。
dede_addonarticle 表结构(部分关键字段):
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| aid | mediumint(8) unsigned | 关联ID。与dede_archives表的id字段一一对应,这是连接两个表的桥梁。 |
| body | mediumtext | 文章正文内容,这是存储文章主体内容的地方,而不是在dede_archives的text字段。 |
| templet` | varchar(50) | 页模板,可以为单篇文章指定模板。 |
数据流程: 当你查看一篇文章时,织梦CMS会这样做:
- 从URL获取文章ID(假设为
123)。 - 在
dede_archives表中查询id = 123的记录,得到typeid(栏目ID)、title)、litpic(缩略图)等信息,以及addtable字段的值(假设为dede_addonarticle)。 - 根据
addtable的值,再到dede_addonarticle表中查询aid = 123的记录,得到body(文章正文)。 - 将所有信息整合,通过模板生成最终显示的页面。
总结与关系图
核心关系:
- 栏目与栏目:通过
dede_arctype的topid字段实现多级分类。 - 内容与栏目:通过
dede_archives的typeid字段与dede_arctype的id字段关联。 - 内容与附加字段:通过
dede_archives的addtable字段找到附加表,再通过附加表的aid字段与dede_archives的id关联。
ER图(简化版):
+---------------+ +-----------------+
| dede_arctype | | dede_archives |
+---------------+ +-----------------+
| id (PK) |<----+| typeid (FK) |
| topid | | id (PK) |
| typename | | title |
| ... | | typeid2 (FK) |
+---------------+ | ... |
| addtable |
+--------+--------+
|
| (通过 addtable 指向)
v
+-----------------+
| dede_addonXX | (XX为模型ID)
+-----------------+
| aid (FK) |<----+
| body | |
| ... | |
+-----------------+ |
|
+ (aid 与 id 对应)
理解这三个核心表及其关系,就掌握了织梦CMS数据存储的精髓,无论是手动修改数据、编写插件还是进行数据迁移,都会变得非常清晰。
