当前位置:  开发笔记 > 后端 > 正文

在标记博客帖子时,我真的应该使用关系表吗?

如何解决《在标记博客帖子时,我真的应该使用关系表吗?》经验,为你挑选了1个好方法。

而试图找出如何标记一个博客帖子有一个SQL语句这里,下面的念头闪过我的脑海:使用关系表tag2post通过ID引用标记,如下恰恰是没有必要的:

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个标签...



1> Cade Roux..:

它可以工作,但它没有标准化,因为标签中有冗余.你也失去了使用"相同"标签来标记除帖子之外的东西的能力.对于小N,优化并不重要,所以如果你运行它我没有问题.

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

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

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有