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
Nous travaillerons dans ce TP sur les trois tables suivantes qui permettent de décrire livres, lecteurs et les prêts :
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.
Télécharger l'archive tme_vues_2020.zip et la décompresser dans votre dossier perso.
Lancer SQLWorkbench et se connecter à Oracle en suivant ces indications : Oracle avec SQLWorkbench
Dans un onglet (New Tab), ouvrir le fichier tme_vues.sql
Exécuter les commandes :
@tme_vues_schema @tme_vues_donnees
Pour vérifier que votre base a été peuplée, exécuter les requêtes suivantes :
SELECT COUNT(*) AS Num_lecteurs FROM lecteur; // retourne 14 SELECT COUNT(*) AS Num_livres FROM livre; // retourne 712 SELECT COUNT(*) AS Num_prets FROM pret; // retourne 21
Entrez les commandes SQL permettant de créer les vues suivantes :
POLICIER (COTE, TITRE, AUTEUR)
La vue contient 185 livres
LECTEUR_CATEGORIE (NOLECTEUR, CATEGORIE)
La vue contient 21 nuplets (ou 9 nuplets si la clause SELECT a un DISTINCT)
LECTEUR_POLICIER (NOLECTEUR, NOM, ADRESSE, COTE, DATEEMPRUNT, DATELIMITE)
La vue contient 18 nuplets (faisant référence à 6 lecteurs distincts)
DEPASSEMENTS (NOLECTEUR, COTE, DATELIMITE)
La vue contient 4 dépassements
STATISTIQUES (NOLECTEUR, NBLIVRES)
La vue contient 3 nuplets
Un utilisateur n'ayant que le droit d'interroger les vues précédentes, pose les questions suivantes :
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>
INSERT INTO <nom de la TABLE/vue> VALUES (n1, n2, ...)
On verra une solution avec des triggers dans le prochain TME.
Si vous utilisez Oracle l'URL de connexion est :
jdbc:oracle:thin:@localhost:1521:oracle
Si vous utilisez H2, l'URL de connexion est :
jdbc:h2:tcp://localhost:9093/~/tmevues