-
La modifica dell'insieme di valori in un ENUM richiede un
ALTER TABLE
che potrebbe causare una ristrutturazione di una tabella -- un'operazione incredibilmente costosa (la ristrutturazione della tabella non avviene se si aggiunge semplicemente un nuovo valore alla fine della definizione ENUM, ma se ne elimini uno o modifichi l'ordine, fa una tabella ristrutturare). Considerando che la modifica dell'insieme di valori in una tabella di ricerca è semplice come INSERT o DELETE. -
Non è possibile associare altri attributi ai valori in un ENUM, ad esempio quali sono stati ritirati e quali sono idonei per essere inseriti in un elenco a discesa nell'interfaccia utente. Tuttavia, una tabella di ricerca può includere colonne aggiuntive per tali attributi.
-
È molto difficile interrogare un ENUM per ottenere un elenco di valori distinti, in pratica richiedendo di interrogare la definizione del tipo di dati da
INFORMATION_SCHEMA
e analizzare l'elenco dal BLOB restituito. Potresti provareSELECT DISTINCT status
dalla tabella, ma questo ottiene solo i valori di stato attualmente in uso, che potrebbero non essere tutti i valori nell'ENUM. Tuttavia, se mantieni i valori in una tabella di ricerca, è facile eseguire query, ordinare e così via
Non sono un grande fan di ENUM, come puoi dire. :-)
Lo stesso vale per i vincoli CHECK che confrontano semplicemente una colonna con un insieme fisso di valori. Sebbene MySQL non supporti comunque i vincoli CHECK.
Aggiornamento:MySQL 8.0.16 ora implementa CHECK vincoli .