tâche bd.sql.schema¶
résumé: | L’objectif de cette tâche est d’implémenter le schéma SQL de la base de données en partant du modèle de relations. |
---|---|
langage: | SQL |
artefacts: |
|
Introduction¶
Il s’agit d’implémenter en SQL le schéma de la base de données. Si un modèle de relations existe alors on cherchera a réaliser une traduction aussi fidèle et homogène que faire se peut.
Attention
Dans certains cas une base de données appelée “CyberMovies” peut
être fournie à titre d’exemple. Pour vérifier si c’est le cas ouvrir
ouvrir le fichier bd/sql/schema/schema.sql
et observer son
contenu. Si cet exemple n’est pas fourni, dans les tâches
ci-dessous le schéma et les données devront être créés avant toute
chose.
Au contraire si l’exemple CyberMovies est fourni alors les ressources
associées peuvent servir à comprendre/tester la création d’une
base de données, à réaliser des premières requêtes, etc. Dans ce cas
il est alors fortement conseillé d’utiliser tout d’abord
cette base et de lire/tester toutes les tâches bd.sql.*
avant de commencer à écrire le nouveau schéma de données.
(A) Schéma¶
Implémenter le schéma relationnel en SQL revient concrètement
à écrire différentes instructions CREATE TABLE
. Ces instructions
doivent être écrites dans le fichier schema.sql
.
Se référer à la documentation du SGBD utilisé pour connaître le détail de
la syntaxe SQL, les types de données disponibles, la manière d’écrire
les contraintes, etc.
Voici a titre d’illustration une instruction SQL de création de table.
CREATE TABLE Opinions(
spectator VARCHAR(100), -- => Spectators.name
movie VARCHAR(100), -- => Movies.title
stars INTEGER, -- BETWEEN 0 AND 5
CONSTRAINT PK
PRIMARY KEY (spectator, movie),
CONSTRAINT Dom_stars
CHECK (stars IN ('0', '1', '2', '3', '4', '5')),
CONSTRAINT FK_spectator
FOREIGN KEY (spectator) REFERENCES Spectators(name),
CONSTRAINT FK_movie
FOREIGN KEY (movie) REFERENCES Movies(title)
);
Note
Comme on le voit certaines normes de programmation doivent être suivies :
tous les mots clés SQL doivent être en majuscules,
l’indentation de 4 ou 8 espaces comme ci-dessus doit être respectée,
les contraintes doivent être définie de manière standardisée comme ci-dessus.
PK
signifie Primary KeyDom_<attributs>
pour les contraintes sur un domaineFK_<name>
pour les contraintes d’intégrité référentielle
(B) Automatisation¶
Un script de création bd/sql/cree-la-bd.sh
a pour rôle d’automatiser
la création de la base de données à partir du schéma. Le contenu de
ce script est fourni pour le SGBD sqlite
. Il pourra dans ce cas être
utilisé tel quel. Si un autre SGBD est utilisé, ce script peut être
réécrit/adapté, l’objectif étant d’avoir une seule et unique commande
pour créer la base de données.
Avec sqlite entrer la commande suivante à partir du répertoire
bd/sql/
:
cree-la-bd.sh
Ce script crée une base de données vide bd/sql/bd.sqlite3
et charge
le schéma bd/sql/schema/schema.sql
. L’exécution du script devrait
ressembler à cela :
Nettoyage de la base de données ... fait.
Chargement du schéma ... done.
Base de données vide créée.
Attention
Faire attention aux éventuelles erreurs produites lors de la création. Le script ne teste pas les erreurs, elles sont simplement affichées.
Se référer éventuellement au contenu du script pour plus d’information ; pour changer par exemple la localisation de la base de données. Si un autre SGBD est utilisé le contenu de ce script devra être adapté.
(C) Vérifications¶
Une fois la base de données créée il est possible si on le désire d’utiliser le SGBD selectionné (ici sqlite3) pour consulter le schéma et le contenu de la base de données.
Attention
L’exemple ci-dessous suppose que l’exemple CyberMovies est disponible.
$ sqlite3 bd.sqlite3
SQLite version 3.22.0
Enter ".help" for usage hints.
sqlite> .tables
Cinemas Frequents IsOn Movies Opinions Spectators
sqlite> SELECT * FROM Cinemas ;
sqlite>
Comme on peut le voir avec la dernière requête le contenu de la base de données est initialement vide. La tâche bd.sql.jdd montre comment remplir la base avec un jeux de données (jdd).
(Z) Suivi et status¶
Suivi: Des questions ou des hypothèses ? Voir la tâche projet.suivis.
Status: Avant de terminer cette tâche écrire le status. Voir la tâche projet.status.