前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文详解 WordPress 的分类模式设计:terms, term_taxonomy 和 term_relationships 表之间的关系

一文详解 WordPress 的分类模式设计:terms, term_taxonomy 和 term_relationships 表之间的关系

作者头像
Denis
发布2023-04-13 10:06:25
4190
发布2023-04-13 10:06:25
举报
文章被收录于专栏:WordPress果酱

WordPress 2.3 版本之前文章只有分类的, 2.3 版本之后才增加了标签,所以可以说 WordPress 2.3 引入了新的分类模式,新的模式将取代 categories,post2cat 和 link2cat 这三个数据表,并引进三个新的更灵活的数据表:termsterm_taxonomyterm_relationships 表。

terms 表

第一个是 terms 表,它保存 term 的基本信息。

代码语言:javascript
复制
term_id bigint(20) unsigned NOT NULL auto_increment,
name varchar(200) NOT NULL default '',
slug varchar(200) NOT NULL default '',
term_group bigint(10) NOT NULL default 0,
PRIMARY KEY (term_id),
KEY slug (slug($max_index_length)),
KEY name (name($max_index_length))

字段

描述

term_id

term 的唯一 ID

name

term 的名字

slug

用于 URL 中,使得 URL 更加友好

term_group

用于把相似的 terms 集合在一起

term_taxonomy 表

一个 term 不能由它自己决定是 category(分类)还是 tag(标签),它必须通过 term_taxonomy 这个数据表来决定:

代码语言:javascript
复制
term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment,
term_id bigint(20) unsigned NOT NULL default 0,
taxonomy varchar(32) NOT NULL default '',
description longtext NOT NULL,
parent bigint(20) unsigned NOT NULL default 0,
count bigint(20) NOT NULL default 0,
PRIMARY KEY (term_taxonomy_id),
UNIQUE KEY term_id_taxonomy (term_id,taxonomy),
KEY taxonomy (taxonomy)

字段

描述

term_taxonomy_id

term+taxonomy 对的唯一 ID

term_id

terms 表外键 ID

taxonomy

指定了 term 属于什么分类模式,默认的分类模式有 “category”,“link_category” 和 “post_tag”。

parent

指定 terms 在 taxonomy 中层次关系

description

指定 term 在 taxonomy 中定义的描述

count

记录在每个 term+taxonomy 对中有多个对象,比如 taxonomy 为 “category”,则 count 记录了有多少篇文章在这个分类中。

term_relationships 表

最后一个表 table,term_relationships,把如 posts 和 links 这些对像和 term_taxonomy 表中的 term_taxonomy_id 联系起来。

代码语言:javascript
复制
object_id bigint(20) unsigned NOT NULL default 0,
term_taxonomy_id bigint(20) unsigned NOT NULL default 0,
term_order int(11) NOT NULL default 0,
PRIMARY KEY (object_id,term_taxonomy_id),
KEY term_taxonomy_id (term_taxonomy_id)

字段

描述

object_id

post 或者 link 的 ID

term_taxonomy_id

来自 term_taxonomy 表的外键 ID

term_order

指定了显示的顺序

拆分共享

新的分类模式模式和 Taxonomy API 的灵活性意味着插件能够能够非常容易增加新的分类模式和对象类型,甚至不同的分类模式可以共享 term,WordPress 4.2 之前确实是这样做的,支持不同的分类模式共享一个 term,比如同时有一个「使用技巧」的标签和分类,他们使用同一个 term。

但是这样设计很大的问题,因为在分类编辑页面,把「使用技巧」改成「WP使用技巧」,然后标签「使用技巧」也跟着改了。

这样是不是最好的设计,肯定不是,所以 WordPress 4.2 之后这个共享机制就取消了,不允许共享了,现在同时有一个「使用技巧」的标签和分类,他们不是同一个 term,会生成两个term。

所以如果某种程度上说,term 和 term_taxonomy 表是一一对应了,他们其实可以合并成一个表,但是 WordPress 为了考虑兼容问题就保留下来,看看 WordPress 的发展历程,和设计的修改,其实对我们自己设计一些系统是很有帮助的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • terms 表
  • term_taxonomy 表
  • term_relationships 表
  • 拆分共享
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档