« Programmation SQL/Exemples » : différence entre les versions

Contenu supprimé Contenu ajouté
Alq666 (discussion | contributions)
m →‎Modèle de données : alignement de la parenthèse fermante
Alq666 (discussion | contributions)
Ligne 11 :
prenom varchar(256) not null,
nom varchar(256) not null,
email varchar(256) not null,
creation timestamp not null,
);
<tt>sid</tt> est un identifiant dont la particularité est d'être unique et strictement monotone grâce au fait qu'il est basé sur une <tt>séquence</tt> qui possède les mêmes propriétés. Une séquence est une fonction strictement monotone qui renvoie une liste d'entiers distincts à chaque fois qu'elle est appelée. <tt>sid</tt> se prête donc particulièrement à une utilisation comme clé primaire. Utiliser des clés primaires arbitraires, c'est-à-dire créer un identifiant spécifiquement à cet usage, plutôt que d'utiliser des attributs uniques existants (comme dans ce cas, l'adresse email) facilite les jointures.
Ligne 17 ⟶ 18 :
Pour s'assurer de l'unicité de l'adresse email dans cette table, ajoutons une contrainte d'unicité sur l'attribut <tt>email</tt>
alter table utilisateur add constraint email_unique unique(email);
 
Créons à présent la table qui comportera toutes les images. Comme nous construisons une bibliothèque qui pourra contenir un grand nombre d'images, nous stockerons ces images en dehors du SGBD et ne ferons figurer que le chemin qui mène au fichier qui contient l'image. Il est possible de stocker les images elles-mêmes dans la base mais cela conduira à limiter la capacité du SGBD, qui, sous une charge importante, passera un certain temps à extraire les images de ses tables et limitera le trafic maximum.
 
create table image
(
sid serial primary key not null,
nom varchar(256) not null,
chemin varchar(256) not null,
creation timestamp not null
);
 
Associons maintenant images et utilisateurs.
 
create table image_utilisateur
(
sid serial primary key not null,
image_sid integer not null,
utilisateur_sid integer not null
);
 
Ajoutons des mots-clés :
create table mot_cle
(
sid serial primary key not null,
nom varchar(256) not null,
creation timestamp not null
);
 
Et associons-les aux images
create table image_mot_cle
(
sid serial primary key not null,
image_sid integer not null,
mot_cle_sid integer not null
);