Bonjour,
Pour bien cadrer mes notions dès le début :
Sachant qu’une clé primaire n’admet ni doublon ni valeur nulle et en se limitant à la création de la clé primaire dans la définition de la colonne, si on veut créer une clé primaire de type numérique, auto-incrémentée, la documentation (9.3) nous indique plusieurs voies:
Tout d’abord (II.8.1.4, types sériés) :
1.qui est équivalent à écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE TABLE nom_de_table ( nom_de_colonne SERIAL );
2.On comprend que suivant les besoins, nom_de_colonne pourra être de type integer ou bigint, ce qui correspondra respectivement à serial et bigserial.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE SEQUENCE nom_de_table_nom_de_colonne_seq; CREATE TABLE nom_de_table ( nom_de_colonne integer NOT NULL DEFAULT extval('nom_de_table_nom_de_colonne_seq') NOT NULL ); ALTER SEQUENCE nom_de_table_nom_de_colonne_seq OWNED BY nom_de_table.nom_de_colonne;
Pour obtenir la clé primaire dans les deux exemples ci-dessus, il faut encore ajouter la contrainte UNIQUE à la colonne nom_de_colonne.
On pourrait remplacer les contraintes NOT NULL UNIQUE par PRIMARY KEY (avec une redondance sur NOT NULL dans le cas de l’utilisation de serial, puisque la séquence développée comprend déjà cette contrainte).
Outre d’être équivalente à la combinaison ‘NOT NULL UNIQUE’, PRIMARY KEY a une valeur sémantique propre indiquant un identifiant unique de ligne.
Ensuite, dans VI. Commandes SQL, CREATE TABLE, on trouve les exemples suivants :
3.4.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE TABLE distributeurs ( did integer PRIMARY KEY DEFAULT nextval('serial'),
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE TABLE distributeurs ( did integer PRIMARY KEY,
Est-ce que je raisonne correctement si j’analyse tout cela comme suit :
L’exemple 4 ne pourrait fonctionner qu’avec une valeur ‘did’ fournie par le programme et n’aboutirait donc pas un identifiant automatique.
L’exemple 2 est la seule méthode a priori compatible avec tous les SGBD dans le cadre de la norme SQL.
Il n’y a pas de différence entre l’exemple 1 (complété par PRIMARY KEY) et l’exemple 3 et, dans l’environnement Postgresql, je préférerais alors la formulation de l’exemple 1 complétée comme suit pour créer une clé primaire numérique auto-incrémentée :
Je vous remercie déjà de vos commentaires et lumières,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE TABLE nom_de_table ( nom_de_colonne SERIAL PRIMARY KEY );
Hemgé
Partager