Cuándo utilizar el tipo de dato ENUM en bases de datos MySQL

Hasta hace poco. No acostumbraba a utilizar el campo ENUM como tipo de dato en una tabla.

La duda que planeo queda clara en el siguiente ejemplo:

//SIN ENUM


create table 'usuarios'(
          usuario_id INT,
          nombre VARCHAR(100),
          usuario_tipo_id INT
        ) TYPE=innodb;</code>
)

(Siendo usuario_tipo_id una fk a usuario_tipo_id de la tabla inferior).


create table 'usuarios_tipos'(

usuario_tipo_id INT,

descripcion VARCHAR(200)

)

ó


// CON ENUM

create table 'usuarios'(

          usuario_id INT,
          nombre VARCHAR(100),
          tipo ENUM 
        ) TYPE=innodb;</code>
)

¿Cuándo tomar una decisión u otra?

Decisión 1:

  1. El tipo de usuarios es gestionado desde la aplicación.
  2. El tipo de usuarios puede crecer o es incierto
  3. Cuando existe un gran número de tipo de usuarios.
  4. El dato lo muestro por pantalla y es sensible a que el sitio cambie de idioma.

Decisión 2:

  1. Existe un número limitado de tipos de usuario y siempre es el mismo.
  2. Nuestra base de datos ya es suficientemente grande y se nos está complicando bastante.
  3. Cuando no voy a filtrar por ese tipo (por ejemplo porque los voy a mostrar en ventanas diferentes y con una gestión independiente).
  4. Si queremos utilizarlo a estilo booleano, para que no nos olvidemos cual es el verdadero o cuál es el falso (ejemplo:  active ENUM (‘no_active’,’active’)

Error en ejecución MySQL

Cuando estamos desesperados, cuando sabemos que algo oscuro está haciendo MySQL, cuando sospechamos que hay algunas tablas bloqueadas o algún error de memoria en MySQL, en estos casos, aconsejo leer el log de MySQL.

Para ello hace falta ir al servidor donde tenemos instalado mysql.

Entrar en la misma consola de Mysql mediante:

mysql -p

Y activar el log.

set global general_log=ON

desc mysql.general_log;

Para desactivarlo hace falta poner

set global general_log=OFF

En mi caso me fue de gran utilidad!! suerte!!