数据库中的标签管理
Tag management in database
我正在尝试设计一个数据库,我将在其中跟踪与出版社相关的不同对象。显而易见的是跟踪所有文章。我想为它们添加一个或多个 "Tag"。但我不确定如何处理它们。
我的第一个想法是映射 table 由标签和相应的子标签组成。另一个映射 table 将文章映射到那些 tad 组合 ID。
这是管理它们并用于搜索的最佳方式吗?这个标记问题的 Whosebug 如何工作?
这是典型的多对多情况,您可以使用 link tables 来解决。
如果标签和子标签等价,那么你有两个核心table,Articles
和Tags
,以及一个link table ArticleTags
。如果你迫切需要区分子标签,那么你有三个核心table和两个linktable,Articles
,Tags
,和SubTags
link 由 ArticleTags
和 TagSubTags
编辑。
单一级别的标签更易于管理并且性能更高,尽管它是否真的重要取决于多种因素。如果子标签的命名非常相似,那么 like
搜索仍然会检索到它们,如果所有标签都在一个 table.
中
要按标签搜索文章,您可能会像这样使用 SQL:
SELECT a.* FROM Articles a JOIN ArticleTags at ON a.Id = at.ArticleId JOIN
Tags t ON at.TagId = t.Id WHERE t.TagName Like '%your search criteria%'
如果您在任何 public 环境中像这样构建 SQL,请务必 非常 小心以确保您正确绑定参数以避免 SQL 注入攻击 link1 link2 link3
如果您有不同的子标签,那么您的 SQL 需要像这样
SELECT a.* FROM Articles a JOIN ArticleTags at ON a.Id = at.ArticleId
JOIN Tags t ON at.TagId = t.Id JOIN TagSubTags tst ON t.Id= tst.TagId
JOIN SubTags st ON tst.SubTagId = st.Id
WHERE t.TagName Like '%your search criteria%'
OR st.SubTagName Like '%your search criteria%'
如果您使用 PostgreSQL 作为数据库,您可以使用数组类型在一列中存储多个值。我在我的一次演讲中谈到了这一点,请看这里的幻灯片:https://talks.bitexpert.de/phpuk15-postgres-nosql/#/12
我正在尝试设计一个数据库,我将在其中跟踪与出版社相关的不同对象。显而易见的是跟踪所有文章。我想为它们添加一个或多个 "Tag"。但我不确定如何处理它们。
我的第一个想法是映射 table 由标签和相应的子标签组成。另一个映射 table 将文章映射到那些 tad 组合 ID。
这是管理它们并用于搜索的最佳方式吗?这个标记问题的 Whosebug 如何工作?
这是典型的多对多情况,您可以使用 link tables 来解决。
如果标签和子标签等价,那么你有两个核心table,Articles
和Tags
,以及一个link table ArticleTags
。如果你迫切需要区分子标签,那么你有三个核心table和两个linktable,Articles
,Tags
,和SubTags
link 由 ArticleTags
和 TagSubTags
编辑。
单一级别的标签更易于管理并且性能更高,尽管它是否真的重要取决于多种因素。如果子标签的命名非常相似,那么 like
搜索仍然会检索到它们,如果所有标签都在一个 table.
要按标签搜索文章,您可能会像这样使用 SQL:
SELECT a.* FROM Articles a JOIN ArticleTags at ON a.Id = at.ArticleId JOIN
Tags t ON at.TagId = t.Id WHERE t.TagName Like '%your search criteria%'
如果您在任何 public 环境中像这样构建 SQL,请务必 非常 小心以确保您正确绑定参数以避免 SQL 注入攻击 link1 link2 link3
如果您有不同的子标签,那么您的 SQL 需要像这样
SELECT a.* FROM Articles a JOIN ArticleTags at ON a.Id = at.ArticleId
JOIN Tags t ON at.TagId = t.Id JOIN TagSubTags tst ON t.Id= tst.TagId
JOIN SubTags st ON tst.SubTagId = st.Id
WHERE t.TagName Like '%your search criteria%'
OR st.SubTagName Like '%your search criteria%'
如果您使用 PostgreSQL 作为数据库,您可以使用数组类型在一列中存储多个值。我在我的一次演讲中谈到了这一点,请看这里的幻灯片:https://talks.bitexpert.de/phpuk15-postgres-nosql/#/12