WordPress的分类模式表设计详解

科技1年前 (2023)发布 iowen
155 0 0

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

terms 表

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

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))

WordPress的分类模式表设计详解

term_taxonomy 表

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

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)
WordPress的分类模式表设计详解

term_relationships 表

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

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)
WordPress的分类模式表设计详解

拆分共享

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

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

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

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


长按下面二维码关注「WordPress果酱」
每天分享 WordPress 使用技巧

⏬⏬ 下载 WPJAM Basic 请点击阅读原文


© 版权声明

相关文章

暂无评论

暂无评论...