文档章节

WordPress解析之数据库

万里虎
 万里虎
发布于 2014/12/14 09:03
字数 1333
阅读 50
收藏 0

WordPress已经到了3.2.1版了,不再单纯是一个博客系统了,逐步走向了CMS方向。这样一个功能强大的程序,数据仅仅只有10个表,可见WordPress深厚的功底。

我对WordPress的数据库表做了一个简单的分析,版本是3.2.1,简单的分享一下。

WordPress官方有一个关于数据库的说明文档:

http://codex.wordpress.org/zh-cn:数据库描述

WordPress操作数据库主要是通过一个封装好的DB类来实现的,具体可以查看includes目录下的wp-db.php文件。

良好的头部注释习惯:


/**
* WordPress DB Class
*
* Original code from {@link http://php.justinvincent.com Justin Vincent (justin@visunet.ie)}
*
* @package WordPress
* @subpackage Database
* @since 0.71
*/

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表,关于垃圾评论的相关“案底”都是这在这表中,这个表不属于基本表的范围。

按照表存储的信息类型,可以分为以下几类:

  • 用户信息表:包括wp_users表和wp_usermeta
  • 链接信息表:包括wp_links表
  • 文章信息表:包括wp_posts、wp_postmeta、wp_comments
  • 分类标签表:包含了对分类,链接分类,标签的管理,包括wp_terms,wp_term_relationships和wp_term_taxonomy表
  • 全局设置表:包括wp_options表。

用户信息表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语句如下:

  1. DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';   
  2. DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';   
  3. DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';   
  4. DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';   
  5. DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';  

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个表,如有不正确的地方敬请指正。

本文转载自:http://www.zxlive.net/wordpress-database.html

万里虎
粉丝 43
博文 108
码字总数 27724
作品 0
海淀
CTO(技术副总裁)
私信 提问
LAMP 编译安装 +wordpress+discuz

#软件下载 #开源博客Wordpress 下载地址:https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz #PHP 7 下载地址:http://cn2.php.net/distributions/php-7.1.4.tar.gz #apache 下载地址:......

chaunceyjiang
2018/06/26
0
0
用WordPress搭建个人博客网站

一直想做搭建一个个人的博客网站,近日终于完成,效果如下: 接下来就是慢慢完善它啦! 下面就介绍一下怎么搭建: 首先,你得有云服务器:https://cloud.tencent.com/act/free?fromSource=g...

Viljw
2018/01/09
0
0
WordPress缓存插件--WP Super Cache

WP Super Cache 是 WordPress 官方开发人员 Donncha 开发,是当前最高效也是最灵活的 WordPress 静态缓存插件。它直接生成 HTML 文件,这样 Apache 就不用解析 PHP 脚本,通过使用这个插件,...

匿名
2009/11/09
3K
1
阿里云 服务器搭建网站完整教程【小白攻略】

服务器最大的用途,就是可以搭建网站,许多人都认为搭建网站是一件很难的事情,因为包含许多的比较专业东西,比如服务器、编程之类的,确实,在几年前是这样的,普通人想要自己做一个网站太难...

勤劳的小蜜蜂
04/26
0
0
快速搭建网站简明指南

准备工作: 先要拥有一个自己喜欢的域名。申请域名中国的有万网,国外就是godaddy(狗爹)可以支付宝 目前经过亲测推荐万网,更方便快捷.采用外国服务器加万网域名仍然可以避免繁杂的备案. 租服...

天涯明月笙
2018/01/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
50分钟前
4
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
51分钟前
5
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
5
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
今天
6
0
第八讲:asp.net C# web 读取文件

本讲主要讲解如何在asp.net页面上传文件。 首先,前台页面: 其次,后台页面: 结果: 1、前台效果: 2、后台结果:

刘日辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部