sql – 实现标记的方法 – 各自的优点和缺点

Related

使用SO作为示例,如果您预计标签会经常更改,那么管理标签的最明智的方法是什么?

方式1:严重非规范化(逗号分隔)

table posts
+--------+-----------------+ 
| postId | tags            |
+--------+-----------------+
|   1    | c++,search,code |

这里的标签是逗号分隔的。

优点:使用单个选择查询一次检索标记。更新标签很简单。更新简单,便宜。

缺点:对标签检索进行额外解析,很难统计有多少帖子使用哪个标签

(或者,如果仅限于5个标签)

table posts
+--------+-------+-------+-------+-------+-------+
| postId | tag_1 | tag_2 | tag_3 | tag_4 | tag_5 |
+--------+-------+-------+-------+-------+-------+
|   1    | c++   |search | code  |       |       | 

方式2:“稍微规范化”(单独的表,没有交叉点)

table posts
+--------+-------------------+
| postId | title             |
+--------+-------------------+
|   1    | How do u tag?     |

table taggings
+--------+---------+
| postId | tagName |
+--------+---------+
|   1    | C++     |
|   1    | search  |

优点:易于查看标签计数(来自标签的count(*),其中tagName =’C’)。

缺点:tagName可能会重复很多次。

方式3:酷孩子(用交叉表标准化)

table posts
+--------+---------------------------------------+
| postId | title                                 |
+--------+---------------------------------------+
|   1    | Why is a raven like a writing desk?   |

table tags
+--------+---------+
| tagId  | tagName |
+--------+---------+
|   1    | C++     |
|   2    | search  |
|   3    | foofle  |

table taggings
+--------+---------+
| postId | tagId   |
+--------+---------+
|   1    | 1       |
|   1    | 2       |
|   1    | 3       |

优点:

>没有重复的标签名称
>更多女孩会喜欢你。

缺点:改变标签比方式#1更昂贵。

解决方法

这些解决方案被称为MysqLicIoUs,scuttle和toxi。

This article比较了每种方法的优缺点。

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03