Cours de Bases de Données Avancées 2006-2007 Groupe cinema, Rapport 4



Documents pareils
Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Langage SQL : créer et interroger une base

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

TP Contraintes - Triggers

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Le Langage SQL version Oracle

Bases de données relationnelles

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Bases de Données relationnelles et leurs systèmes de Gestion

Le langage SQL Rappels

Administration des bases de données. Jean-Yves Antoine

Intégrité des données

Bases de données avancées

Cours Bases de données 2ème année IUT

Gestion de base de données

CREATION WEB DYNAMIQUE

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Notes de cours : bases de données distribuées et repliquées

Intégrité sémantique dans les bases de données relationnelles

Les bases de données

Mysql. Les requêtes préparées Prepared statements

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Systèmes de Gestion de Bases de Données

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Devoir Data WareHouse

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

SQL Historique

Cours SQL. Base du langage SQL et des bases de données

Cours Bases de données 2ème année IUT

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

BTS/CGO P10 SYSTEME INFORMATION Année

Introduction aux Bases de Données 2004/2005

Historisation des données

Chapitre 10. Architectures des systèmes de gestion de bases de données

Introduction au Système de Gestion de Base de Données et aux Base de Données

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

FileMaker 13. Guide de référence SQL

16H Cours / 18H TD / 20H TP

Bases de données et sites WEB Licence d informatique LI345

A QUOI SERVENT LES BASES DE DONNÉES?

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

OpenPaaS Le réseau social d'entreprise

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

A QUOI SERVENT LES BASES DE DONNÉES?

Olivier Mondet

Compte-rendu de projet de Système de gestion de base de données

Présentation Windows Azure Hadoop Big Data - BI

1. Base de données SQLite

MySQL / SQL EXEMPLES

Auto-évaluation Oracle: cours de base

Vincent Augusto

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Corrigés détaillés des exercices

CATALOGUE FORMATIONS DOMAINE Bases de données

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Le Langage De Description De Données(LDD)

Optimisation SQL. Quelques règles de bases

TP Bases de données réparties

Les déclencheurs. Version 1.0. Grégory CASANOVA

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

INTEGRITE ET BD ACTIVES

Les bases fondamentales du langage Transact SQL

Création et Gestion des tables

I4 : Bases de Données

Durée : 4 heures coefficient : 4 Le sujet se présente sous la forme de deux dossiers indépendants

TD n 10 : Ma première Base de Données

1 Modélisation d une base de données pour une société de bourse

Bases de données et sites WEB

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Encryptions, compression et partitionnement des données

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

LE LANGAGE SQL2 1. INTRODUCTION

Les BASES de DONNEES dans WampServer

TP3 : Creation de tables 1 seance

Bases de Données Réparties

Mysql avec EasyPhp. 1 er mars 2006

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Gestion de stock pour un magasin

Quelques aspects du Relationnel-Objet du SGBD Oracle

Compétences Business Objects

Bases de données Cours 4 : Le langage SQL pour ORACLE

Comprendre les bases de données

1 Position du problème

PROJET 1 : BASE DE DONNÉES REPARTIES

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

Transcription:

1 Annexes Avec ce rapport il faut rendre en annexe le script SQL corrigé qui permet de créer la base de données selon votre modèle relationnel ainsi que de la peupler avec un nombre de tuples suffisant. Modifications : La table salle est désormais identifieé par ID_Cinema et Numero_Salle pour permettre l insertion de plusieurs salles avec une même taille d écran et le nombre de places. Nous avons ajouté à la table seance un attribut DateHeureFin pour pouvoir comparer deux attributs dans un check. Nous avons ajouté à la table dvd l attribut Duree_Bonus. Nous avons ajouté à la table bonus l attribut Duree. 1 / 5

2 Requêtes SQL Pour chacune des requêtes SQL demandées vous devez fournir l'énoncé de la requête en français en plus de la requête elle-même. Requête SQL avec utilisation du mot clé DISTINCT Tous les types de catégories qui existent dans la base de données. SELECT DISTINCT Categorie FROM Categorie; Requête SQL avec bloc emboîté (sous-requête) utilisant le mot clé [NOT] IN Titre des films dans lesquels jouent des acteurs nés en 1980. SELECT Titre FROM FILM WHERE ID_Film IN(SELECT ID_Film FROM Joue WHERE ID_Personne IN (SELECT ID_Personne FROM Personne WHERE to_char(date_de_naissance, 'yyyy') ='1980')); Requête SQL avec bloc emboîté avec utilisation du mot clé [NOT] EXISTS Nom et prénom des personnes qui ont gagné au moins un Trophée. SELECT p.nom, p.prenom FROM Personne P WHERE EXISTS (SELECT * FROM Trophees t WHERE t.id_personne = p.id_personne); Requête SQL en utilisant plusieurs fois la même table (alias) Titre des films qui sont une suite. SELECT f1.titre FROM Film f1, Film f2 WHERE f1.precedent = f2.id_film; Requête SQL en utilisant les clauses GROUP BY et HAVING Catégorie et Nombre de films appartenant cette dernière parmi les catégories contenant plus de deux films. SELECT Categorie, count(id_film) as "Nombre de films" FROM Categorie GROUP BY Categorie HAVING count(id_film) > 2 Requête SQL avec opérations ensembliste (UNION ou INTERSECT ou EXCEPT) Nom, prénom et fonction des personnes ayant participé au film Casino Royale. SELECT nom, prenom, 'Scénariste' as "Fonction" FROM Personne JOIN Ecrit_Scenario USING (ID_personne) JOIN Film USING (ID_Film) WHERE Titre = 'Casino Royale' UNION SELECT nom, prenom, 'Producteur' as "Fonction" FROM Personne JOIN Produit USING (ID_personne) JOIN Film USING (ID_Film) WHERE Titre = 'Casino Royale' UNION SELECT nom, prenom, 'Réalisateur' as "Fonction" FROM Personne JOIN Realise USING (ID_personne) JOIN Film USING (ID_Film) WHERE Titre = 'Casino Royale' UNION SELECT nom, prenom, 'Acteur' as "Fonction" FROM Personne JOIN Joue USING (ID_personne) JOIN Film USING (ID_Film) WHERE Titre = 'Casino Royale' ORDER BY "Fonction" ASC, nom ASC, prenom ASC; 2 / 5

