WordPress数据库研究
该系列文章将会详细介绍WordPress数据总体的设计思路、详细介绍WordPress10个数据表的设计、并对WordPress系统中涉及的用户信息、分类信息、链接信息、文章信息、文章评论信息、基本设置信息这6类信息做详细介绍。
《WordPress数据库研究(2.6.2版本)》包括了以下内容:
1、数据库简介及数据表关系介绍
2、wp_comments评论数据表介绍
3、wp_links链接数据表介绍
4、wp_options基本配置数据表介绍
5、wp_postmeta文章特殊信息数据表介绍
6、wp_posts文章信息数据表介绍
7、wp_terms分类信息数据表介绍
8、wp_term_relationships分类关系数据表介绍
9、wp_term_taxonomy分类信息数据表介绍
10、wp_usermeta用户数据表介绍
11、wp_users用户信息表介绍
12、用户信息数据库操作介绍
13、分类信息数据库操作介绍
14、链接信息数据库操作介绍
15、文章信息数据库操作介绍
16、文章评论信息数据库操作介绍
17、基本信息数据库操作介绍
一 概述
本章简要介绍WordPress数据库的相关知识,让您对这个优秀的博客系统数据库设计的总体构成能够有基本的认识。(如果您是对本文描述的10个数据表之间的关系不理解,没关系,接着看完本系列文章在回过头来看,相信那个时候你就会完全理解这篇文章所说的内容了。)
优秀的WordPress博客系统是构建在10个数据库表的基础之上的,WordPress的官方文档对这10个数据表有一个大概的介绍,具体网址是:WordPress数据库官方文档。
WordPress数据库的10个数据表分别是:
表名(点击表名查看详细介绍) | 描述 |
wp_comments | 文章评论信息表 |
wp_links | 链接信息表 |
wp_options | 基本配置信息表,通常通过get_option来操作,该表通常作为插件存储数据的一个地方。 |
wp_postmeat | 文章额外数据表,例如文章浏览次数,文章的自定义字段等都存储在这里。 |
wp_posts | 文章信息表,包括了日志、附件、页面等等信息。是WordPress最重要的一个数据表。 |
wp_terms | 文章分类、链接分类、标签的信息表。 |
wp_term_relationships | 分类与文章信息表(wp_posts)、链接表(wp_links)的关联表。 |
wp_term_taxonomy | 分类信息表,区分wp_terms信息的分类类型,有category、link_category和tag三种分类类型。 |
wp_usermeta | 用户额外信息表 |
wp_users | 用户基本信息表。存放系统所有用户基本信息。 |
WordPress数据库表之间的关系是什么呢?
要搞明白这个问题以及对WordPress数据表之间的关系有更加深刻的理解,让我们先来想想WordPress博客系统的功能,默认安装的WordPress2.6.2版本博客系统涉及的数据信息主要包括了用户信息、分类信息、链接信息、文章信息、文章评论信息、基本配置信息这6类信息。
用户信息:系统中所有注册用户的帐号信息。
分类信息:包括了文章分类、链接分类、标签这3中分类信息。
链接信息:就是博客系统中的友情链接信息。
文章信息:博客系统中的日志、日志产生的附件、页面等信息。
文章评论信息:对具体日志或者附件的评论信息。
基本配置信息:系统中的基本配置信息,例如博客名称,博客地址等等。
WordPress数据库的10个数据表就是为了存储以上6类数据信息而设计,这些表之间的总体关系结构如下图所示:
从上图可以看出WordPress博客系统6类数据信息分别所涉及的数据表及关系如下表所示:
信息类型 | 涉及数据表及关联关系 |
用户信息 | 数据表:wp_users、wp_usermeta,关联关系:wp_users.ID->wp_usermeta->user_id |
分类信息 | 数据表:wp_terms、wp_term_taxonomy关联关系:wp_terms->term_id->wp_term_taxonomy |
链接信息 | 数据表:wp_links、wp_term_relationships、wp_terms、wp_term_taxonomy、wp_users、wp_usermeta关联关系:一,确定链接所属分类(1)wp_links.link_id->wp_term_relationships.object_id,(2)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id (该关系还要取决与wp_term_taxonomy表中的taxonomy分类类型为“link_category”)(3)wp_terms->term_id->wp_term_taxonomy二、确定链接所有者(4)wp_links.link_owner->wp_users.ID(5)wp_users.ID->wp_usermeta.user_id |
文章信息 | 数据表:wp_posts、wp_postmeta、wp_comments、wp_term_relationships、wp_terms、wp_term_taxonomy、wp_users、wp_usermeta关联关系:一、确定文章信息(1)wp_posts.ID->wp_postsmeta.post_id二、确定文章评论(2)wp_posts.ID->wp_comments.comment_post_id三、确定文章评论的作者(3)wp_comments.comment_author->wp_users.ID
(4)wp_users.ID->wp_usermeta.user_id 四、确定文章所属分类 (5)wp_posts.ID->wp_term_relationships.object_id, (6)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id (7)wp_terms->term_id->wp_term_taxonomy 五、确定文章作者 (8)wp_posts.author->wp_users.ID; (9)wp_users.ID->wp_usermeta.user_id |
文章评论信息 | 数据表:wp_comments、wp_posts、wp_users、wp_usermeta关联关系:一、确定评论的文章(1)wp_comments.comment_post_id->wp_posts.ID二、确定评论的作者(2)wp_comments.comment_author->wp_users.ID(3)wp_users.ID->wp_usermeta.user_id |
基本配置信息 | 数据表:wp_options没有关联关系 |
二 wp_comments评论数据表介绍
该篇文章将会详细的介绍WordPress数据库中wp_comments评论数据表各个字段的含义,并会介绍wp_comments数据表的索引信息。
wp_comments数据表中存储着WordPress博客系统的评论信息,包括已经通过审核的、等待审核的以及垃圾评论信息。该表的各个字段的具体含义如下图所示(该图来源与西北大学WordPress源码解读小组):
从wp_comments评论数据表的设计结构可以看出,该表分别与wp_posts文章信息表、wp_users用户信息表有关联关系。其中wp_comments数据表通过外键comment_post_ID与wp_posts数据表相关联着,也就是说某条评论信息必然是对某篇文章信息所做的评论;wp_comments数据表通过外键user_id与wp_users用户数据表相关联,如果user_id为0则为游客评论,也就是说当wp_comments表中user_id为0,那么就没有必要去查询wp_users用户数据表了。
其实以上这段话说白了就是:评论肯定是对某篇文章的评论。评论人是本站注册用户,也可以是游客、tracback(机器)等(游客当然和系统的用户信息表没有关系了)。
wp_comments评论数据表的索引在WordPress2.6.2版本中有5个,如下(下图来源于WordPress官方数据库介绍):
上图列出wp_comments评论数据表的主要目的是希望在您开发评论相关的插件或者函数接口时,能够根据以上索引信息来优化您的SQL语句。
三 wp_links链接数据表
该篇文章将会详细的介绍WordPress数据库中wp_links链接数据表各个字段的含义,并会介绍wp_links数据表的索引信息。如果你对WordPress博客系统中10个数据表的总体关系还不清楚,请返回该系列文章的第一篇《WordPress数据库简介》。
wp_links链接数据表保存着WordPress博客系统中所有的链接信息,也就是所谓的友情链接信息。该表的各个字段的详细含义如下图所示(本图来源于西北大学WordPress源码解读小组):
熟悉WordPress博客系统的朋友都应该知道在WordPress中链接还可以具有分类,也就是说可以为链接创建链接分类、然后再给指定的链接分类添加链接。例如心花放足球队博客中的链接分类有我们的宝贝儿、我们的家属、我们的队员等,并且在这些链接分类下分别增加了一些链接信息。
也就是说wp_links表只存储了具体链接信息,要使链接具有分类属性,那么它必须与链接分类数据表相关联。从上图中也可以看出来,wp_links链接表与wp_term_relationships链接分类关联表相关联实现链接分类功能。
在wp_links链接表中如何查询出某链接所属的链接分类是通过主键link_id与wp_term_relationships链接分类关联表的object_id相关联,从而进一步关联wp_term_taxonomy分类类型表与wp_terms分类信息表。具体关于链接信息及链接分类信息相关联的详细信息请参考《链接信息数据库操作介绍》,在这里不做进一步介绍了。
链接信息除了具有链接分类属性外,还具有链接拥有者属性,也就是通过wp_links链接表中的外键link_owner与wp_users用户表的ID相关联。链接必须具有拥有者,我的理解就是wp_links链接表通过link_owner来标记是谁创建了这个链接。
wp_links链接表的索引信息如下表所示:
上图列出wp_links链接表的主要目的是希望在您开发链接信息相关的插件或者函数接口时,能够根据以上索引信息来优化您的SQL语句。
四 wp_options基本配置表
该篇文章将会详细的介绍WordPress数据库中wp_options基本配置表各个字段的含义以及wp_options数据表与其它数据表的关联关系,并会进一步介绍wp_links数据表的索引信息。如果你对WordPress博客系统中10个数据表的总体关系还不清楚,请返回该系列文章的第一篇《WordPress数据库简介》。
wp_options配置表保存着WordPress博客系统中所有的基本配置信息。例如博客的名称、博客地址等,这些配置信息通常都是通过WordPress管理后台的“设置(settings)”功能来进行配置;有一部分配置信息则是通过具体插件管理的界面进行配置。通俗点来说,就是你在WordPress设置(settings)中设置的内容都保存在wp_options配置表中。
该表的各个字段的详细含义如下图所示(本图来源于西北大学WordPress源码解读小组):
在WordPress模板制作开发中你通常可以通过“bloginfo(配置名)”来引用指定设置的值,或者在WordPress插件开发中可以通过“get_option(设置名)”来获得配置的值。例如想得到常规设置中设置的博客名称可以通过:<?php bloginfo(‘name’); ?>取得。看到这里也许有一部分朋友和我一样会有一个疑问:“我怎么知道bloginfo函数可以使用的配置名都有哪些呀”,关于这个问题以及get_option请参考剑锋博客的文章:《基本信息数据库操作介绍》。
wp_options配置表是WordPress数据库中唯一一个个和其它任何数据表都没有关联关系的数据表。
wp_options配置表的索引信息如下表所示:
上图列出wp_options配置表的主要目的是希望在您进行WordPress插件开发利用wp_options配置表存储数据时,能够根据以上索引信息来优化您的SQL语句。
五 wp_postmeta文章特殊数据表
该篇文章将会详细介绍WordPress数据库中wp_postmeta文章特殊数据表各个字段的含义以及wp_postmeta文章特殊数据表与其它数据表的关联关系,并会进一步介绍wp_postmeta文章特殊数据表的索引信息。如果你对WordPress博客系统中10个数据表的总体关系还不清楚,请返回该系列 文章的第一篇《WordPress数据库简介》。
wp_postmeta文章特殊数据表保存着文章的特殊数据信息,什么是文章的特殊数据呢?文章特殊数据信息也就是文章最后编辑时间、文章的浏览量、文章的自定义字段等等。为什么叫做文章特殊数据呢?我个人的理解是这些数据每一篇文章都不一样的。
该表的各个字段的详细含义以及索引信息如下图所示(本图来源于西北大学WordPress源码解读小组):
wp_postmeta文章特殊数据表与其它表的关联关系:
文章特殊信息数据表是通过外键post_id与wp_posts文章表的ID关联起来的,例如要查找ID为1的文章的特殊数据可以通过以下SQL语句实现:
SELECT * FROM `wp_postmeta` WHERE `post_id`=’1′
上图同时也列出了wp_postmeta文章特殊数据表的索引信息的主要目的是希望在您进行WordPress插件开发或者编写特殊函数接口时,能够根据以上索引信息来优化您的SQL语句。
六 wp_posts文章数据表介绍
该篇文章对WordPress数据库中最重要的wp_posts文章数据表做详细介绍,主要包括对wp_posts文章数据表各个字段的含义、与其它数据表的关联关系、索引信息,以及使用wp_posts文章数据表的一些感受。如果你对WordPress博客系统中10个数据表的总 体关系还不清楚,请返回该系列 文章的第一篇《WordPress数据库简介》。
wp_posts文章数据表是WordPress博客系统最核心的一个数据表,该表存储着博客系统中所有的文章数据,这些文章数据就是通过管理后台的“日志管理和页面管理”中所产生的数据,主要包括了日志信息和页面信息。
该表的各个字段的详细含义以及索引信息如下图所示(本图来源于西北大学WordPress源码解读小组):
从wp_posts文章数据表图中可以看到该数据表的字段特别多,yangjf个人认为不管是进行WordPress模版制作开发,还是WordPress插件开发,都非常有必要记住、熟悉、理解以上各个字段。具体的关于文章信息的数据库操作请看:《用户信息数据库操作介绍》
备注:文章数据表将日志、页面中所涉及的附件等也都单独生成一篇文章,例如日志中的一张图片、一个Word文档……
wp_posts文章数据表与其它数据表的关系:
文章数据表一共与其它7个数据表有关系,其中与4个数据表有直接关系,与3个数据表有间接关系。这些关联的数据表分别为:
一、直接关联关系表
(1)wp_postmeta文章特殊数据表
(2)wp_comments文章评论表
(3)wp_users用户表
(4)wp_term_relationships分类关联表
二、间接关联关系表
(5)wp_term_taxonomy分类类型表
(6)wp_terms分类表
(7)wp_usermeta用户信息表
七 wp_terms分类信息表
该篇文章对WordPress数据库中的wp_terms分类信息表表做详细介绍,包括了wp_terms分类信息表各个字段的含 义、与其它数据表的关联关系、索引信息。如果你对WordPress博客系统中10个数据表的总 体关系还不清楚,请返回该系列 文章的第一篇《WordPress数据库简介》。
wp_terms分类表是WordPress博客系统基础数据表之一,该表存储着博客系统中的分类信息,包括了文章分类信息、链接分类信息,以及标签信息。具体如何从数据库中查询相应的分类信息请参阅:《分类信息数据库操作介绍》,下边首先了解一下wp_terms分类表各个字段的含义,如下图(本图来源于西北大学WordPress源码解读小组)所示:
WordPress博客系统中所有的分类信息“文章分类、链接分类、标签”都存储在以上的数据表,但是怎么确定这些分类信息的类型呢?这就是由与wp_terms分类表相关联的wp_term_taxonomy分类类型表来判断。分类信息又是怎么与具体的文章、链接、标签所关联起来呢?关于这个问题的请参阅:《分类信息数据库操作介绍》。
wp_terms分类表与其它数据表的关联关系:
分类表与wp_term_taxonomy分类类型表、wp_term_relationships分类关联表三个表共同构成了WordPress博客系统的分类信息存储载体。
也就是说在WordPress博客系统中,wp_terms分类表中存储着分类信息;wp_term_taxonomy分类类型表存储着分类类型的信息,它决定了wp_terms分类表中分类的类型是文章分类,还是链接分类,或者是标签;wp_term_relationships分类关联表则存储着分类信息与文章、链接的关联关系。这些数据表之间的关于分类信息的数据库操作请参阅:《分类信息数据库操作介绍》。
wp_terms分类表的索引信息:
上图列出了wp_terms分类表的索引信息的主要目的是希望在您进行WordPress插件开发或者编写特殊函数接口时,能够根据以上索引信息来优化您的SQL语句。
八 wp_term_relationships分类关系表
该篇文章对WordPress数据库中的wp_term_relationships分类关联关系信息表做详细介绍,包括了wp_term_relationships分类关联关系信息表各个字段的含 义、与其它数据表的关联关系、索引信息。如果你对WordPress博客系统中10个数据表的总 体关系还不清楚,请返回该系列 文章的第一篇《WordPress数据库简介》。
wp_term_relationships分类关系表是WodPress系统中存储分类与具体文章或者链接的关联关系的数据表。该表是三个分类数据表与wp_posts文章表、wp_links链接表之间相互关联的桥梁。更多相关资料可以参阅:《wp_terms分类表—WordPress数据库》、《wp_term_taxonomy分类类型表》以及详细介绍分类信息数据库操作的《分类信息数据库操作介绍》。
下边首先了解一下wp_term_relationships分类关系表各个字段的含义,如下图(本图来源于西北大学WordPress源码解读小组)所示:
wp_term_relationships分类关系表与其它数据表的关联关系:
wp_term_relationships分类关系表通过外键object_id与wp_posts文章表的ID相关联、或者通过外键object_id与wp_links链接表的link_id相关联。
究竟wp_term_relationships分类关系表中给定的一条记录的object_id是wp_posts->ID关联,还是与wp_links->link_id关联还要取决于该记录object_id对应的term_taxonomy_id在wp_term_taxonomy分类类型表中的具体类型。
在这里只要了解wp_term_relationships分类关系表是分类信息与具体文章或者链接的桥梁就可以了,进一步如何判断一个分类信息是文章分类、还是链接分类、或者是tag信息,请参阅:《wp_term_taxonomy分类类型表》与《分类信息数据库操作介绍》。
wp_term_relationships分类关系表的索引信息:
上图列出了wp_term_relationships分类关系表的索引信息的主要目的是希望在您进行WordPress插件开发或者编写特殊函数接口时,能够根据以上索引信息来优化您的SQL语句。
九 wp_term_taxonomy分类类型信息表
该文对WordPress数据库中的wp_term_taxonomy分类类型信息表做详细介绍,包括了 wp_term_taxonomy分类类型信息表各个字段的含 义、与其它数据表的关联关系、索引信息。如果你对WordPress博客系统中10个数据表的总 体关系还不清楚,请返回该系列 文章的第一篇《WordPress数据库简介》。
wp_term_taxonomy分类类型信息表存储着分类是属于文章分类,还是链接分类,还是标签分类的类型信息。
该表各个字段的含义,如下图(本图来源于西北大学WordPress源码解读小组)所示:
其中分类类型由字段”taxonomy“来决定,分别是:category(文章分类)、link_category(链接分类)、tag(标签)。
wp_term_taxonomy分类类型表索引信息:
上图列出了wp_term_taxonomy分类类型表的索引信息的主要目的是希望在您进行WordPress插件开发或者编写特殊函数接口时,能够根据以上索引信息来优化您的SQL语句。