L2 Info : Bases de données
 
◃  Ch. 4 Implantation des données avec SQL (DDL)  ▹
 

Gestion des énumérations

  • Il n'y a pas de type ENUM prévu dans le standard SQL !
  • Solution standard et portable
    • Avec un CHECK
      CREATE Professeur (
      prof_ID INT PRIMARY KEY,
      prof_nom VARCHAR(50) NOT NULL,
      prof_statut VARCHAR(4) NOT NULL CHECK (prof_statut IN('PU', 'MCF', 'ATER', 'ESAS'))
      );
    • Avec une clé étrangère
      CREATE TABLE statut (
      valeur VARCHAR(4) PRIMARY KEY
      );
      CREATE Professeur (
      prof_ID INT PRIMARY KEY,
      prof_nom VARCHAR(50) NOT NULL,
      prof_statut VARCHAR(4) NOT NULL,
      FOREIGN KEY prof_statut REFERENCES statut(valeur)
      );
  • MYSQL le met nativement à disposition
    • Exemple :
      CREATE Professeur (
      prof_ID INT AUTO_INCREMENT PRIMARY KEY,
      prof_nom VARCHAR(50) NOT NULL,
      prof_statut ENUM('PU', 'MCF', 'ATER', 'ESAS') NOT NULL
      );
    • La valeur NULL est autorisée par défaut !
    • La relation d'ordre suit l'ordre des définitions
  • PostgreSQL passe par la création d'un type dédié
    • Exemple :
      CREATE TYPE ens_statut AS ENUM('PU', 'MCF', 'ATER', 'ESAS')
      CREATE Professeur (
      prof_ID SERIAL PRIMARY KEY,
      prof_nom VARCHAR(50) NOT NULL,
      prof_statut ens_statut NOT NULL
      );
  • Oracle : respecte la norme ! (ne propose rien de spécifique)