sql server - tablas - ¿La mejor manera de almacenar etiquetas en una tabla de servidor sql?
tablas grandes mysql (4)
¿Cuál es la mejor manera de almacenar etiquetas para un registro? Solo usa un campo varchar? ¿Qué pasa cuando se seleccionan las filas que contienen la etiqueta x? Use el operador like?
¡Gracias!
No, generalmente es una mala idea colocar múltiples datos en un solo campo. En su lugar, use una tabla de Etiquetas separada (tal vez con solo un TagID y TagName) y luego, para cada registro, indique el TagID asociado con él. Si un registro está asociado con varias etiquetas, tendrá registros duplicados con la única diferencia de que es TagID.
La ventaja aquí es que puede consultar fácilmente por etiqueta, por registro y mantener la tabla de Etiquetas por separado (es decir, ¿qué sucede si cambia el nombre de una etiqueta?).
Use una tabla de etiquetas con la clave primaria más pequeña permitida. Si hay menos de 255 etiquetas, utilice un byte (tinyint) o una palabra (smallint). Cuanto menor es la clave, más pequeño y más rápido es el índice de la clave externa en la tabla principal.
Depende de dos cosas:
1) La cantidad de etiquetas / registros etiquetados
2) Si tienes o no una opinión religiosa sobre la normalización :-)
A menos que se trate de volúmenes muy grandes de datos, sugeriría tener una tabla ''Tags'' mapeando valores varchar a identificadores enteros, luego la segunda tabla mapeando registros etiquetados a sus identificadores de etiquetas. Sugiero implementar esto primero, luego verifique si no cumple con sus necesidades de rendimiento. En ese caso, guarde una sola tabla con una identificación para la fila etiquetada y el texto real de la etiqueta, pero en este sugiero que use una columna char ya que matará a su consulta si el optimizador hace una exploración de tabla completa contra una gran mesa con una columna varchar.
Algunas ideas y pruebas solo para usted: http://tagging.pui.ch/post/37027746608/tagsystems-performance-tests