Wordpress数据库分析: 整体结构
Wordpress的官方文档对数据库的结构描述得并不充分,索性自己来分析一下。首先从整体结构入手。 下面是2.0.5版的数据库结构图(E-R图)。为了节约篇幅,这里仅列出了主键和外键。 图中菱形表示1:n的关系,白色部分为1,黑色部分为n。

Wordpress共有10个表,按照功能大致分为四类。
- user: 用户信息,包括
wp_users表和wp_usermeta表。 - post: 文章及评论信息,包括
wp_posts、wp_postmeta、wp_comments、wp_post2cat以及wp_categories五个表。 - link: 链接信息,包括
wp_links表和wp_linkcategories表。 - option: 全局设置信息,包括
wp_options表。
个人认为这个数据库有两个冗余的地方。一个是wp_post2cat表中的主键rel_id,其实可以不要rel_id,而使用post_id和category_id两列作为主键;
另一个是wp_options表,option_id列为自动增长列,仅使用该列即可作为主键,而不需要option_id、blog_id、option_name三列联合做主键。
另外,表的命名规则也很有意思。基本规则总结如下:
- 保存对象的基本属性,命名为
wp_objects,使用复数(如wp_posts,wp_comments); - 保存对象的扩展属性,命名为
wp_objectmeta,使用单数(如wp_postmeta,wp_usermeta); - 多对多关系,命名为
wp_a2b,其中a和b分别为多对多关系两端的对象名的缩写(如wp_post2cat)。