首页 资讯 电脑入门 操作系统 上网 办公 技巧 硬件 软件 网络 图像 多媒体 程序 数据库 网页网站 网游 安全 加密 企业

Wordpress系统数据库结构分析(最新3.1版本)

巧巧电脑网络 2011-03-03     收藏此文 
wordpress仅仅用了 10 个 Table就实现了这么强大的系统,让我钦佩。Wordpress对数据库的操作都是通过一个基于现有的数据库类来实现的:并且同时很多的数据库操作都封装成了函数,直接操作数据库的场合并不多。不过了解它的数据库结构。

Wordpress对数据库的操作都是通过一个基于现有的数据库类来实现的:并且同时很多的数据库操作都封装成了函数,直接操作数据库的场合并不多。不过了解它的数据库结构,这样可以对它有个总体上的把握,也有利于源码的分析

Wordpress官方的数据表介绍的文章,可以去看看:http://codex.wordpress.org/Database_Description

数据表的总体结构如下图(为了节约篇幅,这里仅列出了主键、外键及某些字段):

Wordpress系统数据库结构分析(最新3.1版本)(图一)

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_commentmeta

用户评论。的meta属性值表,这个比较简单,不说了吧。因该是3.1版本之后才增加的表。

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这个类中也看到了这样的声明:
de>// 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');
de>de>不知道上面的'categories', 'post2cat','link2cat'是不是虚表,还是为了兼容以前的版本用的,大家有什么看法的都尽管说说吧。

拓展阅读:系统档案:亦真亦假的Svchost.exe

√了解Svchost.exe的功能 √判断真假Svchost.exe进程 √清除伪装成Svchost.exe的病毒、木马 关于“系统蓝色档案”栏目 Svchost.exe、lsass.exe、wdfmgr.exe,打开进程列表后你会发现一大堆不知用途的进程,究竟是系统进程还是木马病毒?下面针对这类病毒常用的几种欺骗手法来进行分析。

下一篇:
本类最热图文
Google
巧巧电脑网络编辑信箱  告诉我们您想看的专题或文章