Blog Navicat

Extension des types de données PostgreSQL avec Navicat 17 - Partie 4 Jan 27, 2025 by Robert Gravelle

Types de plage

Ce n'est un secret pour personne que PostgreSQL est l'une des bases de données les plus flexibles du marché. En fait, l'extensibilité et la richesse des fonctionnalités de PostgreSQL l’ont récemment propulsé devant MySQL en tant que système de base de données le plus admiré et le plus désiré parmi les développeurs. Dans cette série sur la création de types de données personnalisés dans PostgreSQL à l'aide de Navicat Premium 17, nous avons jusqu'à présent exploré quelques options, notamment les domaines personnalisés, ainsi que les types composites et énumérés. Le sujet du blog de cette semaine sera les types de plage, qui sont particulièrement utiles lorsque vous devez travailler avec des intervalles continus ou des plages de valeurs.

Rapide description du TYPE RANGE

Les types de plage dans PostgreSQL permettent de travailler avec des intervalles continus de valeurs. Ainsi, une plage peut inclure tous les prix de produits compris entre 10 et 20 $. Ces plages vous permettent de travailler avec toutes les valeurs comprises entre leurs limites, ce qui facilite la vérification d'éléments tels que les conflits de planification ou la correspondance des prix. Les plages sont particulièrement utiles dans les bases de données lorsque vous devez travailler avec des périodes continues, des intervalles numériques ou toutes autres données séquentielles.

Par exemple, dans la base de données d'une salle de cinéma, vous pouvez utiliser des plages pour représenter les heures de projection afin de vous assurer que deux films ne se chevauchent pas dans la même salle. Ou encore, dans le système de réservation d'un hôtel, les plages peuvent représenter les dates de disponibilité des chambres, ce qui permet de vérifier facilement les conflits d’occupation. Les types de plages sont particulièrement utiles car PostgreSQL gère toute la logique complexe de comparaison et de manipulation de ces intervalles, en fournissant des opérations intégrées pour vérifier les chevauchements, l'inclusion (containment) et les intersections entre les plages.

Dans la section suivante, nous passerons en revue quelques exemples pratiques utilisant Navicat Premium 17 et la base de données gratuite de location de DVD.

Définition des plages de durées des films

Avant d'envisager un type de plage personnalisé, nous devons vérifier si l'un des types de plage intégrés de PostgreSQL pourrait correspondre à ce que nous recherchons. Ces types sont les suivants :

  • int4range : plage d'entiers
  • int8range : plage de bigint
  • numrange : plage de nombres
  • tsrange : plage d'horodatage sans fuseau horaire
  • tstzrange : plage d'horodatage avec fuseau horaire
  • daterange : plage de dates

Bien que les durées de film dans la base de données de location de DVD soient stockées sous forme d'entiers il est judicieux de créer notre propre type de plage lorsque nous avons des exigences commerciales spécifiques qui ne sont pas couvertes par les types intégrés. Par exemple, si nous suivons les plages de durées de film avec des règles de validation spéciales :

-- 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]');

Création d'un type de plage dans Navicat 17

Une façon plus simple de définir un type personnalisé est d'utiliser les outils basés sur l'interface graphique de Navicat. Vous les trouverez dans Navicat Premium 17 et Navicat for PostgreSQL 17. Pour accéder à l'outil Type, il suffit de cliquer sur « Autres » dans la barre d'outils principale et de sélectionner « Type » dans la liste déroulante :

type_menu_command (33K)

Cela fera apparaître le panneau Objets, où nous verrons une liste des types existants. Pour en créer un nouveau, cliquez sur la flèche à côté de l'élément « Nouveau type » dans la barre d'outils « Objets » et sélectionnez l'élément « Plage » dans le menu contextuel :

range_menu_item (31K)

Le concepteur de type de plage comporte trois onglets : Général, Commentaire et Aperçu SQL. Dans l'onglet Général, les principaux détails que nous devons fournir sont le « Sous-type » et la « Différence de sous-type ». Nous baserons notre type sur int4 comme suit :

range_type_general_tab (35K)

Avant de cliquer sur le bouton « Enregistrer », nous pouvons jeter un coup d'œil sur l'instruction que Navicat va générer en cliquant sur l'onglet « Aperçu SQL » :

range_type_sql_preview (22K)

Notez que le nom du type est « Sans titre » puisque nous n'avons pas encore enregistré la définition. C'est normal.

En cliquant sur le bouton « Enregistrer », une boîte de dialogue « Enregistrer sous » s'affiche dans laquelle nous pouvons donner un nom à notre type. Appelons-le « plage_durée » :

range_type_save_as_dialog (38K)

Nous pouvons maintenant utiliser notre type « plage_durée » comme n'importe quel autre type de données PostgreSQL. Par exemple, si nous créons la table « categories_durée_film » que nous avons vue dans l'exemple ci-dessus, nous pouvons définir la colonne « durée typique » avec notre type personnalisé en la sélectionnant dans la ou les listes déroulantes « Type d'objet » :

runtime_range_type_in_table_designer (74K)

Nous pouvons ensuite ajouter notre validation de champ dans l'onglet Vérifications :

typical_runtime_check (42K)

Conclusion

Dans le blog d'aujourd'hui, nous avons créé un type de plage à l'aide de l'outil Type de Navicat Premium 17 et créé une nouvelle table contenant notre type personnalisé. Dans la partie 5, nous conclurons cette série en étendant le type de base.

Partager
Archives du blog