Tipos Enumerados
En esta serie sobre la creación de tipos de datos personalizados en PostgreSQL con Navicat Premium 17, hemos explorado un par de opciones hasta el momento. En la parte 1, aprendimos a crear un dominio personalizado para la base de datos de alquiler DVD gratuito. La semana pasada, creamos un tipo compuesto para devolver datos complejos desde una función definida por el usuario. El blog de hoy cubrirá los Tipos Enumerados, que limitan los valores a un conjunto de opciones predefinidas.
Descripción rápida y general del TIPO ENUM
Los tipos enumerados (ENUM) nos permiten definir un tipo de datos con un conjunto de valores estáticos y ordenados. Esto es útil para situaciones en las que una columna debe contener uno de un conjunto limitado de valores predefinidos.
Al igual que otros tipos de PostgreSQL, el tipo ENUM se crea utilizando la sentencia CREATE TYPE. Aquí hay un ENUM que define cuatro estados de usuario:
CREATE TYPE user_status AS ENUM ('active', 'inactive', 'suspended', 'pending');
Aquí hay otro que define las clasificaciones de películas:
CREATE TYPE movie_rating AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
Una vez definido, podemos usar nuestro tipo personalizado en una tabla de la siguiente manera:
CREATE TABLE films ( film_id SERIAL PRIMARY KEY, title VARCHAR(255), rating movie_rating );
Crear un tipo enumerado en Navicat 17
Una forma más sencilla de definir un tipo enumerado es usar las herramientas basadas en la interfaz gráfica de usuario de Navicat. Las encontrará tanto en Navicat Premium 17 como en Navicat for PostgreSQL 17. Para acceder a la herramienta Tipo, simplemente haga clic en "Otros" en la barra de herramientas principal y luego seleccione "Tipo" en el menú desplegable:

Esto abrirá el panel Objetos, donde veremos una lista de tipos existentes. Para crear uno nuevo, haga clic en la flecha junto al elemento "Nuevo tipo" en la barra de herramientas de "Objetos" y seleccione el elemento "Enum" en el menú contextual:

Esto abrirá el diseñador de tipos en una nueva pestaña. En la pestaña General habrá una celda vacía en la que podemos introducir la primera etiqueta para nuestra enumeración, es decir, "G":

Podemos agregar una nueva fila para introducir la siguiente etiqueta haciendo clic en “Agregar Etiqueta”. Una vez introducidas todas las Etiquetas, la pestaña General debería verse así:

Antes de hacer clic en el botón "Guardar" podemos echar un vistazo a la sentencia que generará Navicat haciendo clic en la pestaña "SQL Preview":

Tenga en cuenta que el nombre del tipo es "Sin título", ya que aún no hemos guardado la definición. Esto es lo esperado.
Al hacer clic en el botón "Guardar", se nos presenta un cuadro de diálogo "Guardar como" donde podemos darle un nombre a nuestro tipo. Lo llamaremos "film_rating"

Usar el tipo film_rating en una definición de tabla
Ahora podemos usar el tipo "film_rating" como cualquier otro tipo de datos de PostgreSQL. Por ejemplo, podemos establecer una columna de tabla en nuestro tipo personalizado. Incluso podemos cambiar el tipo en una tabla existente siempre que sus valores de datos se ajusten a nuestro valor de enumeración. De hecho, cambiar el tipo de una columna de un VARCHAR genérico al ENUM más estricto es una forma eficiente de determinar rápidamente si una columna contiene valores no válidos.
Si abrimos la tabla "film" en el Diseñador de tablas de Navicat, podemos establecer la columna "rating" en nuestro tipo "film_rating" seleccionando "(Tipo)" en el menú desplegable "Tipo" y luego estableciendo el "Tipo de objeto" en "film_rating":

Asegúrese también de que el campo "Collation" esté en blanco.
Si la columna no contiene ningún valor no válido, deberíamos poder guardar la definición de la tabla sin errores ni advertencias.
Una de las ventajas de configurar un tipo de columna como ENUM es que Navicat proporcionará un menú desplegable para elegir un valor:

Conclusión
En el blog de hoy, hemos creado un tipo enumerado con la herramienta Tipo de Navicat Premium 17 y hemos actualizado una tabla existente para utilizar nuestro tipo personalizado a fin de restringir los valores de las columnas. La parte 4 se centrará en el Tipo de Rango.