</>
Plan du cours — 15/64

Clés primaires : identity, UUID ou clé naturelle ?

Intermédiaire

La clé primaire identifie chaque ligne de façon unique et stable ; son choix influence les index, les jointures et l'exposition dans l'API.

-- Entier auto-incrémenté (recommandé : identity, plutôt que serial)
CREATE TABLE commandes (
    id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    ...
);

-- UUID
CREATE TABLE sessions (
    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    ...
);
OptionAvantagesInconvénients
bigint identityCompact (8 octets), index dense, ordre d'insertionDevinable dans les URLs, génération centralisée
uuid v4 (aléatoire)Générable partout, non devinable16 octets, insertions dispersées dans l'index (mauvaise localité)
uuid v7 (ordonné dans le temps)Non devinable et insertions quasi séquentiellesRévèle l'heure de création ; fonction native uuidv7() depuis PostgreSQL 18, sinon extension ou génération côté application
Clé naturelle (email, code pays)Sens métierPeut changer, peut être ré-affectée : rarement une bonne clé primaire

Astuce : une bonne pratique courante : clé primaire technique (bigint identity) plus contrainte UNIQUE sur la clé naturelle (email). Si vous exposez des identifiants publics, utilisez un UUID en colonne séparée plutôt que la clé primaire.

Piège : serial est l'ancienne syntaxe ; les colonnes GENERATED ... AS IDENTITY sont standard SQL, et ALWAYS empêche d'écrire une valeur par erreur.