Pregunta

¿Cuál es la mejor manera de almacenar etiquetas para un registro? ¿Solo usa un campo varchar? ¿Qué pasa cuando se seleccionan filas que contienen la etiqueta x? ¿Usar el operador similar?

gracias!

¿Fue útil?

Solución

Depende de dos cosas:
1) La cantidad de etiquetas / registros etiquetados
2) Si tiene o no una opinión religiosa sobre la normalización :-)

A menos que se trate de volúmenes de datos muy grandes, sugeriría tener una tabla de 'Etiquetas' que asigne valores varchar a identificadores de enteros y luego una segunda tabla que asigne registros etiquetados a sus identificadores de etiqueta. Sugeriría implementar esto primero, luego verificar si no satisface sus necesidades de rendimiento. En ese caso, mantenga una sola tabla con un ID para la fila etiquetada y el texto real de la etiqueta, pero en este caso le sugeriría que use una columna de caracteres, ya que matará su consulta si el optimizador realiza un análisis completo de la tabla. una mesa grande con una columna varchar.

Otros consejos

No, generalmente es una mala idea colocar varios datos en un solo campo. En su lugar, use una tabla de etiquetas separada (tal vez solo con un TagID y TagName) y luego, para cada registro, indique el TagID asociado a él. Si un registro está asociado con varias etiquetas, tendrá registros duplicados, y la única diferencia será 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é pasa 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, use un byte (tinyint) o una palabra (smallint). Cuanto más pequeña sea la clave, más pequeño y más rápido será el índice de la clave externa en la tabla principal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top