【问题标题】:Implementing tag system with multiple tables用多个表实现标签系统
【发布时间】:2017-11-15 18:42:35
【问题描述】:

我正在尝试实现类似于 StackOverflow 的标签系统。显然我已经阅读了包括answer在内的多篇文章。

但是我的情况有点不同

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

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

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

我使用最新版本的 PostgreSQL。

【问题讨论】:

  • 发布选项。
  • 在我链接的问题中
  • 如果这个问题和另一个问题一样,它应该被关闭。否则问题的所有元素都应该在问题中。
  • 不一样,这个问题将原来的问题扩展到不同的问题(恕我直言)

标签: database postgresql polymorphism tagging


【解决方案1】:

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

鉴于此,我建议为您想要在其上添加标签的每个表创建一个标签列,可以是数组或 JSONB 列,具体取决于。如果您需要搜索多个表,我建议您使用 UNION 查询,而不是使用连接到所有内容的单个整体标签表。

【讨论】:

  • 我考虑过这一点,但 UNION 在处理几个表时不会对性能产生很大影响吗?
  • 仅当您要加入结果以对抗其他事物时。由于您要整理 5 张表格,因此您必须 UNION something。
猜你喜欢
  • 2013-07-22
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多