使用多个表实现标记系统

时间:2017-06-13 20:18:49

标签: database postgresql polymorphism tagging

我正在尝试将标记系统silimar实现为StackOverflow所具有的标记系统。显然我已经阅读了多篇文章,包括answer

但是我的情况有点不同

  • 只有具有更高权限的用户才能创建有限数量的标签(任何人都可以在那里分配标签)。这不包括选项#1(从上面链接的SO问题开始,每个标记都直接插入到表tags列中,然后用LIKE查询)我想
  • DB中还有多个表可以标记(目前为五个)

特别是第二个标准让它变得更难,所以这些是我的想法

  • 我可以按照选项#3,拥有表tags,并且每个表都有M:N关系。然而,这会使搜索变得更难(想象如果表号增长则加入),并且我还需要告诉哪个表(应用程序模块)与搜索结果中的标记匹配
  • 我可以使用某种多态性,但我对这个关于数据库的概念很新,所以这是否适合这个问题呢?

我使用最新版本的PostgreSQL。感谢您的任何提示

1 个答案:

答案 0 :(得分:1)

由于您使用的是PostgreSQL,因此您可以选择某些字段类型,这些字段类型不适用于其他数据库。特别是,数组和JSON字段。我对a blog post中的各种方法进行了一些性能比较。对于任何需要组合多个标签的搜索,数组和JSONB绝对比标签表更好。

鉴于此,我建议为每个要为其创建标记的表创建一个标记列,具体取决于数组或JSONB列。如果你需要搜索多个表,我建议使用UNION查询,而不是只有一个单一的标签表连接到所有表。