我有一个问题模型,就像 StackOverflow 一样,用户可以用多个描述性标签标记每个问题。
我要决定的是,是否有必要将与问题关联的标签存储在数据库的单独表中。
或者我可以将标签存储为 Questions 表的单个字段,作为以空格分隔的字符串列表吗?
我不确定哪个更有意义 - 是否有任何充分的理由来分离数据?
最佳答案
为多值属性使用逗号分隔的字符串是另一种 SQL 反模式。 :-)
字符串需要多长?换句话说:一个给定的条目可以有多少个标签? (这取决于各个标签的长度。)
如何解释包含分隔符的字符串?如果您当前用作分隔符的字符变成标签中的合法字符怎么办?
如何在 SQL 中插入或删除列表中的元素? (您必须将整个列表提取到应用程序中,分解列表,过滤它,然后将其重新发布到数据库。)
如何在 SQL 中执行类似
COUNT(*)
的聚合?您如何有效地搜索共享给定标签的所有条目? (您必须使用代价高昂的模式匹配查询。)
解决方案是使用一个单独的表,正如该线程中大多数其他人所建议的那样。
关于database - 与实体关联的描述性标签是否应该存储在单独的数据库表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991642/