Blog Navicat

Ampliación de los tipos de datos de PostgreSQL con Navicat 17 - Parte 4 Jan 27, 2025 by Robert Gravelle

Tipos de rango

No es ningún secreto que PostgreSQL es una de las bases de datos más flexibles del mercado. De hecho, la extensibilidad de PostgreSQL y su rico conjunto de características han impulsado recientemente a PostgreSQL por delante de MySQL como el sistema de base de datos más admirado y deseado entre los desarrolladores. En esta serie sobre la creación de tipos de datos personalizados en PostgreSQL con Navicat Premium 17, hemos explorado algunas opciones hasta el momento, incluidos los dominios personalizados, así como los tipos compuestos y enumerados. El tema del blog de esta semana serán los Tipos de Rango, los cuales son particularmente útiles cuando se necesita trabajar con intervalos continuos o rangos de valores.

Una breve descripción del TIPO DE RANGO

Los tipos de rango en PostgreSQL proporcionan un medio para trabajar con intervalos continuos de valores. Por lo tanto, un rango podría incluir todos los precios de productos entre los $10 y $20. Estos rangos le permiten trabajar con cualquier valor que se encuentre dentro de sus límites, lo que facilita la verificación de cuestiones como conflictos de programación o igualación de precios. Los rangos son particularmente útiles en bases de datos cuando se necesita trabajar con lapsos de tiempo continuos, intervalos numéricos o cualquier otro dato secuencial.

Por ejemplo, en la base de datos de una sala de cine, se pueden usar rangos para representar los horarios de proyección, lo que garantiza que no haya dos películas programadas que se superpongan en la misma sala. O en un sistema de reservas de hotel, los rangos podrían rastrear las fechas de disponibilidad de las habitaciones, lo que facilita la verificación de conflictos de vacantes. Los tipos de rango son especialmente valiosos porque PostgreSQL maneja toda la lógica compleja de comparación y manipulación de estos intervalos, proporcionando operaciones integradas para verificar superposiciones, contención e intersecciones entre rangos.

En la siguiente sección, repasaremos un par de ejemplos prácticos utilizando Navicat Premium 17 y la base de datos de alquiler de DVD gratuita.

Definición de rangos de duración de películas

Antes de considerar un tipo de rango personalizado, debemos verificar si uno de los tipos de rango integrados de PostgreSQL lograría lo que estamos buscando. Estos incluyen:

  • int4range: rango de enteros
  • int8range: rango de bigint
  • numrange: rango de numéricos
  • tsrange: rango del timestamp sin zona horaria
  • tstzrange: rango del timestamp con zona horaria
  • daterange: rango de fechas

Aunque los tiempos de ejecución de las películas en la base de datos de alquiler de DVD se almacenan como números enteros, crear nuestro propio tipo de rango tiene sentido cuando tenemos requisitos comerciales específicos que no están cubiertos por los tipos integrados. Por ejemplo, si estuviéramos rastreando los rangos de tiempos de ejecución de las películas con reglas de validación especiales:

-- Creating a custom minutes range type with specific validation
CREATE TYPE runtime_range AS RANGE (
    subtype = integer,
    subtype_diff = int4mi
);

CREATE TABLE film_runtime_categories (
   category_name VARCHAR(50),
   typical_runtime runtime_range,
   CHECK (lower(typical_runtime) >l= 30 AND upper(typical_runtime) <= 240)
);

-- Adding rows to the table
INSERT INTO film_runtime_categories VALUES 
   ('Short Film', '[30,45]');

INSERT INTO film_runtime_categories VALUES 
   ('Feature Film', '[75,180]');

Crear un Tipo de Rango en Navicat 17

La forma más sencilla de definir un tipo personalizado es utilizar 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:

type_menu_command (33K)

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 "Objetos" y seleccione el elemento "Rango" en el menú contextual:

range_menu_item (31K)

El diseñador de Tipos de Rango tiene tres pestañas: General, Comment y SQL Preview. En la pestaña General, los detalles principales que debemos proporcionar son el "Subtipo" y la "Diferencia de subtipo". Basaremos nuestro tipo en el int4 de la siguiente manera:

range_type_general_tab (35K)

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 "Vista previa de SQL":

range_type_sql_preview (22K)

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 el cuadro de diálogo "Guardar como" donde podemos darle un nombre a nuestro Tipo. Lo llamaremos " runtime_range":

range_type_save_as_dialog (38K)

Ahora podemos usar nuestro Tipo "runtime_range" como cualquier otro tipo de datos de PostgreSQL. Por ejemplo, si creamos la tabla "film_runtime_categories" que vimos en el ejemplo anterior, podemos configurar la columna "typical_runtime" con nuestro tipo personalizado seleccionándola en el menú desplegable "Tipo de objeto":

runtime_range_type_in_table_designer (74K)

Luego podemos agregar nuestra validación de campo en la pestaña Verificaciones:

typical_runtime_check (42K)

Conclusión

En el blog de hoy, hemos creado un Tipo de Rango con la herramienta Tipo de Navicat Premium 17 y creamos una nueva tabla que incluía nuestro tipo personalizado. En la parte 5, concluiremos la serie ampliando el Tipo Base.

Compartir
Archivos del Blog