Mysql
 sql >> Database >  >> RDS >> Mysql

Tipo MySQL ENUM rispetto a tabelle di join

  • 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 provare SELECT 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 .