postgresql - 标签的 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
谢谢
解决方案
是的,您应该有一个联结表来存储用户和标签之间的关系,但该表不应该有标签名称,只有标签 ID:
user_tags
user_id | tag_id
1 | 1
1 | 2
1 | 3
2 | 4
2 | 5
标签名称不应出现在此联结表中的原因是给定标签可能与多个用户相关联。在这种情况下,多次重复标签名称将是冗余信息,并浪费存储空间。相反,保持当前标签表不变,但删除该user_id
列。
推荐阅读
- kotlin - 如何在 AutoCompleteTextView 项目建议中添加刻度符号?
- r - 将具有字符向量作为列的数据帧转换为长格式
- javascript - 如何扩展 Django 表单 ChoiceField 以接受文本并搜索紧密匹配以避免在长列表中查找内容
- sql - 相同气流 DAG 中的任务在前一个任务提交之前启动
- java - AutocompleteTextView 点击监听器调用了两次
- php - 从表单 Laravel 向用户发送确认电子邮件
- scala - FS2 中的块文件轮换
- vue.js - 在电子应用程序中使用 vue + webpack 引用 dist 文件夹中的资产
- ios - 缩进表格中的标题
- botframework - 为一位聊天机器人用户使用 Azure Web App 时调整 Azure 聊天机器人的大小