Database 用多表实现标签系统

Database 用多表实现标签系统,database,postgresql,polymorphism,tagging,Database,Postgresql,Polymorphism,Tagging,我正在尝试实现类似StackOverflow的标签系统。显然,我读过多篇文章,包括这篇 然而,我的情况有点不同 只有具有更高权限的用户才能创建有限数量的标记(任何人都可以在那里分配标记)。这排除了选项#1(从上面链接的问题中,每个标记直接插入到表标记列中,然后用像一样查询) 数据库中还有多个可以标记的表(目前有五个) 特别是第二个标准使它更难,所以这是我的想法 我可以遵循选项#3,使用table标记,并与每个表建立M:N关系。然而,这会使搜索变得更加困难(想象一下,如果表的数量增加,那么j

我正在尝试实现类似StackOverflow的标签系统。显然,我读过多篇文章,包括这篇

然而,我的情况有点不同

  • 只有具有更高权限的用户才能创建有限数量的标记(任何人都可以在那里分配标记)。这排除了选项#1(从上面链接的问题中,每个标记直接插入到表
    标记
    列中,然后用
    一样查询)
  • 数据库中还有多个可以标记的表(目前有五个)
特别是第二个标准使它更难,所以这是我的想法

  • 我可以遵循选项#3,使用table
    标记
    ,并与每个表建立M:N关系。然而,这会使搜索变得更加困难(想象一下,如果表的数量增加,那么join会增加),而且我还需要知道哪个表(应用程序模块)与搜索结果中的标记匹配
  • 我可以使用某种多态性,但我对数据库这个概念还很陌生,所以这是否适合这个问题

我使用最新版本的PostgreSQL。

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


考虑到这一点,我建议为每个表创建一个tags列,根据需要,可以是一个数组,也可以是一个JSONB列。如果您需要搜索多个表,我建议使用联合查询,而不是使用一个单一的单一标记表来连接所有内容。

发布选项。问题是我链接了。如果这个问题与其他问题相同,则应该关闭。否则问题的所有元素都应该在问题中。这是不一样的,这个问题将原来的问题扩展到了不同的问题(IMHO)。我考虑过这个问题,但是当在两个表上执行时,联合不会对性能产生很大影响吗?只有当您要将结果与其他内容合并时。由于您正在整理5个表,因此必须合并一些内容。