在sql server表中存储标签的最佳方法?

Bru*_*uno 15 sql-server tags

存储记录标签的最佳方法是什么?只需使用varchar字段?选择包含标记x的行时怎么办?使用like运算符?

谢谢!

Mar*_*ddy 14

取决于两件事:
1)标签/标记记录的数量
2)您是否对标准化有宗教观点:-)

除非处理非常大量的数据,否则我建议使用'tags'表将varchar值映射到整数标识符,然后将第二个表映射标记记录到它们的标记ID.我建议先实现它,然后检查它是否不符合您的性能需求.在这种情况下,保留一个带有标记行的id和标记的实际文本的表,但在此我建议你使用char列,因为如果优化器执行全表扫描,它将终止查询带varchar列的大表.

  • 使用NVARCHAR或NCHAR列进行unicode支持,否则您只需要支持标签中的ASCII包. (2认同)

DiG*_*iGi 6

一些想法和测试只适合你:http://tagging.pui.ch/post/37027746608/tagsystems-performance-tests

  • 这是一个存档的链接,以防万一页面将来再次移动。https://archive.is/7P4uT (2认同)

小智 5

不,将多条数据放在一个字段中通常是一个坏主意。相反,应使用单独的标签表(可能仅包含 TagID 和 TagName),然后为每条记录指示与其关联的 TagID。如果一条记录与多个标签关联,您将有重复的记录,唯一的区别是 TagID。

这里的优点是可以方便地按标签、按记录进行查询,并单独维护Tags表(即如果标签名称发生变化怎么办?)。

  • 您也不想要重复的记录,在本例中您需要一个将 TagId 与 RecordId 相匹配的 TagRecord 表。 (3认同)

And*_*nea 5

使用具有最小允许主键的标签表。如果标签少于 255 个,则使用一个字节 (tinyint) 或一个字 (smallint)。键越小,主表中外键上的索引就越小且速度越快。