Aller au contenu principal

Table des classes

Gérer des groupes d'utilisateurs ("classes").

Notions théoriques

Structure de la table classes

Voici les colonnes nécessaires pour représenter une classe :

ColonneTypeDescription
iduuidIdentifiant unique de la classe
nametextNom de la classe (obligatoire)
descriptiontextDescription libre (optionnelle)
created_attimestamp with time zoneDate de création automatique
updated_attimestamp with time zoneDate de dernière modification automatique

Génération d’UUID avec uuid_generate_v4()

Pour éviter les identifiants prédictibles comme 1, 2, 3, on utilise des UUID (identifiants universels uniques). PostgreSQL permet de générer un UUID avec la fonction :

uuid_generate_v4()
info

Cette fonction génère un identifiant aléatoire, très difficile à deviner. Elle est utilisée comme valeur par défaut dans la colonne id.


Timestamps automatiques

Les colonnes created_at et updated_at permettent de :

  • savoir quand une classe a été créée,
  • savoir quand elle a été modifiée pour la dernière fois.

Ces colonnes sont utiles pour l’audit, le tri, ou la synchronisation des données.

Syntaxe pour les remplir automatiquement :

created_at timestamp with time zone default timezone('utc'::text, now())

Même chose pour updated_at.

astuce

Utiliser le fuseau UTC permet de conserver une cohérence temporelle, quel que soit le pays de l’utilisateur.


Contraintes à appliquer

Il est recommandé d’ajouter les contraintes suivantes :

  • PRIMARY KEY (id) : chaque classe a un identifiant unique.
  • NOT NULL sur name : une classe doit avoir un nom.
  • Valeurs par défaut sur id, created_at, updated_at.

Bonne pratique cyber

  • Auditabilité : les colonnes created_at et updated_at permettent de tracer l’activité.
  • Logs d’activité : en production, il est conseillé de mettre en place des mécanismes de journalisation pour savoir qui a créé ou modifié une classe.
  • Pas de données sensibles : ne pas stocker d’information confidentielle dans la description sans chiffrement.
attention

Ne jamais stocker d’information personnelle (nom réel, adresse, etc.) dans la description sans contrôle d’accès.


Exemple pratique

Créer la table classes dans Supabase

Il est possible de créer la table classes via le SQL Editor de Supabase, avec le script suivant :

create table public.classes (
id uuid primary key default uuid_generate_v4(),
name text not null,
description text,
created_at timestamp with time zone default timezone('utc'::text, now()),
updated_at timestamp with time zone default timezone('utc'::text, now())
);

Ce script :

  • génère automatiquement un UUID pour chaque nouvelle classe,
  • impose que le nom soit obligatoire,
  • ajoute deux colonnes pour tracer la création et la mise à jour.

Insérer une classe de test

Il est possible d’ajouter une entrée de test avec la requête suivante :

insert into public.classes (name, description)
values ('Classe A', 'Groupe d’apprentissage pour les débutants');

Cela insère une ligne avec :

  • un UUID généré automatiquement,
  • un nom explicite,
  • une description libre,
  • une date de création et de mise à jour automatique.

Vérifier la table dans Table Editor

  1. Aller dans l’onglet Table Editor.
  2. Cliquer sur la table classes.
  3. Vérifier que les colonnes sont bien présentes.
  4. Vérifier que les valeurs par défaut ont bien été appliquées.

Mettre à jour une classe

Il est possible de modifier la description d’une classe existante :

update public.classes
set description = 'Classe mise à jour pour les avancés',
updated_at = timezone('utc'::text, now())
where name = 'Classe A';
remarque

Il faut penser à mettre à jour manuellement la colonne updated_at, sauf si un trigger est mis en place (ce sera vu dans une autre séance).


Test de mémorisation/compréhension


Quel type de données est utilisé pour l'identifiant d'une classe ?


Quelle fonction PostgreSQL permet de générer un UUID ?


Quelle colonne doit obligatoirement être remplie ?


Quel mot-clé permet de définir une valeur par défaut dans une colonne ?


Quel fuseau horaire est utilisé pour les timestamps dans ce projet ?


Pourquoi utiliser un UUID plutôt qu’un identifiant auto-incrémenté ?


Quel champ doit être mis à jour lors d’une modification de ligne ?


Que permet la contrainte PRIMARY KEY ?


Que se passe-t-il si on oublie de mettre updated_at à jour ?


Quel outil graphique permet de visualiser une table dans Supabase ?



TP pour réfléchir et résoudre des problèmes

Étape 1 — Créer la table classes dans Supabase via SQL Editor

  1. Se connecter à votre projet Supabase.
  2. Aller dans l’onglet SQL Editor.
  3. Copier-coller le script SQL suivant dans l’éditeur :
create table public.classes (
id uuid primary key default uuid_generate_v4(),
name text not null,
description text,
created_at timestamp with time zone default timezone('utc'::text, now()),
updated_at timestamp with time zone default timezone('utc'::text, now())
);
  1. Exécuter le script.
Une solution

Étape 2 — Vérifier la création de la table dans Table Editor

  1. Aller dans l’onglet Table Editor.
  2. Cliquer sur la table classes.
  3. Vérifier que les colonnes suivantes sont bien présentes :
    • id
    • name
    • description
    • created_at
    • updated_at
Une solution

Étape 3 — Insérer une classe de test via SQL

  1. Retourner dans l'onglet SQL Editor.
  2. Exécuter la requête suivante :
insert into public.classes (name, description)
values ('Classe A', 'Groupe d’apprentissage pour les débutants');
Une solution

Étape 4 — Vérifier l’insertion dans Table Editor

  1. Aller dans Table Editor.
  2. Cliquer sur la table classes.
  3. Vérifier que la ligne insérée apparaît avec toutes les colonnes remplies.
Une solution

Étape 5 — Modifier la description de la classe et mettre à jour le timestamp

  1. Toujours dans le SQL Editor, exécuter la requête suivante :
update public.classes
set description = 'Classe mise à jour pour les avancés',
updated_at = timezone('utc'::text, now())
where name = 'Classe A';
Une solution

Étape 6 — Vérifier la mise à jour de la classe

  1. Aller dans Table Editor.
  2. Rechercher la ligne de la classe "Classe A".
  3. Vérifier que :
    • La description a bien été modifiée.
    • Le champ updated_at a une valeur différente de created_at.
Une solution

Étape 7 — Ajouter une deuxième classe pour tester l’unicité des identifiants

  1. Exécuter la requête suivante dans le SQL Editor :
insert into public.classes (name, description)
values ('Classe B', 'Deuxième groupe d’étudiants');
  1. Vérifier que les deux classes sont bien présentes.
Une solution

Étape 8 — Vérifier la structure SQL de la table classes

  1. Dans Supabase, aller dans l’onglet Table Editor.
  2. Cliquer sur la table classes.
  3. Cliquer sur View Definition (ou "Afficher la définition").
Une solution

Étape 9 — Supprimer une classe (optionnel)

  1. Supprimer la classe Classe B via SQL :
delete from public.classes
where name = 'Classe B';
Une solution

Étape 10 — Vérification finale de la table

  1. Vérifier que la table contient exactement une ligne : "Classe A".
  2. Vérifier que toutes les colonnes sont correctement remplies.
  3. Vérifier que le champ updated_at est bien plus récent que created_at.
Une solution