在实施完一个网站的内容管理之后,抽空看了drupal,我的关注点在数据库表设计。遗憾的是没有找到其数据模型的文档。所以不得不一边按教程做实例,一边观察后台数据的变化,以此试图理解其数据模型。
相关工具及用途如下:
- drupal-6.16:研究对象
- phpmyadmin:观察后台数据
- AmaterasUML:描述数据模型
drupal非常简洁地用两个表,就解决了内容的版本维护和多语种的问题。这两个表是node(内容节点)表和node_revisions(节点修订版本)表。
前者描述节点的基本属性,与一条确定的内容对应,字段含义如下:
| 1 | nid | nid | MEDIUMINT(10) | N | AUTO INCREMENT 节点id | |
| 2 | vid | vid | MEDIUMINT(10) | N | 当前版本id | |
| 3 | type | type | VARCHAR(32) | N | 节点类型 | |
| 4 | language | language | VARCHAR(12) | N | 语种 | |
| 5 | title | title | VARCHAR(255) | N | 题名 | |
| 6 | uid | uid | INT(10) | N | 节点编辑用户id | |
| 7 | status | status | INT(10) | N | 状态 | |
| 8 | created | created | INT(10) | N | 建立时间 | |
| 9 | changed | changed | INT(10) | N | 修改时间 | |
| 10 | comment | comment | INT(10) | N | 评论设置 0:禁止新的评论,并隐藏已有评论 1:禁止新的评论,但显示已有的评论 2:允许评 论,并显示已有评论 | |
| 11 | promote | promote | INT(10) | N | 推荐首页 | |
| 12 | moderate | moderate | INT(10) | N | 评论设置 | |
| 13 | sticky | sticky | INT(10) | N | ?? | |
| 14 | tnid | tnid | MEDIUMINT(10) | N | 翻译的源节点 | |
| 15 | translate | translate | INT(10) | N | 已翻译 |
后者记录节点的各个修改版本。字段含义如下:
| 1 | nid | nid | MEDIUMINT(10) | N | 节点id | |
| 2 | vid | vid | MEDIUMINT(10) | N | AUTO INCREMENT 节点版本 | |
| 3 | uid | uid | INT(10) | N | 编辑节点的用户id | |
| 4 | title | title | VARCHAR(255) | N | 题名 | |
| 5 | body | body | LONGTEXT | N | 正文 | |
| 6 | teaser | teaser | LONGTEXT | N | 正文摘要 | |
| 7 | log | log | LONGTEXT | N | 日志备注 | |
| 8 | timestamp | timestamp | INT(10) | N | 创建时间 | |
| 9 | format | format | INT(10) | N | 格式 |
node_revisions通过表中的nid指向node中的多版本对应的同一个内容节点。
node则通过tnid指向多语种翻译对应的源节点,可以图示如下:

附件是AmaterasUML生成的html格式的数据库表说明。
本文深入探讨Drupal的内容管理和数据库设计,重点分析了node和node_revisions表如何解决内容版本和多语种问题,揭示了Drupal简洁而高效的数据模型。
1076

被折叠的 条评论
为什么被折叠?



