gpt4 book ai didi

sql - 优化标签表的表结构

转载 作者:行者123 更新时间:2023-12-04 20:11:08 24 4
gpt4 key购买 nike

考虑这 3 个表结构。哪个将最好地执行这些查询。

结构 1 - 带有连接表的作为 int 的 TagID

Article
-------
ArticleID int

Article_Tag
------------
ArticleTagID int
ArticleID int
TagID int

Tag
---
TagID int
TagText varchar(50)

结构 2 - 标记仅在连接表中作为字符串
Article
-------
articleID int

Article_Tag
-----------
articleTagID int
articleID int
tag varchar(50)

结构 3 - 将文本标记为 PK
Article
-------
ArticleID int

Article_Tag
------------
ArticleTagID int
ArticleID int
Tag varchar(50)

Tag
---
Tag varchar(50)

示例查询:
Select articleID from Article a inner join Article_tag at on a.articleID = at.articleID and tag = 'apple'
Select tag from Tags -- or, for structure 2
Select distinct tag from article_tag

最佳答案

这取决于您是否希望能够全局更改标签文本。当然,您可以发出广泛的 UPDATEArticle_Tag ,但如果您需要能够做到这一点,那么只需更新 Tag 中的值即可。会更简单。一些服务器提供自动更新(例如 SQL Server 中的 ON UPDATE CASCADE),但这些并不一定便宜(它仍然需要 UPDATE 很多行和定义的任何索引)。

但是如果你不要需要这个,那么使用 Article_Tag 中的文字应该会快一点,因为它可以删除连接 - 很多次。显然,索引它等。

重复文字所需的额外空间是一个因素,但磁盘空间通常比更快的服务器便宜。

至于作为主键;除非您有其他数据要存储,否则您为什么还需要该表?您可以使用 DISTINCTArticle_Tag一样容易,尤其是 Tag应该被索引(所以这应该很便宜)。 ( 编辑 Bill Karwin 正确地指出了能够保留合格标签的优点,而不仅仅是当前标签)。

关于sql - 优化标签表的表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/433881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com