首页 > 代码库 > 关于网站文章分类和tag的思考

关于网站文章分类和tag的思考

分类是无限分类,即每个分类必须属于一个父分类,最顶级的分类父分类id为0。
一篇文章,应该如何和分类进行关联?传统的做法就是在文章表中有一个category_id字段对应分类id,即一篇文章属于一个分类。
但是现实情况中经常会出现一种需求:要求一篇文章可以在不同的分类下展示,这里不同的分类不是指有父子关系的分类,对于这个问题我知道两种做法:

  1. 发布文章时,选择"同时发布到其他分类”,即将文章数据完全复制一份,在数据库中表现为两条记录,只是category_id不同。
  2. 取消文章表的category_id字段,使用另外一张表来存储文章与分类的 多对多 关系,这样保证每篇文章的唯一性。

对于方案1,缺点就是后期维护麻烦,一旦发现文章有错误需要修改,就不得不多次修改,而方案2没这个问题,但是在管理上有问题,比如删除分类同同时删除关联文章,不得不检查文章是否还关联了其他分类。

其实对于方案2,后来有了一种更加完美的替代方案,那就是tag,tag粒度很细,每篇文章都可以有多个tag,我们只需要一个tag表和tag关系表即可完成文章和tag的关联,同样,不管删除文章或tag,我们只需要删除tag关系即可,我们可以通过不同的tag聚合不同分类但是某些领域有关联的文章。

有一些激进网站完全采用tag替代了分类,这里我想了很久,最终决定采用tag+分类的方式,因为考虑到tag比较细散,而我还是要对文章进行一个更高纬度的分类的,我的方案是这样:

  1. 分类还是无限分类,只是我给每个分类加了一个属性 final ,该字段描述分类是否"最终”,我认为一篇文章不管它跟多少"方面"有关系,但最终它只能呆在一个分类里,而这个分类必然是最终的,即 最终的分类 不允许有子分类,有子分类的分类不允许发布文章。
  2. TAG系统,为了让不同分类之间的文章产生聚合显示效果,我们采用tag,与分类并不冲突,tag只是用来检索。

如果把文章比作图书,那分类就像图书馆里的书架,而tag的话,就好像图书馆检索系统里的关键词索引。

-完-

关于网站文章分类和tag的思考