2019独角兽企业重金招聘Python工程师标准>>>

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

转载于:https://my.oschina.net/u/855386/blog/355923

WordPress解析之数据库相关推荐

  1. api ajax解析json数据库,api ajax解析json数据库

    api ajax解析json数据库 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务 ...

  2. mysql 改表面_MySQL_解析MySQL数据库性能优化的六大技巧,数据库表表面上存在索引和防 - phpStudy...

    解析MySQL数据库性能优化的六大技巧 数据库表表面上存在索引和防错机制,然而一个简单的查询就会耗费很长时间.Web应用程序或许在开发环境中运行良好,但在产品环境中表现同样糟糕.如果你是个数据库管理员 ...

  3. 深入解析NoSQL数据库的分布式算法

     深入解析NoSQL数据库的分布式算法 摘要:尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践.在这篇文章里,我将针对NoSQ ...

  4. 【2018开年知识盛会】15位大咖直播分享,全方位解析NoSQL数据库

    摘要: 2018年开年伊始,阿里云数据库团队将为大家带来一场别开生面的知识盛会,15位大咖汇聚云栖社区,带来18小时数据库干货分享! 点此查看原文 2018年开年伊始,阿里云数据库团队将为大家带来一场 ...

  5. java webservice 接收数据_WebService客户端,接收数据解析存入数据库

    WebService客户端,实现的功能是接收数据,按格式解析数据,最后存入相应数据库. 需求: 同步设备信息接口 url:http://localhost:54059/Service1.asmx 函数 ...

  6. wordpress连接mysql数据库_安装wordpress连接mysql数据库问题

    今天新搭建的LNMP环境,安装wordpress博客做测试,安装到填写数据库信息时,一直报错数据库连接错误,重新创建库,重新授权用户,都提示一样的错误,后来授权使用ip地址,连接成功,发一篇博文大家探 ...

  7. 深入解析oracle电子版,深入解析Oracle数据库

    深入解析Oracle数据库,数据库的启动与关闭,控制文件与数据库初始化 数据库的启动: nomount:Oracle首先寻找参数文件,然后根据参数文件中的设置,创建实例,分配内存,启动后台进程. mo ...

  8. wp-db.php,WordPress中的数据库操作类wp-db.php

    版权:转载 来源:互联网 WordPress中的数据库操作类wp-db.php的原型是ezSQL.官方网站: http://php.justinvincent.com ezSQL支持对如下数据库的操作 ...

  9. wordpress 数据库_在WordPress中使用数据库

    wordpress 数据库 Out of the box, WordPress provides tons of functions that can be used to interact with ...

最新文章

  1. Angular 4 依赖注入教程之一 依赖注入简介
  2. Nature Microbiology:微生物与海洋全球变化
  3. 纯数学教程 Page 325 例LXVIII (13)
  4. ZPhotoEngine超级算法库
  5. 分享丨10年DBA老司机整理的Oracle学习路线图
  6. PL/SQL-2 复合数据类型
  7. 开发工具:IDEA 强大的 Live Templates!
  8. 您从未听说过的Java 8的10个功能
  9. Hive 外部表关联分区数据
  10. 身价超13000亿!他又重回世界首富了
  11. 面向对象chapter10
  12. 我是如何解决jobtracker.info could only be replicated to 0 nodes, instead of 1这个问题的
  13. kitti raw data development kit的使用
  14. QT All Modules QT所有模块
  15. 【python】中 type dtype astype辨析
  16. 双代号网络图节点时间参数_双代号网络图的绘制与6个时间参数的计算,一篇全学会!...
  17. 《刺猬的优雅》观后感
  18. 矩阵的逆和矩阵的转置运算公式对比
  19. 客户端无法远程连接服务器的问题
  20. BIM学习笔记(一)

热门文章

  1. 结构型模式—外观模式
  2. MVC运转-平台分发
  3. clumsy模拟客户端网络差的场景的使用
  4. python当中的生成器
  5. 黑马程序员之单例模式学习
  6. Android Animation学习(六) View Animation介绍
  7. Aspectj 实现Method条件运行
  8. 全局容器的创建和使用---单件模式和IOC的容器的应用
  9. Python|队列Queue
  10. P4213 【模板】杜教筛