la page du cours
Premiers pas dans le monde merveilleux des bases de
données
Il s'agit pendant cette première séance d'aller immédiatement au
coeur des bases de données en expérimentant concrètement deux
des quatre principales fonctionnalités définissant un SGBD : la
persistance et la sûreté.
On va, à partir de zéro, créer et interroger une pico-base de
données de billets SNCF au départ de Paname : client et sa
destination, en gérant la reprise sur panne.
Vous pouvez si vous le souhaitez choisir un autre domaine
d'application que la SNCF, tous les exercices ont été conçus
pour
permettre cela. Par exemple, chaque fois qu'il sera question dans la
suite des TDs de billets avec des clients et des destinations, vous
pourrez considérer des films avec des titres et des acteurs, ou des
vins avec des appellations et des cépages, etc.
Exemples d'ordres Oracle pour le TD
1 Persistance
Où l'on manipule candidement la base de données la plus
simple du monde.
-
Concevez un schéma de table et créez la table
correspondante. Interrogez-la.
-
Ajoutez-y quelques billets. Interrogez-la à nouveau.
-
Confirmez vos mises à jour.
-
Terminez proprement la session client, la session serveur,
délogez-vous d'Unix, et coupez le courant dans toute l'Ecole, y
compris le disque dur (lequel, au fait ?)...
Reconnectez-vous à votre base de données1 et
interrogez-la.
-
Goto 2.
-
Conclusion ?
-
Un détail : peut-on ajouter plusieurs fois le même billet ?
Expliquez, et commentez les avantages et inconvénients de cette
situation.
-
Videz l'instance proprement... Vérifiez.
-
Mêmes questions sans jamais utiliser commit. Conclusion ?
2 Sûreté
Où l'on abandonne la candeur pour considérer les coups durs.
-
Donnons-nous une instance contenant un seul billet (pour simplifier
les constations) ; vérifiez-le.
-
on considère la séquence suivante d'ordres SGBD, immédiatement
après la connexion : ajouts successifs de deux billets,
confirmation, ajout de deux autres billets, confirmation.
-
Commencez à exécuter cette séquence. Créez une panne entre les
deux premiers ajouts :
- matérielle :
-
au choix, blaster la CPU (laquelle, au fait ?), couper l'alimentation
de la
machine (laquelle ?)2 ;
- logicielle :
-
division par zéro, deadlock (quand le serveur en détecte un,
il peut décider de tuer sans sommation le processus
client).3
Reconnectez-vous. Interrogez. Conclusion ?
-
Même question successivement entre les quatre insertions, ainsi
qu'après la dernière. Conclusion ?
-
Même question, mais la panne matérielle qu'on considère
maintenant c'est la tête de lecture du disque (lequel ?)
qui fait un atterrissage en catastrophe. Conclusion ?
Nous étudierons bientôt en détail la reprise sur panne,
avec le concept théorique et pratique de transaction.
3 Mises à jour
On étend maintenant les informations gérées, en définissant
maintenant un billet comme : client, destination, kilométrage, avec
0,51F pour prix du kilomètre4.
Création de table et insertion simple de n-uplet ont été vues
dans l'Exercice 1. Donnez des ordres SGBD pour les
mises à jour suivantes (éventuellement plusieurs par question).
Vérifiez à chaque fois les effets de bord qu'ont eu vos
ordres. Comment ? Lesquelles de ces mises à jour portent sur
l'instance ? Sur le schéma ?
Gardez un historique complet du déroulement des ordres ci-dessous
grâce aux commandes spool fichier/spool off.
Remarquez que certains des ordres disponibles n'ont aucune
interaction avec le serveur. Lesquels ? (Ce ne sont pas des ``ordres
BD'' à proprement parler.)
-
Concevez puis créez la ou les tables de votre base.5 pour vous y
retrouver
dans les tables des différents exos ?
-
Remplissons la base avec par exemple les billets suivants (ou d'autres
de votre choix, sur le même principe) :
Jeanne va à Saint Trop, kilométrage inconnu ;
Jules à Strasbourg, kilométrage inconnu ;
Jim à Aubenas, 600 km ;
Cassavetes à Saint-Lucien, 80 km.
-
Jeanne change finalement pour Romorantin : 200 km.
-
Ajoutez à la table Billet la colonne Résa :
20 F pour les destinations de plus de 100 km et gratuite pour les
autres (y compris ceux dont la destination est inconnue).
-
Détruisez Jules.6
-
Renommez la table Billet en Voyage.
-
Créez une table Ballade contenant les billets dont la
destination
est à moins de 100 km, avec seulement les attributs clientb, destb (sans modifier les originaux).
-
Détruisez la table Ballade (donc schéma et instance).
-
Modifiez le type de la colonne km de en
chaîne de caractères : ballade, voyage, expédition
selon le kilométrage.
-
Calculez le prix du billet de Jeanne (tant pis pour cette fois
si ce n'est pas encore très élégant).
- 1
- sous Oracle,
c'est simplement l'ensemble de vos tables
- 2
- Afin de garder d'excellentes relations
avec les ingénieurs système, vous pourrez aussi utiliser kill -9 (de quel processus ?)...
- 3
- Bon, cette panne, on ne la mettre en oeuvre que
plus tard.
- 4
- On considèrera bientôt une
situation plus réaliste en séparant les
trajets des billets.
- 5
- Pour
les allumé(e)s : comment vous organiser sommairement
- 6
-
Cette semaine, on ne vérifiera pas
si Jules apparaissait ailleurs dans la base (intégrité
référentielle).
©S. Abiteboul, E. Waller, B. Amann
Ce document a été traduit de LATEX par
HEVEA.