Requête SQL d'insertion de tuples à partir d'une requête SQL Ajouter au film ayant comme identifiant le numéro 8, les catégories du film ayant l identifiant numéro 2. INSERT INTO categorie (id_film, categorie) SELECT '8', categorie FROM categorie WHERE id_film = '2' Requête SQL de mise à jour de tuples à partir d'une requête SQL 3 CHECK Inverser les notes données par l auteur Sophie Andrey, (car il y a eu un mal entendu sur le sens de l échelle.) UPDATE critique c set (note) = (SELECT 6 - c.note FROM Information i, textuelle t WHERE i.id_info = t.id_info AND t.id_info = c.id_info AND i.auteur = 'Sophie Andrey') Pour chacune des CHECK demandés vous devez fournir l'énoncé de la contrainte implémenté par le CHECK en langage naturel, la raison pour laquelle cette requête devrait être implémentée par un CHECK plutôt que par un autre mécanisme et la requête qui est utilisé pour créer le CHECK. CHECK 1 - contrainte de domaine utilisant le mot clés IN ou BETWEEN Vérifier que la note donnée pour la critique est entre 0 et 6. S assurer que le domaine de valeur est valide. check(note BETWEEN 0 AND 6) CHECK 2 - Contrainte par rapport à d'autres attributs de la même table L attribut DateHeureFin de la table séance doit être plus grand que l attribut DateHeure. La fin d une séance doit être obligatoirement après son début. check(dateheurefin > DateHeure). CHECK 3 - utilisant une combinaison logique de conditions (AND, OR, NOT) Vérifier qu un trophée est soit attribué à un film soit à une personne. Il ne peut être attribué à un film et une personne en même temps. On ne veut pas qu un trophée soit attribué à aucun film ou à personne. On ne souhaite pas non plus qu un trophée soit attribué à une personne et à un film en même temps. Un trophée touche les personnes indirectement par que le fait que ces derniers ont participés à son succès et inversement. check((id_film IS NULL AND ID_Personne IS NOT NULL) OR (ID_Personne IS NULL AND ID_Film IS NOT NULL)) 3 / 5

4 TRIGGER Pour chacune des triggers demandés vous devez fournir l'énoncé de la contrainte implémenté par le trigger en langage naturel, la raison pour laquelle cette requête devrait être implémentée par un trigger plutôt que par un autre mécanisme, la description de ce que le trigger fait et la requête qui est utilisé pour le créer. CHECK 1 - Trigger de type STATEMENT LEVEL L objectif de ce trigger est de maintenir correct la somme totale de la durée des Bonus DVD. Parce que dans le cadre de cette modification, plusieurs tables sont modifiées. Description: Après l ajout ou la modification d un tuple dans la table Bonus, le trigger est déclenché et mets à jour l attribut Duree_Bonus dans la table DVD. CREATE OR REPLACE TRIGGER ControleDureeDVD AFTER INSERT OR UPDATE OR DELETE ON Bonus UPDATE dvd set Duree_Bonus = NVL((SELECT sum(duree) FROM Bonus WHERE bonus.id_film = dvd.id_film), 0); CHECK 2 - Trigger de type FOR EACH ROW LEVEL Vérifier l intégrité de la valeur entrée dans le champs Duree_bonus. Cela permet d effectuer une requête sur une autre table, ce que les autres moyens ne permettent pas Description: Lorsque l attribut Duree_bonus de la table DVD est modifié, si cette nouvelle valeur ne correspond pas à la valeur réelle calculée, une erreur est affichée. create or replace TRIGGER ModificationDureeBonus AFTER UPDATE OF Duree_Bonus ON DVD FOR EACH ROW DECLARE dureebonus dvd.duree_bonus%type; SELECT SUM(duree) INTO dureebonus FROM bonus WHERE bonus.id_film = :new.id_film; IF dureebonus <> :new.duree_bonus OR dureebonus IS NULL AND :new.duree_bonus <>0 THEN raise_application_error(-20002,'durée des bonus incorrect!'); END IF; 4 / 5

CHECK 3 - Trigger de type FOR EACH ROW LEVEL Un film ne peut être projeté avant qu il ne soit produit. Le trigger nous permet de profiter de requêtes et d avoir accès à la valeur future qui sera insérée Description: Ce trigger est appelé avant l insertion ou la mise à jour d un tuple de la table Film_Projete, il vérifie si la valeur entrée est antérieur à l année de production. Si ce n est pas le cas, il affiche une erreur. Requête : CREATE OR REPLACE TRIGGER CheckDateSortieValid BEFORE INSERT OR UPDATE ON FILMS_PROJETE FOR EACH ROW DECLARE anneeprod film.annee_de_production%type; SELECT annee_de_production INTO anneeprod FROM FILM WHERE id_film = :new.id_film; IF anneeprod > :new.date_de_sortie THEN raise_application_error(-20001,' Un film ne peut être projeté avant qu il ne soit produit!'); END IF; 5 / 5