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



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

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

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

TP Contraintes - Triggers

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

Corrigés détaillés des exercices

Gestion de base de données

Bases de données avancées

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

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

Introduction au PL/SQL Oracle. Alexandre Meslé

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Langage SQL : créer et interroger une base

TP3 : Creation de tables 1 seance

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

OpenPaaS Le réseau social d'entreprise

Auto-évaluation Oracle: cours de base

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

Intégrité des données

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

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

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

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

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

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

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

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Le Langage De Description De Données(LDD)

Olivier Mondet

A QUOI SERVENT LES BASES DE DONNÉES?

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

Devoir Data WareHouse

Configurer la supervision pour une base MS SQL Server Viadéis Services

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

BASES DE DONNEES TP POSTGRESQL

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

Master Exploration Informatique des données DataWareHouse

SQL Historique

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

Historisation des données

1 Position du problème

1. Base de données SQLite

Bases de Données Avancées PL/SQL

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

Systèmes de Gestion de Bases de Données

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Paginer les données côté serveur, mettre en cache côté client

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

PRÉAMBULE... 2 CRÉATION DE LA BASE DE DONNÉES...

Bases de Données Réparties

CREATION WEB DYNAMIQUE

BTS/CGO P10 SYSTEME INFORMATION Année

Création et Gestion des tables

PHP et les Bases de données - Généralités

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

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Application web de gestion de comptes en banques

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

Bases de données et sites WEB

Compétences Business Objects

Quelques aspects du Relationnel-Objet du SGBD Oracle

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

Présentation Windows Azure Hadoop Big Data - BI

Django et PostgreSQL sous la charge

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)

Encryptions, compression et partitionnement des données

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

FileMaker 13. Guide de référence SQL

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

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

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

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Gestion des utilisateurs et de leurs droits

Installation d'un serveur FTP géré par une base de données MySQL

Bases de données relationnelles

MySQL / SQL EXEMPLES

PHP 5. La base de données MySql. A. Belaïd 1

Le langage SQL (première partie) c Olivier Caron

MS SQL Express 2005 Sauvegarde des données

I4 : Bases de Données

Bases de Données Avancées

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Exercices sur SQL server 2000

Bases de données. Mihaela Mathieu

Génie Logiciel avec Ada. 4 février 2013

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Gestion des utilisateurs, des groupes et des rôles dans SQL Server 2008

1. Qu'est qu'un tablespace?

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

Sybase Adaptive Server Enterprise 15

Chapitre 5 : Les procédures stockées PL/SQL

Pratique et administration des systèmes

Comprendre les bases de données

Transcription:

Cours Bases de données 2ème année IUT Cours Bilan : Des vues à PL/SQL corrigé Anne Vilnat http://www.limsi.fr/individu/anne/cours

Plan 1 Cas exemple 2 Les tables... 3 Vues et index 4 Privilèges 5 Fonctions et procédures 6 Déclencheurs

Présentation du cas La base exemple Les informations ci-dessous décrivent partiellement une base de données utilisée par un site de petites annonces automobiles. Seules les annonces proposées il y a moins d un mois seront visibles, néanmoins un client pourra re-proposer une annonce. CLIENT (login, mdp, nom, prenom, tel, mel) PROPOSE ( ref, login, datesoumis, datevente) ANNONCE (ref, IDmodele, km, Annee, prix) MODELE (IDmodele, modele, marque, CVfiscaux)

Schéma du cas CLIENT PROPOSE login mdp nom pernom tel mel ref login datesoumis datevente ref IdModele km annee prix ANNONCE IdModele modele marque CVFiscaux MODELE Ordre chronologique de création des tables? Q2 A : MODELE, CLIENT, PROPOSE, ANNONCE B : MODELE CLIENT, ANNONCE, PROPOSE C : CLIENT, MODELE, ANNONCE, PROPOSE D : les 3 sont justes E : Aucune n est juste

Schéma du cas CLIENT PROPOSE login mdp nom pernom tel mel ref login datesoumis datevente ref IdModele km annee prix ANNONCE IdModele modele marque CVFiscaux MODELE Ordre chronologique de création des tables? MODELE ANNONCE CLIENT PROPOSE

