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:
- El tipo de usuarios es gestionado desde la aplicación.
- El tipo de usuarios puede crecer o es incierto
- Cuando existe un gran número de tipo de usuarios.
- El dato lo muestro por pantalla y es sensible a que el sitio cambie de idioma.
Decisión 2:
- Existe un número limitado de tipos de usuario y siempre es el mismo.
- Nuestra base de datos ya es suficientemente grande y se nos está complicando bastante.
- Cuando no voy a filtrar por ese tipo (por ejemplo porque los voy a mostrar en ventanas diferentes y con una gestión independiente).
- 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’)