在实施完一个网站的内容管理之后,抽空看了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格式的数据库表说明。
本文深入探讨了Drupal的内容管理系统中如何通过简洁的两个表——node和node_revisions来解决内容版本管理和多语种支持的问题。node表负责存储节点的基本属性,而node_revisions表则记录每个节点的不同版本。
3811

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



