之前用了一段时间的Wordpress,觉得真的是一个优秀的博客系统,而且有大量的主题和插件。是我目前用过的最棒的一个博客平台。不仅如此,Wordpress 的代码也是写得非常漂亮,很适合用来学习PHP,真的是很好,看代码看起来很舒服。

打算深入研究一下Wordpress,顺便把我自己的学习经历也写下来,跟大家一起分享,有什么不对的地方,希望各位多多指点。(本人分析的是2.5版本的)

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

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

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中的一些值作用等等,在以后学习的过程中再作详细的讲解吧,如果大家知道的,也可以告诉我。

更多查看  http://seoff.blog.163.com/blog/static/1110284242009628104924542/

Wordpress-数据库结构分析(转)的更多相关文章

  1. WordPress数据库及各表结构分析

    默认WordPress一共有以下11个表.这里加上了默认的表前缀 wp_ . wp_commentmeta:存储评论的元数据wp_comments:存储评论wp_links:存储友情链接(Blogro ...

  2. 【转】 WordPress数据库及各表结构分析

    默认WordPress一共有以下11个表.这里加上了默认的表前缀 wp_ . wp_commentmeta:存储评论的元数据wp_comments:存储评论wp_links:存储友情链接(Blogro ...

  3. wordpress数据库优化wp_posts表 OPTIMIZE

    wordpress数据库优化wp_posts表 对 MySQL 数据记录进行插入.更新或删除时,会占有不同大小的空间,记录就会变成碎片,且留下空闲的空间.就像具有碎片的磁盘,会降低性能,需要整理,因此 ...

  4. WordPress数据库研究 (转)

    该系列文章将会详细介绍WordPress数据总体的设计思路.详细介绍WordPress10个数据表的设计.并对WordPress系统中涉及的用户信息.分类信息.链接信息.文章信息.文章评论信息.基本设 ...

  5. 基于php编写的新闻类爬虫,插入WordPress数据库

    这个爬虫写的比较久远,很久没有更新博客了. 1.首先思路是:通过php的curl_setopt()函数可以方便快捷的抓取网页. 2.什么样的新闻吸引人呢,当然的热点新闻了.这里选百度的搜索风云榜,获取 ...

  6. 数据库:MySQL实战;左链接;查询WordPress数据库中的文章内容

    在1年前,我用学生价租了一个阿里云服务器(是真的便宜啊),自己在CentOS系统上用命令行搭了个WordPress的环境,开始了为期一个月使用自建博客的历程. 事实证明,博客在类似博客园这样的平台上写 ...

  7. WordPress数据结构分析

    WordPress仅仅用了10 个表:wp_comments, wp_links, wp_options, wp_postmeta, wp_posts, wp_term_relationships, ...

  8. 导出wordpress数据库Fatal error: Cannot 'break' 2 levels

    今天我打算备份一下我在Linux下用宝塔面板搭建的phpmyadmin导出wordpress数据库.选择数据库后给我一个Fatal error: Cannot 'break' 2 levels in ...

  9. wordpress数据库结构以及数据表之间的关系

    默认WordPress一共有以下11个表.这里加上了默认的表前缀 wp_ . wp_commentmeta:存储评论的元数据 wp_comments:存储评论 wp_links:存储友情链接(Blog ...

  10. WordPress 数据库结构及表字段作用解析

    对于WordPress的开发可以说子凡已经是如痴如醉了,通过 WordPress 本身的开放性接口可以做到很多的事情,但是有些时候我们可能更喜欢直接查询数据库来实现某些 WordPress 没有提供的 ...

随机推荐

  1. c++函数重载---2

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 写在前面: 函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函 ...

  2. TCP通讯程序设计---5

    这里主要包含客户机和服务器的编程. 一.编程模型函数化 使用函数说明:socket的理解 服务器: 创建socket使用函数----->socket 绑定地址使用函数------->bin ...

  3. 在线QQ客服 生成

    很简单,分为个人QQ和企业QQ: 一:企业QQ代码: http://crm2.qq.com/page/portalpage/wpa.php?uin=123456&aty=1&a=0&a ...

  4. PHP内存消耗

    由于变量占用的空间不一样,所以其消耗的内存大小也不一样,在PHP中我们可以通过使用“memory_get_usage”来获取当前PHP消耗的内存.但是根据操作系统.PHP版本以及PHP的运行方式可能输 ...

  5. VPS 搭建 SS

    推荐 VPS:http://www.vultr.com/?ref=6915101 1.连接 VPS 运行命令 ssh root@xx.xx.xx.xx -p 22 // vultr 的端口为 22 然 ...

  6. 【BZOJ1005】【HNOI2008】明明的烦恼

    又是看黄学长的代码写的,估计我的整个BZOJ平推计划都要看黄学长的代码写 原题: 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连 ...

  7. android XML解析器全解案例

    1.使用pull解析 package com.example.myxml; import java.io.InputStream; import java.util.ArrayList; import ...

  8. ABBYY FineReader 12双十一特价来袭

    大家似乎都知道:好的办公软件,只要对自己有用,再贵都值得. 可偏偏有人不以为然,几百块钱也是肉啊.也对,毕竟不是人人都能做到"舍得".但没有舍,哪来的得呢? 作为优秀的光学字符识别 ...

  9. JavaScript 的字符串转换

    数字.布尔值等其他数据类型都可以转换成字符串:一般来说,脚本引擎将根据上下文自动完成这样的转换.例如,当把数字或布尔型变量传给希望接收字符串变量的函数时,就会先隐式地将该数值转换成字符串,再进行处理: ...

  10. Windows帐户类型

    摘自:http://blog.csdn.net/shineorrain/article/details/18181707 LocalSystem   账户  LocalSystem是预设的拥有本机所有 ...