在SQL Server表中存储标签的最佳方法?
时间:2020-03-06 14:50:21 来源:igfitidea点击:
存储记录标记的最佳方法是什么?只是使用varchar字段?选择包含标签x的行怎么办?使用like运算符?
谢谢!
解决方案
取决于两件事:
1)标记/已标记记录的数量
2)我们是否对标准化有宗教信仰:-)
除非处理大量数据,否则建议使用"标签"表将varchar值映射到整数标识符,然后使用第二张表将已标记的记录映射到其标签ID。我建议先实施此方法,然后检查它是否不能满足性能需求。在这种情况下,请保留一个表,该表的ID为标记行和标记的实际文本,但是在这种情况下,我建议我们使用char列,因为如果优化程序针对该列进行全表扫描,它将杀死查询带有varchar列的大表。
不,将多个数据放在一个字段中通常是一个坏主意。而是使用单独的"标记"表(可能仅带有TagID和TagName),然后针对每条记录指示与之关联的TagID。如果一条记录与多个标签关联,则将有重复的记录,唯一的区别是TagID。
这样做的好处是,我们可以轻松地按标签,按记录查询,并分别维护"标签"表(即,如果标签名称更改,该怎么办?)。
一些适合想法和测试:http://tagging.pui.ch/post/37027746608/tagsystems-performance-tests
使用具有最小允许主键的标签表。如果少于255个标签,则使用字节(tinyint)或者单词(smallint)。键越小,主表中外键的索引越小且速度越快。