Types énumérés
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 exploré jusqu'à présent quelques options. Dans la partie 1, nous avons appris à créer un domaine personnalisé pour la base de données de location gratuite de DVD. La semaine dernière, nous avons créé un type composite pour renvoyer des données complexes à partir d'une fonction définie par l'utilisateur. Le blog d'aujourd'hui traite des types énumérés, qui limitent les valeurs d'un ensemble d'options prédéfinies.
Rapide aperçu du TYPE ENUM
Les types énumérés (ENUMs) nous permettent de définir un type de données avec un ensemble de valeurs statiques et ordonnées. Cela est utile dans les situations où une colonne doit contenir l'une des valeurs prédéfinies dans un ensemble limité.
Comme d'autres types PostgreSQL, le type ENUM est créé à l'aide de l'instruction CREATE TYPE. Voici un ENUM qui définit quatre statuts d'utilisateur :
CREATE TYPE user_status AS ENUM ('active', 'inactive', 'suspended', 'pending');
En voici un autre qui définit la classification des films :
CREATE TYPE movie_rating AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
Une fois défini, nous pouvons utiliser notre type personnalisé dans une table comme suit :
CREATE TABLE films ( film_id SERIAL PRIMARY KEY, title VARCHAR(255), rating movie_rating );
Création d'un type énuméré dans Navicat 17
Une façon plus simple de définir un type énuméré consiste à 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 :

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 « Enum » dans le menu contextuel :

Cela lancera le concepteur de types dans un nouvel onglet. Dans l'onglet Général, il y aura une cellule vide dans laquelle nous pourrons saisir le premier libellé de notre énumération, c'est-à-dire « G » :

Nous pouvons ajouter une nouvelle ligne pour saisir le prochain libellé en cliquant sur « Ajouter un libellé ». Une fois tous les libellés saisis, l'onglet Général devrait ressembler à ceci :

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 » :

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 « classification_film » :

Utilisation du type classfication_film dans une définition de table
Nous pouvons désormais utiliser le type « classification_film » comme tout autre type de données PostgreSQL. Par exemple, nous pouvons définir une colonne de table sur notre type personnalisé. Nous pouvons même modifier le type d'une table existante à condition que ses valeurs de données soient conformes à notre valeur Enum. En fait, changer le type d'une colonne d'un VARCHAR générique pour un ENUM plus strict est un moyen efficace de déterminer rapidement si une colonne contient des valeurs non valides.
Si nous ouvrons la table « film » dans le concepteur de table Navicat, nous pouvons attribuer à la colonne « Classification » notre type « classification_film » en sélectionnant « (Type) » dans le menu déroulant « Type », puis en attribuant à « Type d’objet » la valeur « classification_film » :

Assurez-vous également que le champ « Classement » est vide.
Si la colonne ne contient aucune valeur non valide, nous devrions pouvoir enregistrer la définition de la table sans erreur ni avertissement.
L'un des avantages de définir un type de colonne sur un ENUM est que Navicat fournira une liste déroulante pour choisir une valeur :

Conclusion
Dans le blog d'aujourd'hui, nous avons créé un type énuméré à l'aide de l'outil Type de Navicat Premium 17 et mis à jour une table existante pour utiliser notre type personnalisé afin de contraindre les valeurs des colonnes. La quatrième partie portera sur le type Plage.