Création de la table Propose (avec toutes les contraintes qui semblent judicieuses)??? Q3 A CREATE TABLE PROPOSE ( login INTEGER constraint CIR PROPOSE CLIENT REFERENCES CLIENT, ref INTEGER constraint CIR PROPOSE ANNONCE REFERENCES ANNONCE, datesoumis DATE default sysdate, datevente DATE, constraint CK DATES CHECK (datesoumis<=datevente), constraint PK PROPOSE PRIMARY KEY (login, ref, datesoumis) B CREATE TABLE PROPOSE ( login INTEGER PRIMARY KEY, ref INTEGER constraint CIR PROPOSE ANNONCE REFERENCES ANNONCE, datesoumis DATE default sysdate, datevente DATE, constraint CK DATES CHECK (datesoumis<=datevente) C CREATE TABLE PROPOSE ( login INTEGER PRIMARY KEY, ref INTEGER PRIMARY KEY, datesoumis DATE default sysdate PRIMARY KEY, datevente DATE, constraint CK DATES CHECK (datesoumis<=datevente)

Création Création de la table Propose CREATE TABLE PROPOSE ( login INTEGER constraint CIR PROPOSE CLIENT REFERENCES CLIENT, ref INTEGER constraint CIR PROPOSE ANNONCE REFERENCES ANNONCE, datesoumis DATE default sysdate, datevente DATE, constraint CK DATES CHECK (datesoumis<=datevente), constraint PK PROPOSE PRIMARY KEY (login, ref, datesoumis)

Ajout Ajouter un client dans la table CLIENT??? Q4 A : INSERT INTO CLIENT (login, mdp, prenom, nom, mel, tel) VALUES(123, 321, Paul, Hochon, ph@base.fr, 012245 ) B : INSERT INTO CLIENT VALUES(123, 321, Paul, Hochon, ph@base.fr, 012245 ) C : INSERT INTO CLIENT VALUES(123, 321, Hochon, Paul, 012245, ph@base.fr ) D : INSERT INTO CLIENT VALUES(123, 321, Hochon, Paul, ph@base.fr )

Ajout Ajouter un client dans la table CLIENT : A : INSERT INTO CLIENT (login, mdp, prenom, nom, mel, tel) VALUES(123, 321, Paul, Hochon, ph@base.fr, 012245 ) ou C : INSERT INTO CLIENT VALUES(123, 321, Hochon, Paul, 012245, ph@base.fr )

Vue du nombre de voitures vendues par un client??? Q5 A CREATE VIEW nb Vendues AS select login,nom,mel,count(ref) as nbvendues FROM CLIENT C, Propose P WHERE C.login=P.login AND datevente is NOT NULL B CREATE VIEW nb Vendues AS select login,nom,mel,count(ref) as nbvendues FROM CLIENT C, Propose P WHERE C.login=P.login AND datevente is NOT NULL GROUP BY login, nom, mel C CREATE VIEW nb Vendues AS select login,nom,mel,count(ref) as nbvendues FROM CLIENT C, Propose P WHERE C.login=P.login AND datevente is NOT NULL GROUP BY login D CREATE VIEW nb Vendues AS select login,nom,mel,count(ref) as nbvendues FROM CLIENT C, Propose P WHERE C.login=P.login GROUP BY login, nom, mel

Vue du nombre de voitures vendues par un client??? B CREATE VIEW nb Vendues AS select login,nom,mel,count(ref) as nbvendues FROM CLIENT C, Propose P WHERE C.login=P.login AND datevente is NOT NULL GROUP BY login, nom, mel

Modification d une vue Modifier une vue? Q6 Si vous remarquez une erreur sur le nom (par exemple, totoˆ21ˆm au lieu de toto) pouvez-vous la corriger? Oui/Non

Modification d une vue Modifier une vue Si vous remarquez une erreur sur le nom (par exemple, totoˆ21ˆm au lieu de toto) pouvez-vous la corriger? Pour rappel CREATE VIEW nb Vendues AS select login,nom,mel,count(ref) as nbvendues FROM CLIENT C, Propose P WHERE C.login=P.login AND datevente is NOT NULL GROUP BY login, nom, mel Modifiable Non modifiable, car il y a une fonction d aggrégation (count)

Index? Pour accélérer les requêtes... Q7 En supposant le nombre de données très important, quels sont les index qu il serait judicieux de créer explicitement pour accélérer l exécution des requêtes sur cette vue.??? A : P.login B: C.nom C. prenom D : aucun

Index? Pour accélérer les requêtes... En supposant le nombre de données très important, quels sont les index qu il serait judicieux de créer explicitement pour accélérer l exécution des requêtes sur cette vue.??? A : P.login

Création d une autre vue Vue sur des voitures... Créer une vue permettant d afficher toutes les annonces de Peugeot 206 GT (ref, nbkm, prix, année) indépendemment de savoir si elles sont proposées, vendues,...???

Création d une autre vue Vue sur des voitures... CREATE VIEW PEUGEOT206GT as SELECT ref, km, prix, annee from ANNONCE A, MODELE M WHERE A.IDmodele=M.IDmodele AND marque= Peugeot AND modele= 206 GT Modifier une vue Si vous remarquez une erreur sur une année pouvez-vous la corriger? Oui/Non/Peut-être? Et si oui, le faire!

Modification d une vue Modifier une vue Si vous remarquez une erreur sur une année pouvez-vous la corriger? Oui/Non/Peut-être? Et si oui, le faire! Modifier une vue modifiable : car préservation de la clé UPDATE PEUGEOT206GT SET annee=2006 WHERE annee=06 Question subsidiaire : où est faite la modification??? A : Dans la vue B : Dans la table Annonce C : Dans la table Modèle D : partout

Encore une vue... Vue sur des voitures... CREATE VIEW VISIBLE AS SELECT modele,marque,km,prix,mel,p.ref, datesoumis FROM CLIENT C, Propose P, Annonce A, modele M WHERE C.login=P.login AND P.ref=A.ref AND A.IDmodele=M.IDmodele AND months between(datevente,sysdate) <1 Modifiable sur? modele? marque? km? prix? mel? P.ref? datesoumis? datevente? oui non

Encore une vue... Vue sur des voitures... CREATE VIEW VISIBLE AS SELECT modele,marque,km,prix,mel,p.ref, datesoumis FROM CLIENT C, Propose P, Annonce A, modele M WHERE C.login=P.login AND P.ref=A.ref AND A.IDmodele=M.IDmodele AND months between(datevente,sysdate) <1 Modifiable sur? modele? marque? km? prix? mel? P.ref? datesoumis? datevente? oui x x non x x x x x x

Donner des droits... Donner les droits en lecture à quelqu un... Donner à toto le droit de faire : SELECT * FROM VISIBLE??? Q10 A : GRANT SELECT ON VISIBLE TO toto With GRANT OPTION B : GRANT SELECT ON VISIBLE TO toto C : GRANT READ ON VISIBLE TO toto D : On ne peut pas donner de droit sur une vue

Donner des droits... Donner les droits en lecture à quelqu un... Donner à toto le droit de faire : SELECT * FROM VISIBLE grant SELECT on visible to toto;

Fonction... Compter les 206... Faire une fonction qui renvoie le nombre de 206 mises en vente sur le site.??? Premier point : Faut-il un curseur? Q11 Oui Non Peut-être?

Fonction... Compter les 206... CREATE FUNCTION Compte206 RETURN NUMBER IS nb206 NUMBER BEGIN SELECT COUNT(*) INTO nb206 FROM Propose P, Annonce A, Modele M WHERE A.ref = P.ref AND A.IdModele = M.IdModele AND M.modele = 206 ; RETURN nb206; END;

... et procédure Afficher les 206... Faire une procédure qui affiche les 206 mises en vente sur le site.??? Premier point : Faut-il un curseur? Q12 Oui Non Peut-être?

... et procédure Afficher les 206... CREATE PROCEDURE Affiche206 CURSOR les206 IS SELECT modele, km, annee, prix, datesoumis FROM Propose P, Annonce A, Modele M WHERE A.ref = P.ref AND A.IdModele = M.IdModele AND M.modele = 206 ; BEGIN DBMS OUTPUT.PUT LINE ( Voici les 206 : ); FOR une206 IN les206 LOOP DBMS OUTPUT.PUT LINE (une206.modele une206.km...); END LOOP; END;

Encore des fonctions... Compter les mouvements du jour Faire une fonction qui renvoie le nombre d annonces mises sur le site aujourd hui. Faire une fonction qui renvoie le nombre de ventes faites aujourd hui. Elargir à des fonctions qui prennent en paramètre la date.???

Paquetage Faire un paquetage de statistiques Faire un paquetage qui regroupent toutes ces fonctions et procédures de stats...???

Paquetage Faire un paquetage de statistiques: les spécifications CREATE PACKAGE Stats AS FUNCTION nb206 RETURN NUMBER; PROCEDURE affiche206;... END Statistiques ;

Paquetage Faire un paquetage de statistiques: le corps CREATE PACKAGE BODY Stats AS FUNCTION nb206 RETURN NUMBER nb206 NUMBER BEGIN SELECT COUNT(*) INTO nb206 FROM Propose P, Annonce A, Modele M WHERE A.ref = P.ref AND A.IdModele = M.IdModele AND M.modele = 206 ; RETURN nb206; END nb206; PROCEDURE affiche206... END affiche206; END Statistiques ;

Déclencheurs Faire un déclencheur... Faire un déclencheur qui affiche quand un client met plus de 10 annonces.??? Faire un déclencheur... Faire un déclencheur qui interdit à un client de mettre plus de 15 annonces.???

Déclencheurs Faire un déclencheur... CREATE TRIGGER avert10annon BEFORE INSERT ON Propose BEGIN nbloc NUMBER SELECT COUNT * INTO nb FROM Propose P WHERE login=old:login DBMS OUTPUT.PUT LINE( Plus de 10 annonces pour C.nom); END IF; END;