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.

  1. Concevez un schéma de table et créez la table correspondante. Interrogez-la.

  2. Ajoutez-y quelques billets. Interrogez-la à nouveau.

  3. Confirmez vos mises à jour.

  4. 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.

  5. Goto 2.

  6. Conclusion ?

  7. Un détail : peut-on ajouter plusieurs fois le même billet ? Expliquez, et commentez les avantages et inconvénients de cette situation.

  8. Videz l'instance proprement... Vérifiez.

  9. Mêmes questions sans jamais utiliser commit. Conclusion ?

2   Sûreté

Où l'on abandonne la candeur pour considérer les coups durs.

  1. Donnons-nous une instance contenant un seul billet (pour simplifier les constations) ; vérifiez-le.

  2. 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.

    1. 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 ?

    2. Même question successivement entre les quatre insertions, ainsi qu'après la dernière. Conclusion ?

    3. 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.)

  1. Concevez puis créez la ou les tables de votre base.5 pour vous y retrouver dans les tables des différents exos ?

  2. 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.

  3. Jeanne change finalement pour Romorantin : 200 km.

  4. 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).

  5. Détruisez Jules.6
  6. Renommez la table Billet en Voyage.

  7. 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).

  8. Détruisez la table Ballade (donc schéma et instance).

  9. Modifiez le type de la colonne km de en chaîne de caractères : ballade, voyage, expédition selon le kilométrage.

  10. 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.