gpt4 book ai didi

mysql - 标记博客文章时我真的应该使用关系表吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:38:43 25 4
gpt4 key购买 nike

在尝试弄清楚如何使用单个 sql 语句标记博客文章时 here ,我想到了以下想法:使用按 id 引用标签的关系表 tag2post 是没有必要的:

tags
+-------+-----------+
| tagid | tag |
+-------+-----------+
| 1 | news |
| 2 | top-story |
+-------+-----------+

tag2post
+----+--------+-------+
| id | postid | tagid |
+----+--------+-------+
| 0 | 322 | 1 |
+----+--------+-------+

为什么不只使用下面的模型,您在其中索引标签本身如下?考虑到标签永远不会重命名,但会添加和删除,这很有意义,对吧?你怎么看?

tag2post
+----+--------+-------+
| id | postid | tag |
+----+--------+-------+
| 1 | 322 | sun |
+----+--------+-------+
| 2 | 322 | moon |
+----+--------+-------+
| 3 | 4443 | sun |
+----+--------+-------+
| 4 | 2567 | love |
+----+--------+-------+

PS:我保留了一个id,我为了方便地显示最后添加的n 标签...

最佳答案

它有效,但没有标准化,因为标签中有冗余。你也失去了使用“相同”标签来标记帖子以外的东西的能力。对于小 N,优化无关紧要,所以如果你用它运行我没有问题。

实际上,您的索引会更大(假设您要在标签上建立索引以进行搜索,您现在正在索引重复项和索引字符串)。在规范化版本中,tags 表上的索引会更小,不会有重复项,tagid 上的 tag2post 表上的索引也会更小。此外,固定大小的 int 列对于索引非常有效,您还可以根据您的集群选择避免一些碎片。

我知道你说过不重命名,但总的来说,在这两种情况下,你可能仍然需要考虑重命名(甚至删除)标签意味着什么的语义 - 是否需要更改所有条目,或者标签是否以某种方式 split 。因为这是最坏情况下事务中的批处理操作(所有 tag2post 都必须重命名),所以从设计的角度来看,我并没有真正将其归类为重要。

关于mysql - 标记博客文章时我真的应该使用关系表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480300/

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