WordPress已经到了3.2.1版了,再也不单纯是一个博客系统了,逐步走向了CMS方向。这样一个功能强大的程序,数据仅仅只有10个表,可见WordPress深厚的功底。 php
我对WordPress的数据库表作了一个简单的分析,版本是3.2.1,简单的分享一下。 sql
WordPress官方有一个关于数据库的说明文档: 数据库
http://codex.wordpress.org/zh-cn:数据库描述 浏览器
WordPress操做数据库主要是经过一个封装好的DB类来实现的,具体能够查看includes目录下的wp-db.php文件。 app
良好的头部注释习惯: wordpress
/**
* WordPress DB Class
*
* Original code from {@link http://php.justinvincent.com Justin Vincent (justin@visunet.ie)}
*
* @package WordPress
* @subpackage Database
* @since 0.71
*/ post
WordPress核心的数据库表包括下面10个: 网站
wp_comments | wp_links | wp_options | wp_postmeta | wp_posts |
wp_term_relationships | wp_term_taxonomy | wp_terms | wp_usermeta | wp_users |
若是有使用WordPress自带的防Spam插件akismet的话,会自动建立一个wp_commentmeta表,关于垃圾评论的相关“案底”都是这在这表中,这个表不属于基本表的范围。 spa
按照表存储的信息类型,能够分为如下几类: .net
用户信息表wp_users和wp_usermeta,主要存储系统用户的相关信息,两个表是经过user的id进行关联的。wp_users主要存储的内容包括:登陆名、密码、昵称、Email、URL、用户状态、用户显示名称等,应该说是最最基本的一些信息。wp_usermeta主要是存储用户自定义的相关资料,如权限等,全部经过网站后台:用户->个人我的资料路径设置的信息都存储在这个表中。
连接信息表wp_links,存储友情连接的相关资料,是最简单的一个表,与其余表基本没有什么关联。
文章信息表,是WordPress的核心,网站的全部文章都是保存在这几个表中wp_posts、wp_postmeta、wp_comments,分别是文章内容,文章属性,文章评论。
wp_posts是文章内容表,不过须要注意的是,这个表中存储的内容不单单是发表的博文内容,还包括公告、导航菜单、单页面、文章附件等内容,是经过post_type这个字段来进行区分的,目前所知的有以下几种类型:post-博文、page-单页面、nav_menu_item-导航菜单项、attachment-文章附件、bulletin-公告。固然,自动保存的那些文章也是在这里面了,经过post_status字段进行标识,publish表示公开的文章,draft表示文章草稿,inherit表示继承,通常用于附件。
wp_postmeta存储的是文章的一些属性,表结构很简单,只有4个字段,其中meta_key是用来标识这个属性的用途,包括附件、插件、文章等等不少的属性。这个表也是很容易产生冗余的一个表,如meta_key为 '_edit_lock' 或者 '_edit_last' 或者 '_wp_old_slug' ,建议按期清理,清理的sql语句以下:
wp_comments存储的是文章的评论内容,其实WordPress自身将不少基础的信息都存储下来了,例如评论者浏览器、IP等,全部后期若是有相关的插件直接调用便可,评论表中有个字段是“user_id”,通常若是为0,即为非网站用户留言,不为0,则是对应用户表中的id。还有比较重要的两个字段是 comment_post_ID 和 comment_approved,前一个用来指示这条评论隶属于哪一篇文章,后一个用来记录审核情况。
关系最为复杂的三个表是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的补充,如某一个term的类型,由taxonomy字段进行标识,link_category表示的是连接分类,category表示文章分类,post_tag表示文章标签。还有相关的信息,如父节点、统计信息、描述等。
wp_term_relationships是一张映射表,object_id是与不一样的对象关联,例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是关联wp_term_taxonomy中的term_taxonomy_id。
这样能够看到,标签、分类的查询是很是耗时的,主要是由于关系比较复杂,涉及到三张表。
wp_options就比较简单了,就是一些全局的设置项,如主题、插件状态等信息。
实体数据库中的基本表就是上述10个表,若有不正确的地方敬请指正。