sql >> Base de Datos >  >> RDS >> Mysql

MySQL tipo ENUM vs unir tablas

  • Cambiar el conjunto de valores en un ENUM requiere un ALTER TABLE lo que podría causar una reestructuración de la tabla, una operación increíblemente costosa (la reestructuración de la tabla no ocurre si simplemente agrega un nuevo valor al final de la definición ENUM, pero si elimina uno o cambia el orden, hace una tabla reestructurar). Mientras que Cambiar el conjunto de valores en una tabla de búsqueda es tan simple como INSERTAR o ELIMINAR.

  • No hay forma de asociar otros atributos con los valores en un ENUM, como cuáles están retirados y cuáles son elegibles para colocarse en una lista desplegable en su interfaz de usuario. Sin embargo, una tabla de búsqueda puede incluir columnas adicionales para dichos atributos.

  • Es muy difícil consultar un ENUM para obtener una lista de valores distintos, básicamente requiere que consulte la definición del tipo de datos de INFORMATION_SCHEMA , y analizando la lista del BLOB devuelto. Podría intentar SELECT DISTINCT status de su tabla, pero eso solo obtiene los valores de estado actualmente en uso, que pueden no ser todos los valores en el ENUM. Sin embargo, si mantiene los valores en una tabla de búsqueda, es fácil consultarlos, ordenarlos, etc.

No soy un gran fan de ENUM, como puedes ver. :-)

Lo mismo se aplica a las restricciones CHECK que simplemente comparan una columna con un conjunto fijo de valores. Aunque MySQL no admite restricciones CHECK de todos modos.

Actualización:MySQL 8.0.16 ahora implementa CHECK restricciones .