转自:http://www.chaochaoblog.com/archives/612

wordpress数据库一向是比较小的那种,如无扩充,现在是12个表。从phpadmin进入看看后,发现一个博客的表确实是简单,不会像cms等各种纠结的关系,也许这个wp依然php而不是静态页得原因之一吧。通过对数据库的观察,最纠结的还是tags即标签的表比较复杂呢,这里来理清一下,因为最近想写个插件,为每个tags增加一张图片。

wordpress中标签实际上也是分类的一种,他将分类和标签已经完全的融合在一起了,这样做的好处无疑是将分类扩大化了,当你点击一个标签的时候,出来的是和这个标签有关的所有文章。这里也要劝告大家一下标签要合理的加。
wp用来记录这个几个标签的表分别是 wp_blogterms,wp_blogterm_relationships,wp_blogterm_taxonomy。
wp_blogterms的结构为:
1 term_id bigint(20) 这个记录的是term的id,不管是tag还是分类都叫term吧。
2 name varchar(200) 这个记录的是term的名称。
3 slug varchar(200) 这个是别名,当然是用来生成该term的连接的了。
4 term_group bigint(10)这个是类属于那个群,好像都是0哦。
好了,我们知道,这表就有了我们所有的分类和tags并且保存了访问该tags的链接地址。
wp_blogterm_relationships这个表一听就是代表了我们terms的关系么,到底和什么的关系,我们看表结构
1 object_id bigint(20) 这个是问斩的id了
2 term_taxonomy_id bigint(20) 但是这个不是term的id,这个是分类上的id了
3 term_order int(11) 这个就是顺序了。
好了,看到这里可能你会认为这个已经ok了,通过relationships这个表把terms和文章id连接起来了,但是事实并非如此,继续看下一个表 wp_blogterm_taxonomy,结构为:
1 term_taxonomy_id 这个是上面一个表中的term_taxomoy_id了,就是所谓分类上的id
2 term_id bigint(20) 这个就是分类上的id核terms的id的对应关系了
3 taxonomy varchar(32) 这个会分是分类还是标签
4 description longtext 描述
5 parent bigint(20) 父分类
6 count bigint(20) 日志计数
看完了所有的表,我们来理清楚一下关系,首先如果我们要知道一篇文章的tags,那么我们先要访问wp_blogterm_relationships这张表,然后找到和我们文章相连接的term_taxonomy_id然后根据这个id访问 wp_blogterm_taxonomy表,得到真正的term_id,之后利用这term_id访问wp_blogterms的表,从而找到我们的tags以及它的连接地址。
这样子的表的结构确实有点复杂,我想可能是wp后期的升级导致的如此的紊乱,当然也有可能是为了进行分类方便。好在wp提供的函数调用不会这么样子的折腾你,不过,想加入表的话,就难了。