Home » Code » WordPress数据字典浅析

WordPress数据字典浅析

WordPress默认有11张表,我们来简单认识一下。

wp_options表

这个表有主要有option_name、option_value字段组成key-value键值对,存储网站的设置,如首页地址、日期格式、网站名称等常规设置。另外,widgit的信息、rewrite重写规则、用户角色等很多信息也是存于此表。当然,第三方开发者主题和插件的配置信息也是只能放这里了。当值是数组时是通过serialize序列化方式存储的。该表还有一个autoload字段,大多数记录这个字段值都为”yes”,当WP开始运行时第一条SQL就是一次性将所有”yes”的配置取出来。

wp_links表

这个表是用于储存链接,链接跟文章一样也是可以分类的,有大量“友情链接”时很有用。但3.5版本之后默认都给隐藏了链接管理,可能是WP想要瘦身吧。但没了这功能“友情链接”倒真是不太好搞了。

wp_comments表&wp_commentmeta表

这两个表用于存储评论。wp_comments是评论主表,评论的主要信息都在里面,如post_ID(文章或页面等的ID)、author(用户名)、user_id(用户名)等,当逆名用户 评论时user_id为0。评论之间的父子关系是通过一个comment_paretn父ID来关联。这让我对它如何实现悬挂、嵌套等评论表现形式很感兴趣。wp_commentmeta则是一个key-value结构供开发者存储一些额外的信息的表。

wp_users表&wp_usermeta表

这两个表跟评论的两个表设计理念一致。只是这里usermeta要存的东西多一些,包括用户姓、名、等级、仪表盘哪些不显示等都在里面。

wp_posts表及wp_postsmeta表

一样的设计理念。大部分的内容都在wp_posts表里面,包括文章、页面、附件、菜单项等,通过post_type来区分,默认自带了post(文章)、page(页面)、attachment(附件)、nav_menu_item(菜单项)、revision(关闭或者自动保存的版本、草稿等),当然也可以添加自定义的post_type。有个post_parent,当为页面时是它的父页面,为菜单项则为它的父菜单项,为revision时则为它正常的那个已经发表的那个post,其他情况是0。comment_count则是这个post下边有的评论的数量。

wp_postmeta内容也不少,post为菜单时,它的url、class等也在这里。开发者经常会为文章等添加一些自定义栏目,如查看量等都会存到这里,基本上有多少post,就会有多少postmeta。

wp_terms、wp_term_relationships、wp_term_taxonomy

这三个表应该是WP里边比较难理解一点的。这里terms字面意思应该理解为条款,就是都有哪些“东西”,这些“东西”包括文章分类目录、链接分类、菜单等,存于wp_terms表中。这个表,只记录这些“条款”的名称(name)与别名(slug),如未分类——uncategoried、新闻——news、主菜单——primary menu、友情链接——friendly sites。而这些“条款”得区分一下,它们属于不同的taxonomy。taxonomy字面意思是分类法、分类学,也就是这些”条款”是属于不同的”分类法”的。WP自带了category、link_category、post_tag、post_format、nav_menu这几种“分类法”,前边列举的未分类、新闻就属于category“分类法”,主菜单就属于nav_menu“分类法”,友情链接属于link_category“分类法”。除了自带的这几种“分类法”,WP还支持自定义“分类法”,使用的函数是register_taxonomy()。所有的”条款”存于wp_terms表中,“条款”与“分类法”的组合关系则存于wp_term_taxonomy表中,这里面是多对一的关系,多种“条款”对应一种“分类法”,如未分类、新闻这两种“条款”对应category一种“分类法”。表中有个count字段记录每种“条款”下有多少记录,description字段记录对这种“条款”的描述。“条款”间的层级关系也在这个表中通过parent字段来体现。当然,有的“分类法”下的“条款”是有层级关系的,有的是没有的,参考下图:(hierarchical:adj.分层的,等级体系的)

Z2Ohv

“分类法”(wp_term_taxonomy)下有“条款”(wp_terms),“条款”跟具体“条款项”的对应关系则是存储于wp_term_relationships表中,“分类法”->“条款”->“条款项”及他们存储的位置关系如下:

wp_term_relationships
在wp_term_relationships表中,是多对多的关系,一个实体对象可以同时属于多种“条款”下,一种“条款”下有多个实体对象。假如要添加一个文章的分类目录,先在wp_terms表中添加一种“条款”姑且命名为【测试】,得到term_id,这显然属于category“分类法”,再在wp_term_taxonomy表中添加一条记录,数据为得到的term_id+category,记录这个“条款”属于category“分类法”,得到term_taxonomy_id。日后往【测试】分类添加文章时,将文章ID(object_id)+得到的term_taxonomy_id写入到term_relationships,每添加一篇文章就添加一条记录。再借用一张图说明三者的关系:

wp-2.3-db-structure-categories

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.