database - 与实体关联的描述性标签是否应该存储在单独的数据库表中?

标签 database database-design tagging

我有一个问题模型,就像 StackOverflow 一样,用户可以用多个描述性标签标记每个问题。

我要决定的是,是否有必要将与问题关联的标签存储在数据库的单独表中。

或者我可以将标签存储为 Questions 表的单个字段,作为以空格分隔的字符串列表吗?

我不确定哪个更有意义 - 是否有任何充分的理由来分离数据?

最佳答案

为多值属性使用逗号分隔的字符串是另一种 SQL 反模式。 :-)

  • 字符串需要多长?换句话说:一个给定的条目可以有多少个标签? (这取决于各个标签的长度。)

  • 如何解释包含分隔符的字符串?如果您当前用作分隔符的字符变成标签中的合法字符怎么办?

  • 如何在 SQL 中插入或删除列表中的元素? (您必须将整个列表提取到应用程序中,分解列表,过滤它,然后将其重新发布到数据库。)

  • 如何在 SQL 中执行类似 COUNT(*) 的聚合?

  • 您如何有效地搜索共享给定标签的所有条目? (您必须使用代价高昂的模式匹配查询。)

解决方案是使用一个单独的表,正如该线程中大多数其他人所建议的那样。

关于database - 与实体关联的描述性标签是否应该存储在单独的数据库表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991642/

相关文章:

java - 优化数据库插入java

php - 使用 CodeIgniter 的图片库

mysql - 如何在 MySQL 中创建用户/组关联

c# - 如何从Sybase数据库生成dbml文件?

database-design - 如何设计一个数据库来存储属性,按同义词选择属性

python - 在 Jupyter Notebook 中处理 csv 数据集

node.js - ElasticSearch重启花费很长时间

mysql - SQL - 通过检查两列来更新或插入

autocomplete - Ant Design React - 如何开启多种自动完成模式

facebook - error_msg=照片标签主题无效,error_code=322