Passer au contenu principal
eLearner.app
Module 9 · Leçon 1 sur 433/57 dans le cours~10 min
Leçons du module (1/4)

Types de données avancés et ENUMs

Dans la leçon précédente, nous avons vu la commande de base CREATE TABLE. Explorons maintenant quelques types de données avancés proposés par PostgreSQL pour modéliser nos domaines de manière plus précise et plus sûre.

Types numériques et texte

PostgreSQL propose plusieurs types de nombres et de texte. Choisir le bon aide à la fois à la validation et à l’espace de stockage.

SQL
CREATE TABLE advanced_products (
  id           SERIAL PRIMARY KEY,
  name         VARCHAR(50) NOT NULL,
  description  TEXT,
  -- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
  price        NUMERIC(10, 2) NOT NULL,
  featured     BOOLEAN DEFAULT FALSE
);
  • TEXT vs VARCHAR(n) : dans Postgres, les performances sont identiques. Vous utilisez VARCHAR(n) uniquement lorsque vous ** souhaitez limiter explicitement ** la longueur insérée au niveau de la base de données.
  • NUMERIC(10, 2) : Parfait pour l'argent ou la précision arithmétique. Ici, il autorise au maximum 8 chiffres entiers et 2 décimales (10 au total). Si vous insérez 10.555, Postgres l'arrondit à 10.56.

Le type d'UUID

Pour les identifiants sécurisés exposés sur le Web (tels que les identifiants publics dans les URL), UUID est souvent préféré à l'incrément classique SERIAL.

SQL
CREATE TABLE public_orders (
  id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  customer    TEXT NOT NULL,
  total       NUMERIC(10, 2)
);

ENUM (Énumérations)

Souvent, une colonne ne doit contenir qu'une seule valeur parmi quelques valeurs prédéfinies (par exemple, statut de la commande : "nouveau", "payé", "expédié"). Une approche consiste à utiliser le mot-clé CHECK, mais PostgreSQL propose des types ENUM personnalisés.

SQL
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');

-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
  id SERIAL PRIMARY KEY,
  status order_status NOT NULL DEFAULT 'nuovo'
);

Cela garantit que personne ne pourra jamais insérer un statut invalide, protégeant ainsi la cohérence des données.

Essayez-le

Exercice#sql.m9.l1.e1
Tentatives : 0Chargement…

Créez une table 'user_reviews' avec : id (SERIAL pk), test_id (UUID avec gen_random_uuid() par défaut), score (entier non nul) et contenu (TEXT). Aucun des autres champs n'a besoin de contraintes explicites au-delà du type.

Chargement de l'éditeur…
Afficher l'indice

Écrivez CREATE TABLE user_reviews (...) puis les différents champs. Rappelez-vous les virgules.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#sql.m9.l1.e2
Tentatives : 0Chargement…

Créez d'abord le type ENUM 'user_role' avec les valeurs 'admin' et 'user'. Créez ensuite la table 'enum_users' avec l'identifiant (SERIAL pk) et le rôle (le type que vous venez de créer, NON NULL).

Chargement de l'éditeur…
Afficher l'indice

N'oubliez pas le ; pour séparer les deux instructions (le CREATE TYPE et le CREATE TABLE).

Solution disponible après 3 tentatives