首页 > 解决方案 > 标签的 SQL 表设计。每个用户都有自己的标签

问题描述

我有三个表,一个用于存储文章,一个用于所有标签,一个用于两者之间的关系:

[table: article]
------------------------------
id        title       content
------------------------------
1         title       content
2         title       content
3         title       content


[table: tag]
----------------
id        name
----------------
1         health
2         travel
3         sports


[table: article2tag]
------------------------
article_id        tag_id
------------------------
1                 1
1                 2
1                 3

第一篇文章 (article_id: 1) 附加了所有标签(tag_id 1、tag_id 2 和 tag_id 3)。

我现在网站上只有一个用户,但我想创建更多用户,并且每个用户都有自己添加的标签。在这种情况下,我是否需要将 user_id 添加到 tags 表中以跟踪哪个标签属于哪个用户?

[table: tag]
-------------------------------
id        name         user_id
-------------------------------
1         health       1
2         travel       1
3         sports       1
4         sports       2
5         business     2

谢谢

标签: postgresql

解决方案


是的,您应该有一个联结表来存储用户和标签之间的关系,但该表不应该有标签名称,只有标签 ID:

user_tags

user_id | tag_id
1       | 1
1       | 2
1       | 3
2       | 4
2       | 5

标签名称不应出现在此联结表中的原因是给定标签可能与多个用户相关联。在这种情况下,多次重复标签名称将是冗余信息,并浪费存储空间。相反,保持当前标签表不变,但删除该user_id列。


推荐阅读