2008-09-28 13 views

Respuesta

13

depende de dos cosas:
1) la cantidad de etiquetas/etiquetados registros
2) Independientemente de si usted tiene una opinión sobre la normalización religiosa :-)

A no ser que se trata de grandes volúmenes de datos , Sugeriría tener una tabla 'Tags' mapeando valores varchar a identificadores enteros luego la segunda tabla mapeando registros etiquetados a sus identificaciones de etiquetas. Sugiero implementar esto primero, luego verifique si no cumple con sus necesidades de rendimiento. En ese caso, tenga una sola mesa con un ID para la fila etiquetada y el texto de la etiqueta, pero en este me gustaría sugerir que utiliza una columna de carbón, ya que matará a su consulta si el optimizador hace un escaneo completo de tabla contra una gran mesa con una columna varchar.

+0

están de acuerdo, entonces se puede cambiar el nombre de las etiquetas fácilmente. –

+2

Uso NVARCHAR o NCHAR columna de soporte Unicode otra cosa desea que sólo las cartas de apoyo ASCII en las etiquetas. – Horcrux7

3

No, es generalmente una mala idea poner múltiples piezas de 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 se puede consultar fácilmente por etiqueta, por registro, y mantener la tabla Etiquetas por separado (es decir, ¿y si un nombre de etiqueta cambios?).

+3

No desea registros duplicados tampoco, quiere una tabla TagRecord que coincida TagIds con RecordIds en este caso. –

3

utilizar una tabla de etiquetas con la clave principal más pequeño permisible. 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.

+0

Ok, ¿por qué es inútil? :( –

Cuestiones relacionadas