Domanda

Qual è il modo migliore per archiviare i tag per un record? Basta usare un campo varchar? Che dire quando si selezionano le righe che contengono il tag x? Utilizzare l'operatore simile?

grazie!

È stato utile?

Soluzione

Dipende da due cose:
1) La quantità di tag / record con tag
2) Che tu abbia o meno un'opinione religiosa sulla normalizzazione :-)

A meno che non si tratti di grandi volumi di dati, suggerirei di avere una tabella "Tag" che associ i valori varchar agli identificatori di numeri interi, quindi una seconda tabella che associ i record con tag ai loro ID tag. Suggerirei di implementarlo prima, quindi controllare se non soddisfa le tue esigenze di prestazioni. In tal caso, mantieni una singola tabella con un ID per la riga con tag e il testo effettivo del tag, ma in questo ti suggerirei di utilizzare una colonna di caratteri poiché ucciderà la tua query se l'ottimizzatore esegue una scansione della tabella completa contro una grande tabella con una colonna varchar.

Altri suggerimenti

No, in genere è una cattiva idea mettere più dati in un singolo campo. Invece, usa una tabella Tag separata (forse con solo TagID e TagName) e quindi, per ogni record, indica il TagID associato ad esso. Se un record è associato a più tag, avrai record duplicati con l'unica differenza che è TagID.

Il vantaggio qui è che puoi facilmente interrogare per tag, per record e mantenere la tabella Tag separatamente (cioè cosa succede se il nome di un tag cambia?).

Utilizza una tabella di tag con la chiave primaria minima consentita. Se ci sono meno di 255 tag usa un byte (tinyint) oppure una parola (smallint). Più piccola è la chiave, più piccolo e veloce è l'indice sulla chiave esterna nella tabella principale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top