Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:licence:3i009:tme_vues

Ceci est une ancienne révision du document !


TME 9 Vues

INTRODUCTION

Les systèmes de gestion de bases de données relationnelles offrent un grand degré d'indépendance logique entre les données et les programmes d'application. Chaque utilisateur peut avoir sa description particulière de la partie de la base qu'il utilise. Cette fonction est assurée par la notion de Vue. Une vue est un ensemble de relations déduites d'une base de données, par composition des relations de la base, c'est à dire comme le résultat d'une requête d'interrogation. La déclaration d'une vue s'effectue par la commande suivante :

CREATE OR REPLACE VIEW <nom de vue> [(liste d'attribut)]
AS <requête SQL>

L'exemple utilisé lors de ce TP est celui d'une base de données BIBLIOTHEQUE gérant

  • des lecteurs,
  • des livres identifiés par un numéro et appartenant à une certaine catégorie d'ouvrages (roman policier, aventure, …) et
  • les prêts de livres.

Nous travaillerons dans ce TP sur les trois tables suivantes qui permettent de décrire livres, lecteurs et les prêts :

  • LIVRE (COTE, TITRE, CATEGORIE, AUTEUR)
  • LECTEUR ( NOLECTEUR, NOM, ADRESSE)
  • PRET (COTE, NOLECTEUR, DATEEMPRUNT, DATELIMITE, RENDU)

La clé primaire de chaque table est soulignée. Pour la table PRET, COTE,NOLECTEUR est une clé ; COTE et NOLECTEUR référencent LIVRE et LECTEUR respectivement.

CONSTITUTION DE LA BASE DE DONNÉES

commandedescription
cd mon_répertoire aller dans votre répertoire de travail
tar zxvf /Infos/bd/public/tme_vues.tgz installer l'archive dans votre répertoire principal
cd tme_vues aller dans le répertoire du TME
emacs tme_8.sql & ouvrir le fichier et créer la base avec les commande indiquées
Alt-x my/sql-oracle ou Atl-x sql-oracle se connecter à Oracle. Voir ConnexionOracle
placer le curseur sur la ligne @tme8_schema et saisir Ctrl-c Ctrl-c créer les tables
placer le curseur sur la ligne @tme8_donnees et saisir Ctrl-c Ctrl-c remplir les tables

Pour vérifier que votre base a été peuplée, exécuter les requêtes suivantes :

SELECT COUNT(*) AS Num_lecteurs FROM lecteur; // retourne 15
SELECT COUNT(*) AS Num_livres FROM livre; // retourne 712
SELECT COUNT(*) AS Num_prets FROM pret; // retourne 21

CRÉATION DES VUES

Entrez les commandes SQL permettant de créer les vues suivantes :

  1. Les romans policiers :
     POLICIER (COTE, TITRE, AUTEUR)

    La vue contient 185 livres

  2. Les lecteurs avec les catégories des livres qu'ils ont empruntés (rendu ou pas) :
     LECTEUR_CATEGORIE (NOLECTEUR, CATEGORIE) 

    La vue contient 21 nuplets (ou 9 nuplets si la clause SELECT a un DISTINCT)

  3. Les lecteurs de romans policier :
     LECTEUR_POLICIER (NOLECTEUR, NOM, ADRESSE, COTE, DATEEMPRUNT, DATELIMITE) 

    La vue contient 18 nuplets (faisant référence à 6 lecteurs distincts)

  4. Les livres qui n'ont pas été rendu à temps en supposant que nous sommes le premier janvier 2015 (la date s'écrit '01/01/2015').
     DEPASSEMENTS (NOLECTEUR, COTE, DATELIMITE) 

    La vue contient 4 dépassements

  5. Une relation donnant pour chaque lecteur le nombre de ses emprunts en cours :
     STATISTIQUES (NOLECTEUR, NBLIVRES) 

    La vue contient 3 nuplets

INTERROGATION DES VUES

Un utilisateur n'ayant que le droit d'interroger les vues précédentes, pose les questions suivantes :

  1. Nom des lecteurs ayant emprunté des romans policiers à la date du 6 janvier 2016. (1 nuplet)
  2. Noms des lecteurs ayant emprunté au moins deux romans policiers de 'Maxime Chattam' le même jour. (2 nuplets)
  3. La liste des lecteurs de policier qui ont lu tous les romans policier lus par 'Gaspard Dupont'. (3 nuplets)
  4. La liste des lecteurs de romans policiers qui n'ont jamais lu des romans écrits par 'Moore Viviane'. (6 nuplets)
  5. La liste des lecteurs qui ont lu tous les romans policier de 'Anne Perry' (1 nuplet)
  6. La liste des noms des lecteurs de romans policiers qui ont plus de deux livres en retard, la date limite ainsi que les noms de ces livres.(1 nuplet)
  7. Exprimer les requêtes 1, 2 et 3 telle qu'elles devraient être posées sur les relations de base LECTEUR, LIVRE et PRET.

MISE À JOUR D'UNE VUE

Il est parfois souhaitable de ne pas donner un accès direct aux tables d'une base de données. Lorsque l'utilisateur souhaite mettre des données à jour, il est possible d'utiliser certaines vues pour mettre à jour de manière indirecte les tables.

UPDATE <TABLE/vue>
SET attribut=valeur, attribut2=valeur, ...
WHERE <condition SQL>
  1. Mettre à jour le roman policier écrit par 'Wilkie Collins' dont la cote est 'COLL05' en lui donnant le titre 'La dame en noir'

Insertion dans une vue

  1. Essayez d'insérer un nouveau roman policier au moyen de la commande SQL INSERT et en utilisant seulement la vue POLICIER. Qu'observez vous et expliquez le problème.
INSERT INTO <nom de la TABLE/vue> VALUES (n1, n2, ...)

On verra une solution avec des triggers dans le prochain TME.

site/enseignement/licence/3i009/tme_vues.1543317577.txt.gz · Dernière modification: 27/11/2018 12:19 par hubert