在实施完一个网站的内容管理之后,抽空看了drupal,我的关注点在数据库表设计。遗憾的是没有找到其数据模型的文档。所以不得不一边按教程做实例,一边观察后台数据的变化,以此试图理解其数据模型。
相关工具及用途如下:
- drupal-6.16:研究对象
- phpmyadmin:观察后台数据
- AmaterasUML:描述数据模型
drupal非常简洁地用两个表,就解决了内容的版本维护和多语种的问题。这两个表是node(内容节点)表和node_revisions(节点修订版本)表。
前者描述节点的基本属性,与一条确定的内容对应,字段含义如下:
No. | Logical Name | Physical Name | Type | Null | Default Value | Description |
---|---|---|---|---|---|---|
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 | 已翻译 |
后者记录节点的各个修改版本。字段含义如下:
No. | Logical Name | Physical Name | Type | Null | Default Value | Description |
---|---|---|---|---|---|---|
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格式的数据库表说明。