Wordpress数据库结构分析—— 钱本草

来源:百度文库 编辑:神马文学网 时间:2024/04/29 11:27:46
Wordpress数据库结构分析
阿超 发表于 19 2月, 2009
3 Comments
分类 [家园建设,编程开发 ]
最近在家里无聊突然有个想法,使用java开发一个wordpress的博客系统暂且就起个名字叫J-blog系统(爪哇阁)有兴趣的朋友可以一起加入这个项目哈!首先要来分析下wordpress的数据库结构 找了一下午的资料终于看见个比较合适的就拿来了。
数据表的总体结构如下图(为了节约篇幅,这里仅列出了主键、外键及某些字段):

wordpress仅仅用了 10 个 Table就实现了这么强大的系统,让我钦佩:
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
wp_terms
wp_usermeta
wp_users
下面我们按照它们之间的关系来介绍一下这几个表:
按照功能大致分为五类。
user: 用户信息,包括wp_users表和wp_usermeta表。 link:链接信息,包括wp_links表。 post: 文章及评论信息,包括wp_posts、wp_postmeta、wp_comments。 category,link_category,tag:这个是比较复杂的信息模块,它包含了对分类,链接分类,标签的管理,包括wp_term,wp_term_relationships和wp_term_taxonomy表。 option: 全局设置信息,包括wp_options表。
wp_posts
作为一个博客系统,最核心的当然是博主发表的一些“文章”了,这些“文章”存放的地方就是这个 wp_posts 表了。注意,这里所说的“文章”是加引号的,因为这个表里存放的除了普通的文章之外,还有附件和页面(page)的一些信息。表里面的 post_type 这个字段就是用来标示类型的。还有一点需要注意的就是,这个表里一些字段是针对于 post_type 的特定类型的,比如 menu_order 这个字段是“页面(page)”特有的,用来指定“页面”的顺序。post_mime_type 是针对附件的,来指定附件的类型。
wp_postmeta
每篇文章的属性是不可能仅仅用 wp_posts 表里的那几个字段来完全标示的,往往还有一些因人而异的属性:写这篇文章时候的心情,地点等等。这些属性的名称和值类型都是不确定的,因此,Wordpress 采用了元信息(meta)来表示它们。这个表很简单,只有 meta_id, post_id, meta_key, meta_value 这四个字段。post_id 是相关 post 的 id。我们注意到 meta_value 是 longtext 类型的,这里仅是用来存储值,至于值的确切类型,需要程序员来关心。
在撰写文章的时候,我们可以发现编辑框下面有一个 Custom Fields 的选项,我们可以在这里添加 post 的 meta 信息。
wp_comments
用户评论。除了评论的内容以外,还记录了评论用户的名字,邮箱,网址,浏览器类型等信息。比较重要的两个字段是 comment_post_ID 和 comment_approved,前一个用来指示这条评论隶属于哪一篇文章,后一个用来记录审核状况。还有一个比较有意思的是这个 commnet_agent 字段,我们可以利用这个字段来统计一下用户浏览器类型。
wp_users
用户帐号表。存储用户名、密码还有一些用户的基本信息。
wp_usermeta
类似上面的 wp_postmeta,存储一些因人而异的用户信息。(比如QQ?ICQ?)
wp_options
用来记录 Wordpress 的一些设置和选项。里面有一个 blog_id 字段,这个应该是用在 MU 版里面来标示不同的 Blog 的。
wp_links
用来存储 Blogroll 里面的链接。
wp_terms
wp_term_relationships
wp_term_taxonomy
这三个表是这里面关系最复杂的了,在 Wordpress 2.2 及以前的版本中是没有这三个表的,代之的是 wp_categories、wp_post2cat 和 wp_link2cat 这三个表。对比这两个版本我们可以发现:在 2.2 版和之前的版本,post 和 link 和 category 的关系都是通过各自单独的表来记录的。而在 2.3 版中加入了 tag 的支持,Wordpress 把 post、link、tag 的分类都抽象成了统一的形式,用新的三个表来记录这些信息。
wp_terms
记录分类,链接分类,标签的一些简要信息,包括名称,缩写。
wp_term_taxonomy
是对wp_terms中的信息的关系信息补充,有所属类型(category,link_category,tag),详细描述,父类,所拥有文章(链接)数量。
wp_term_relationships
关系表,多对多的,object_id是与不同的对象关联,例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是关联wp_term_taxonomy中的term_taxonomy_id。
还有一些字段我还不太清楚是有什么用的,例如:
wp_term_relationships中的term_order;
wp_terms中的term_group,wp_option中的一些值作用等等,在以后学习的过程中再作详细的讲解吧,如果大家知道的,也可以告诉我。
在其他的文章中我看到有说虚表的,而且我在wpdb这个类中也看到了这样的声明:
// Our tables
var $posts;
var $users;
var $categories;
var $post2cat;
var $comments;
var $links;
var $options;
var $postmeta;
var $usermeta;
var $terms;
var $term_taxonomy;
var $term_relationships;
var $tables = array('users', 'usermeta', 'posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options',
'postmeta', 'terms', 'term_taxonomy', 'term_relationships');不知道上面的'categories', 'post2cat','link2cat'是不是虚表,还是为了兼容以前的版本用的,大家有什么看法的都尽管说说吧。