Syllabus - Département d`Informatique
Transcription
Syllabus - Département d`Informatique
Bases de Données I Jef Wijsen Université de Mons-Hainaut September 26, 2008 Sommaire Préface iv I 1 Le Modèle Relationnel 1 Objectifs et Architectures des SGBD 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Haut niveau d’abstraction, immunisé contre des inférieurs . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Partageable, mais d’une manière transparente . . 1.2.3 Restauration après des pannes “techniques” . . . 1.2.4 Protection contre mauvais emploi et abus . . . . 1.2.5 Assurer une bonne performance . . . . . . . . . . 1.3 Architecture Fonctionnelle des SGBD . . . . . . . . . . 1.4 Architecture Opérationnelle des SGBD . . . . . . . . . . 1.4.1 Architecture Centralisée . . . . . . . . . . . . . . 1.4.2 Architecture Client-Serveur . . . . . . . . . . . . 1.5 Le Marché des SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . changements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . aux niveaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 La Définition de Schémas 2.1 Introduction . . . . . . . . . 2.2 Relation (ou Table) . . . . . 2.3 Contraintes de Références . 2.4 Création de Tables en SQL 2 2 2 2 4 5 5 5 6 6 6 6 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 9 10 3 L’Algèbre Relationnelle SPJRUD 3.1 Opérations de Base . . . . . . . . . . . 3.1.1 Sélection ou Restriction . . . . 3.1.2 Projection . . . . . . . . . . . . 3.1.3 Jointure ou Jointure Naturelle 3.1.4 Renommer . . . . . . . . . . . 3.1.5 Union . . . . . . . . . . . . . . 3.1.6 Différence . . . . . . . . . . . . 3.2 Opérations Dérivées . . . . . . . . . . 3.2.1 Division . . . . . . . . . . . . . 3.2.2 Intersection . . . . . . . . . . . 3.3 Exemple . . . . . . . . . . . . . . . . . 3.4 Traitement Plus Formel . . . . . . . . 3.4.1 Tuple et Relation . . . . . . . . 3.4.2 Sélection . . . . . . . . . . . . 3.4.3 Projection . . . . . . . . . . . . 3.4.4 Jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 11 12 12 12 12 13 13 13 13 13 13 14 14 14 . . . . . . . . . . . . . . . . . . . . i ii SOMMAIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 14 14 15 15 15 4 Le Calcul Relationnel 4.1 Introduction . . . . . . . . 4.1.1 Le Principe . . . . 4.1.2 Le Problème . . . 4.2 Traitement Plus Formel . 4.2.1 Syntaxe . . . . . . 4.2.2 Sémantique . . . . 4.3 Indépendance du domaine 4.4 Expressivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 16 16 16 17 17 18 19 20 5 SQL 5.1 La Base de Données . . . . . . . . . . . . . . . . . . . 5.2 Création de Domaines et de Tables . . . . . . . . . . . 5.3 Retrouver des Données . . . . . . . . . . . . . . . . . . 5.4 Mises à Jour . . . . . . . . . . . . . . . . . . . . . . . 5.5 Intégration de SQL à des Langages de Programmation 5.6 Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.1 Définition des Vues . . . . . . . . . . . . . . . . 5.6.2 Interrogation au Travers de Vues . . . . . . . . 5.6.3 Mise à Jour au Travers de Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 22 25 26 27 27 27 27 6 Théorie de la Normalisation 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Redondance . . . . . . . . . . . . . . . . . . . . . . . . 6.1.2 Décomposition . . . . . . . . . . . . . . . . . . . . . . 6.2 Formaliser le Concept de Redondance . . . . . . . . . . . . . 6.2.1 Dépendance Fonctionnelle . . . . . . . . . . . . . . . . 6.2.2 BCNF . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Propriétés des Décompositions . . . . . . . . . . . . . . . . . 6.3.1 Formaliser le Concept de Décomposition . . . . . . . . 6.3.2 Préservation des DF . . . . . . . . . . . . . . . . . . . 6.3.3 Préservation du Contenu . . . . . . . . . . . . . . . . . 6.4 Supprimer la Redondance en Préservant le Contenu et les DF 6.4.1 Le Défi Ultime . . . . . . . . . . . . . . . . . . . . . . 6.4.2 Non-Reconciliation de BCNF et Préservation des DF . 6.4.3 3NF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5 Formes Normales Plus Élevées . . . . . . . . . . . . . . . . . 6.5.1 4NF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.2 5NF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.3 Dépendance de Jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 28 28 28 29 29 31 31 31 32 32 33 33 33 34 36 36 36 37 3.5 II 3.4.5 Renommer . 3.4.6 Union . . . . 3.4.7 Différence . . 3.4.8 Division . . . 3.4.9 Intersection . Fermeture Transitive . . . . . . . . . . . . Gestion de Transactions 38 7 Théorie de la Concurrence 39 7.1 Exécutions Sérialisables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.1.1 Exemple d’Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.1.2 Read et Write dans un Contexte Pratique . . . . . . . . . . . . . . . . . . . . 39 iii SOMMAIRE 7.1.3 Succession de Deux Transactions Changer de Place . . . . . . . 7.1.4 Exécution Correcte de Deux Transactions Changer de Place . . 7.1.5 Exécution Inexacte de Deux Transactions Changer de Place . . 7.1.6 Exécution Correcte . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.7 Exécution Sérialisable . . . . . . . . . . . . . . . . . . . . . . . 7.1.8 Vérifier la Sérialisabilité . . . . . . . . . . . . . . . . . . . . . . Le Verrouillage Deux Phases (Two-Phase Locking ou 2PL) . . . . . . 7.2.1 Le Protocole . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.2 Programme Changer de Place Révisé . . . . . . . . . . . . . . . 7.2.3 Assurer la Règle L3: La Gestion de Verrous . . . . . . . . . . . 7.2.4 2PL Est Correct . . . . . . . . . . . . . . . . . . . . . . . . . . Le Verrou Mortel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Le Problème du Verrou Mortel . . . . . . . . . . . . . . . . . . 7.3.2 Première Solution: Détection (et “Guérison”) du Verrou Mortel 7.3.3 Deuxième Solution: Prévention du Verrou Mortel . . . . . . . . Le Verrouillage Deux Phases Strict (Strict 2PL) . . . . . . . . . . . . . 7.4.1 Annuler des Transactions et les Propriétés ACID . . . . . . . . 7.4.2 Non-Reconciliation de 2PL et Durabilité . . . . . . . . . . . . . 7.4.3 Strict 2PL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 7.3 7.4 8 Résistance aux Pannes et Reprise 8.1 Le Buffer . . . . . . . . . . . . . . . . . . 8.2 Principaux Types de Pannes . . . . . . . . 8.3 Résistance aux Pannes du Système . . . . 8.3.1 Undo/Redo . . . . . . . . . . . . . 8.3.2 Le Journal . . . . . . . . . . . . . 8.3.3 Procédure de Reprise . . . . . . . 8.3.4 Exemple . . . . . . . . . . . . . . . 8.3.5 Checkpointing . . . . . . . . . . . 8.3.6 Undo/No-Redo et Redo/No-Undo III . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 40 40 40 41 42 43 43 43 43 45 45 45 45 45 46 46 47 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 48 48 48 48 48 50 50 51 52 Exercices A Les A.1 A.2 A.3 A.4 A.5 Grandes Découvertes en Bases de Données Introduction . . . . . . . . . . . . . . . . . . . . . Les BD Hiérarchiques . . . . . . . . . . . . . . . Les BD de Type Réseau . . . . . . . . . . . . . . Les BD Relationnelles . . . . . . . . . . . . . . . Le Web, une BD? . . . . . . . . . . . . . . . . . . A.5.1 Un Manque de Structure . . . . . . . . . A.5.2 Traiter le Futur Web comme BD . . . . . 53 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 . 97 . 97 . 99 . 99 . 103 . 103 . 103 Préface L’exemple sur les vins et les abus est repris de [5]. L’exemple du chapitre 5 est repris de [4]. La difficulté des exercices de la partie III correspond au niveau de l’examen. Je tiens à remercier d’avance tous ceux qui me font connaı̂tre des corrections et des suggestions ([email protected]). iv Partie I Le Modèle Relationnel 1 Chapitre 1 Objectifs et Architectures des SGBD 1.1 Introduction Base de données (database) Ensemble de données structurées et évolutives, organisé pour être utilisé par des programmes multiples. 2 On peut faire une distinction entre: • Des données structurées. Par exemple, horaire, répertoire d’adresses. • Des données semi-structurées. Voir figure 1.1. Le caractère “*” signifie zéro élément ou plus, “+” un élément ou plus, et “?” zéro ou un élément. #PCDATA (Parsed Character DATA) signifie une chaı̂ne de caractères quelconque. • Des données non-structurées. Par exemple, BLOB. En général, la structure de données (semi-)structurées est décrite dans un schéma. Schéma (Schema or Scheme) Description au moyen d’un langage déterminé d’un ensemble de données particulier. 2 Système de gestion de bases de données SGBD (Database managament system DBMS) Logiciel pour gérer des bases de données. 2 Figure 1.2 montre les composants d’un environnement BD. 1.2 1.2.1 Objectifs Haut niveau d’abstraction, immunisé contre des changements aux niveaux inférieurs • Manipulation (description, mise à jour, requête) de données à l’aide d’un langage à haut niveau. Par exemple, le schéma d’un répertoire d’adresses. 2 3 CHAPITRE 1. OBJECTIFS ET ARCHITECTURES DES SGBD Schéma: DTD Occurrence: document XML <!ELEMENT EMAIL (date, from, to+, subject?, cc*, body, signature)> <!ELEMENT date (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT to (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT cc (#PCDATA)> <!ELEMENT body (#PCDATA)> <!ELEMENT signature (name, tel?, fax?)> <!ELEMENT name (#PCDATA)> <!ELEMENT tel (#PCDATA)> <!ELEMENT fax (#PCDATA)> <?XML version="1.0"?> <!-- *** Message *** --> <EMAIL> <date>Fri, 17 Sep 1999 13:30:11 +0200</date> <from>jef</from> <to>jean</to> <to>pierre</to> <body>blablabla</body> <signature> <name>Jef Wijsen</name> <tel>03 820 24 17</tel> </signature> </EMAIL> Figure 1.1: Des données semi-structurées en XML. P1 (Cobol) - P2 (Java) ↑ Langage d’accès unifié (SQL) &↓. SGBD l Gestionnaire de fichiers l Gestionnaire de disques l Base stockée sur disque P3 (C) % Figure 1.2: Les composants d’un environnement BD. 4 CHAPITRE 1. OBJECTIFS ET ARCHITECTURES DES SGBD CREATE TABLE REPERTOIRE ( NOM CHAR(20), PRENOM CHAR(10), RUE VARCHAR, NUMERO SMALLINT, CODE_POSTAL SMALLINT, VILLE CHAR(20), TEL CHAR(10) ) ; On n’indique pas la manière de stockage, triage,. . . SELECT FROM WHERE AND TEL REPERTOIRE NOM=‘Gardarin’ PRENOM=‘Georges’ ; On spécifie les données que l’on souhaite retrouver, sans décrire la manière de les retrouver. • Des changements aux niveaux inférieurs ne changent rien pour l’utilisateur (des humains ou des programmes). Par exemple, un article stocké peut être divisé en deux pour améliorer la performance des requêtes du type “Quel est le numéro de téléphone de X?”. C’est-à-dire, nom prénom rue numéro code postal ville tel peut être divisé en nom prénom tel rue numéro code postal et nom 1.2.2 prénom ville . Partageable, mais d’une manière transparente L’entrelacement des transactions peut aboutir à des incohérences. BEGIN-TRANSACTION /* Georges Gardarin change d’adresse */ UPDATE REPERTOIRE SET RUE = ‘Rue Neuf’ WHERE NOM=‘Gardarin’ AND PRENOM=‘Georges’ ; BEGIN-TRANSACTION SELECT RUE, NUMERO FROM REPERTOIRE WHERE NOM=‘Gardarin’ AND PRENOM=‘Georges’ ; END-TRANSACTION UPDATE REPERTOIRE SET NUMERO = 76 WHERE NOM=‘Gardarin’ AND PRENOM=‘Georges’ ; END-TRANSACTION 5 CHAPITRE 1. OBJECTIFS ET ARCHITECTURES DES SGBD La transaction de droite lit la nouvelle rue mais le vieux numéro. Isolation des transactions (Transaction isolation) Propriété d’une transaction consistant à ne pas laisser visible à l’extérieur des données modifiées avant la fin de la transaction. 2 1.2.3 Restauration après des pannes “techniques” Supposons une panne d’électricité après la mise à jour de la rue, mais avant la mise à jour du numéro. Atomicité des transactions (Transaction atomicity) Propriété d’une transaction à être totalement exécutée ou pas du tout. 1.2.4 2 Protection contre mauvais emploi et abus • Intégrité des données. CREATE TABLE REPERTOIRE ( ... PRIMARY KEY (NOM, PRENOM), CHECK ( CODE_POSTAL BETWEEN 1000 AND 9999 ) ) ; • Sécurité des données. GRANT SELECT ON REPERTOIRE TO Jean, Anne ; GRANT UPDATE ON REPERTOIRE TO Pierre ; Contrainte d’intégrité (Integrity constraint) Règle spécifiant les valeurs permises pour certaines données, éventuellement en fonction d’autres données, et permettant d’assurer une certaine cohérence de la base de données. 2 1.2.5 Assurer une bonne performance Optimisation de requêtes. Par exemple, “Donnez les numéros de téléphone attribués à plus d’une personne!”. Voici trois requêtes SQL qui encodent cette question de manière différente. SELECT A.TEL FROM REPERTOIRE A SELECT WHERE EXISTS FROM ( SELECT * WHERE FROM REPERTOIRE B AND WHERE B.TEL=A.TEL AND NOT (B.NOM=A.NOM AND B.PRENOM=A.PRENOM) ) ; A.TEL REPERTOIRE A, REPERTOIRE B B.TEL=A.TEL NOT (B.NOM=A.NOM AND B.PRENOM=A.PRENOM) ) ; SELECT FROM GROUP HAVING OR TEL REPERTOIRE BY TEL COUNT(NOM)>1 COUNT(PRENOM)>1 ; L’optimiseur traduit ces requêtes en un programme impératif performant. Ce programme sera le même pour les trois requêtes pourvu que l’optimiseur soit capable de découvrir leur équivalence. Complexité (N est le nombre d’enregistrements): O(N 2 ): Pour chaque enregistrement, regarder s’il y a un autre enregistrement avec le même numéro de téléphone. 6 CHAPITRE 1. OBJECTIFS ET ARCHITECTURES DES SGBD Analyseur Métabase % ↓ → Contrôleur & ↓ Optimiseur ↓ Exécuteur ↓ Base de données Analyse syntaxique Analyse sémantique Contrôle d’intégrité Contrôle d’autorisation Ordonnancement Optimisation Élaboration d’un plan Exécution du plan Méthodes d’accès Contrôle de concurrence Atomicité des transactions Figure 1.3: Architecture fontionnelle des SGBD. O(N log N ): Trier les enregistrements par TEL. Parcourir la liste triée pour retrouver les doublons. O(N ): S’il existe un index sur TEL, il suffit de parcourir l’index. 1.3 Architecture Fonctionnelle des SGBD Voir figure 1.3. Métabase (metabase) Dictionnaire de données organisé sous forme de base de données qui décrit les autres bases. 1.4 1.4.1 2 Architecture Opérationnelle des SGBD Architecture Centralisée Architecture centralisée (calculateur central + terminaux passifs). Bases de données 1.4.2 ↔ Applications Système d’exploitation %. ↔ Terminal passif ... Terminal passif Architecture Client-Serveur Architecture client-serveur (Client-server architecture) Architecture hiérarchisée mettant en jeu: • d’une part un serveur de données gérant les données partagées en exécutant le code du SGBD avec d’éventuelles procédures applicatives, • d’autre part des clients pouvant être organisés en différents niveaux supportant les applications et la présentation, 7 CHAPITRE 1. OBJECTIFS ET ARCHITECTURES DES SGBD • et dans laquelle les clients dialoguent avec les serveurs via un réseau en utilisant des requêtes de type question-réponse. 2 Client Application Outil de connectabilité Protocole Réseau Serveur SGBD+procédures stockés Outil de connectabilité Protocole Réseau ↔ BD ↓ sendrequest()≡SQL ↑ receiverequest() ↓ sendreply()≡tuples ↑ receivereply() Réseau local Le client et le serveur communiquent par des protocoles plus ou moins standardisés. L’intérêt des utilisateurs pour les systèmes ouverts basés sur les standards est évident. Ceci devrait en théorie permettre d’une part la portabilité des applications, d’autre part la possibilité de remplacer un composant d’un constructeur par celui d’un autre conforme aux standards. Il faut à tout prix éviter les solutions s’enfermant sur un constructeur ou des développements “maison” ignorant les standards. Il ne faut pas croire qu’il existe une dichotomie claire entre client et serveur. Dans les réseaux du futur, pratiquement tous les nœuds fonctionneront à la fois comme client et comme serveur. Médiateur (Middleware) Ensemble des services logiciels construits au-dessus d’un protocole de transport afin de permettre l’échange de requêtes et des réponses associées entre client et serveur de manière transparente. 2 La gestion de procédures stockées dans la base de données et exécutées par le serveur permet de réduire le trafic réseau. Procédure stockée (Stored procedure) Procédure dont la définition est stockée dans la base de données, exécutée par le serveur, qui permet de calculer des paramètres de sortie à partir de paramètres d’entrée et du contenu de la base de données. 2 1.5 Le Marché des SGBD SGBD Oracle DB2 de IBM SQL Server de Microsoft Sybase Informix % de marché en 1998 27,5 27,2 14,9 4,5 4,4 Chapitre 2 La Définition de Schémas 2.1 Introduction Le modèle relationnel, comme chaque modèle de description de données (data model), se compose de deux parties: 1. la structure (ce chapitre); 2. un langage pour exprimer: (a) des requêtes (stricto sensu): l’algèbre relationnelle, le calcul relationnel, SQL; (b) des mises à jour: surtout SQL; (c) des contraintes: surtout SQL. Chacun des trois langages apporte un point de vue particulier: SQL. Langage pour les utilisateurs finaux. Algèbre relationnelle. Langage opérationnel/procédural. Calcul relationnel. Langage logique/déclaratif. Le modèle relationnel est aujourd’hui la base de nombreux systèmes, et les architectures permettant d’accéder depuis une station de travail à des serveurs de données s’appuient en général sur lui. 2.2 Relation (ou Table) VINS Cru:VARCHAR Volnay Volnay Chablis Julienas Millesime:ANNÉE 1983 1979 1983 1986 Domaine (Domain) Ensemble de valeurs caractérisé par un nom. Qualite:CHAR A B A C 2 VARCHAR sont les chaı̂nes de caractères de longueurs variables. ANN ÉE={1950, 1951, . . . , 2050}. CHAR sont les caractères. 8 9 CHAPITRE 2. LA DÉFINITION DE SCHÉMAS Schéma de relation (Relation schema) Un ensemble d’attributs avec leurs domaines associés: {A1 : D1 , A2 : D2 , . . . , An : Dn } , • A1 , . . . , An sont des attributs distincts; • D1 , . . . , Dn sont des domaines (pas nécessairement distincts). 2 Par exemple, {Cru:VARCHAR, Millesime:ANNÉE, Qualite:CHAR}. Cru, Millesime et Qualite sont des attributs. Tuple (Tuple) Un tuple pour le schéma précédent est un ensemble {A1 : v1 , A2 : v2 , . . . , An : vn } où chaque vi est une valeur de Di . 2 Par exemple, {Cru:Volnay, Millesime:1983, Qualite:A}. Notons: • Un tuple est une fonction au sens mathématique: un tuple pour le schéma {A 1 : D1 , A2 : D2 , . . . , An : Dn } est une fonction t avec domaine {A1 , A2 , . . . , An } telle que t(A1 ) ∈ D1 , t(A2 ) ∈ D2 , . . . , t(An ) ∈ Dn . • Si X ⊆ {A1 , A2 , . . . , An }, alors on définit: t[X] := {A : t(A) | A ∈ X} , la projection de t sur les attributs de X. Par exemple, si t signifie le tuple {Cru:Volnay, Millesime:1983, Qualite:A} alors t[{Cru, Qualite}] signifie l’ensemble {Cru:Volnay, Qualite:A}. Notons que ce dernier ensemble est, lui aussi, un tuple. Relation (Relation) Un schéma de relation plus un ensemble de tuples. 2 Un ensemble n’ayant pas d’éléments en double, il ne peut exister deux fois le même tuple dans une relation. Clé (Key) Contrainte d’intégrité portant sur une relation, consistant à imposer qu’il ne puisse exister deux tuples ayant même valeur pour un groupe d’attributs (la clé). 2 La connaissance des valeurs des attributs clés permet d’identifier un tuple unique dans la relation considérée. Par exemple, {Cru, Millesime} peut constituer une clé pour la relation VINS. 2.3 Contraintes de Références ABUS Nom:VARCHAR Jean Jean Pierre Pierre Cru:VARCHAR Volnay Volnay Volnay Julienas Mill:ANNÉE 1983 1979 1979 1986 CHAPITRE 2. LA DÉFINITION DE SCHÉMAS 10 Les valeurs de {Cru, Mill} dans la relation ABUS doivent identifier des tuples dans la relation VINS. Par exemple, on ne peut pas insérer le tuple {Nom:Jean, Cru:Volnay, Mill:1986} dans la relation ABUS, parce que {Cru:Volnay, Mill:1986} n’identifie aucun tuple de la relation VINS. Clé étrangère (Foreign key) Contrainte d’intégrité portant sur une relation R1 , consistant à imposer que la valeur d’un groupe d’attributs apparaisse comme valeur de clé dans une autre relation R2 . 2 2.4 Création de Tables en SQL CREATE DOMAIN ANNEE SMALLINT CHECK ( VALUE BETWEEN 1050 AND 2050 ) ; CREATE TABLE VINS ( CRU MILLESIME QUALITE PRIMARY KEY VARCHAR, ANNEE, CHAR, ( CRU, MILLESIME ) ) ; CREATE TABLE ABUS ( NOM VARCHAR, CRU VARCHAR, MILL ANNEE, PRIMARY KEY ( NOM, CRU, MILLESIME ), FOREIGN KEY ( CRU, MILL ) REFERENCES VINS ) ; Chapitre 3 L’Algèbre Relationnelle SPJRUD 3.1 Opérations de Base Il y a six opérations de base: S de Sélection. Pour retenir d’une table les tuples qui satisfont une condition donnée. P de Projection. Pour retenir d’une table certaines “colonnes”, en supprimant les autres. J de Jointure. Pour joindre deux tables dont les schémas peuvent être différents. R de Renommer. Pour donner un autre nom à une colonne. U de Union. Pour calculer l’union de deux tables avec le même schéma. D de Différence. Pour calculer la différence de deux tables avec le même schéma. Dans les exemples, R et S sont les relations les suivantes: R 3.1.1 A 1 2 3 B 2 2 3 C 3 3 3 S et B 2 2 2 C 3 3 2 D 4 5 4 Sélection ou Restriction Sélection (Selection) Opération sur une relation R produisant une relation de même schéma, mais comportant les seuls tuples qui vérifient la condition précisée en argument. Notation: σA=c (R) ou σA=B (R). 2 σB=2 (R) σB=2 (R) σA=B (R) 3.1.2 A 1 2 B 2 2 C 3 3 σA=B (R) = = {t ∈ R | t(B) = 2} {t ∈ R | t(A) = t(B)} et A 2 3 B 2 3 C 3 3 Projection Projection (Projection) Opération sur une relation R consistant à composer une relation en enlevant à la relation initiale 11 CHAPITRE 3. L’ALGÈBRE RELATIONNELLE SPJRUD 12 tous les attributs non mentionnés en opérandes (aussi bien au niveau du schéma que des tuples) et en éliminant les tuples en double qui sont conservés une seule fois. Notation: π hattributsi (R). 2 π{B,C} (R) B 2 3 C 3 3 On écrit souvent BC au lieu de {B, C}. πBC (R) 3.1.3 {t[BC] | t ∈ R} = Jointure ou Jointure Naturelle Jointure (Join) Opération consistant à rapprocher les tuples de deux relations R1 et R2 afin de former une troisième relation dont les attributs sont l’union des attributs de R1 et R2 , et dont les tuples sont obtenus en composant un tuple de R1 et un tuple de R2 ayant mêmes valeurs pour les attributs de même nom. Notation: R1 1 R2 . 2 R1S A 1 1 2 2 B 2 2 2 2 C 3 3 3 3 D 4 5 4 5 R1S = {t | t[ABC] ∈ R ∧ t[BCD] ∈ S} Si R1 et R2 n’ont pas d’attributs en commun, l’effet de la jointure est un produit cartésien. 3.1.4 Renommer Renommer (Rename) Opération sur une relation R consistant à changer le nom d’un attribut. Notation: ρ A→B (R). ρC→D (R) 3.1.5 A 1 2 3 B 2 2 3 2 D 3 3 3 Union Union (Union) Opération portant sur deux relations de même schéma R1 et R2 , consistant à construire une relation de même schéma ayant pour tuples ceux appartenant à R1 ou R2 ou aux deux relations. Notation: R1 ∪ R 2 . 2 3.1.6 Différence Différence (Difference) CHAPITRE 3. L’ALGÈBRE RELATIONNELLE SPJRUD 13 Opération portant sur deux relations de même schéma R1 et R2 , consistant à construire une relation de même schéma ayant pour tuples ceux appartenant à R1 et n’appartenant pas à R2 . Notation: R1 − R 2 . 2 3.2 Opérations Dérivées 3.2.1 Division Division (Division) Opération consistant à construire le quotient de la relation D(A1 , . . . , Ap , Ap+1 , . . . , An ) par la relation d(Ap+1 , . . . , An ) comme la relation Q(A1 , . . . , Ap ) dont les tuples sont ceux qui concaténés à tout tuple de d donnent un tuple de D. Notation: D ÷ d. 2 A 1 1 1 2 2 3 3.2.2 B 1 1 1 2 2 3 C 1 3 5 1 3 5 D 2 4 6 ÷ 2 4 6 C 1 3 5 D 2 = 4 6 A 1 B 1 Intersection Intersection (Intersection) Opération portant sur deux relations de même schéma R1 et R2 , consistant à construire une relation de même schéma ayant pour tuples ceux appartenant à la fois à R 1 et R2 . Notation: R1 ∩R2 . 2 3.3 Exemple “Qui a bu un vin de la qualité A?” est exprimé par: πNom ((ρMillesime→Mill (σQualite=A (VINS))) 1 ABUS) . “Qui a bu tous les vins de la qualité A?”: (ρMill→Millesime (ABUS)) ÷ (πCru,Millesime (σQualite=A (VINS))) . 3.4 3.4.1 Traitement Plus Formel Tuple et Relation Pour simplifier la notation, on suppose un seul domaine dom et un ensemble att d’attributs. Les éléments de dom sont appelés des constantes. Tuple. Un tuple sur U ⊆ att est une fonction t : U → dom. Projeter un tuple sur certains attributs. Soit X ⊆ U ⊆ att et t un tuple sur U ; on définit t[X] := {(A, t(A)) | A ∈ X}, un tuple sur X. Relation. Une relation sur U ⊆ att est un ensemble fini de tuples sur U . Soit R une relation sur U ; on définit sorte(R) := U . CHAPITRE 3. L’ALGÈBRE RELATIONNELLE SPJRUD 3.4.2 14 Sélection Syntaxe. σA=a (R) ou σA=B (R), où A, B ∈ sorte(R) et a ∈ dom. Sémantique. Schéma. sorte(σA=a (R)) = sorte(R) et sorte(σA=B (R)) = sorte(R). Contenu. σA=a (R) = {t ∈ R | t(A) = a} et σA=B (R) = {t ∈ R | t(A) = t(B)}. 3.4.3 Projection Syntaxe. πX (R), où X ⊆ sorte(R). Sémantique. Schéma. sorte(πX (R)) = X. Contenu. πX (R) = {t[X] | t ∈ R}. 3.4.4 Jointure Syntaxe. R 1 S. Sémantique. Schéma. sorte(R 1 S) = sorte(R) ∪ sorte(S). Contenu. R 1 S = {t | t[sorte(R)] ∈ R ∧ t[sorte(S)] ∈ S}. 3.4.5 Renommer inj Syntaxe. ρf (R), où f : sorte(R) −→ att. f peut être décrit en spécifiant l’ensemble des paires (A, f (A)) pour lesquelles f (A) 6= A, de manière A1 A2 . . . An → B1 B2 . . . Bn indiquant f (Ai ) = Bi . Sémantique. Schéma. sorte(ρf (R)) = {f (A) | A ∈ sorte(R)}. Contenu. ρf (R) = {t | ∃s ∈ R, ∀A ∈ sorte(R) : t(f (A)) = s(A)}. 3.4.6 Union Syntaxe. R ∪ S, où sorte(R) = sorte(S). Sémantique. Schéma. sorte(R ∪ S) = sorte(R) = sorte(S). Contenu. R ∪ S = {t | t ∈ R ∨ t ∈ S}. 3.4.7 Différence Syntaxe. R − S, où sorte(R) = sorte(S). Sémantique. Schéma. sorte(R − S) = sorte(R) = sorte(S). Contenu. R − S = {t | t ∈ R ∧ t 6∈ S}. CHAPITRE 3. L’ALGÈBRE RELATIONNELLE SPJRUD 3.4.8 15 Division Syntaxe. R ÷ S, où sorte(S) ⊆ sorte(R). Sémantique. Schéma. sorte(R ÷ S) = sorte(R) − sorte(S). Contenu. R ÷ S = {t | t ∈ πsorte(R)−sorte(S) (R) ∧ {t} 1 S ⊆ R}. 3.4.9 Intersection Syntaxe. R ∩ S, où sorte(R) = sorte(S). Sémantique. Schéma. sorte(R ∩ S) = sorte(R) = sorte(S). Contenu. R ∩ S = {t | t ∈ R ∧ t ∈ S}. 3.5 Fermeture Transitive Fermeture transitive (Transitive closure) Opération sur une relation R à deux attributs (A1 , A2 ) de même domaine consistant à ajouter à R tous les tuples qui se déduisent successivement par transitivité, c’est-à-dire que si l’on a des tuples ha, bi et hb, ci, on ajoute ha, ci. 2 On peut prouver que il est impossible de constituer la fermeture transitive à l’aide de l’algèbre. Par exemple, Métro Ligne 4 4 4 1 1 1 1 Gare St.-Germain Odeon St.-Michel Chatelet Louvres Palais-Royal Tuileries GareSuivante Odeon St.-Michel Chatelet Louvres Palais-Royal Tuileries Concorde “Quelles sont les gares qu’on peut atteindre à partir de Odeon?” ne peut pas être exprimé à l’aide de l’algèbre. Chapitre 4 Le Calcul Relationnel 4.1 Introduction 4.1.1 Le Principe Une requête est une expression: {x1 , . . . , xn | ϕ(x1 , . . . , xn )} , dans laquelle ϕ est une formule en logique du premier ordre avec égalité, mais sans fonctions. Les prédicats qui apparaissent en ϕ dénotent des relations de la base de données. La liste x 1 , . . . , xn de variables contient toutes (et seules) les variables avec une occurrence libre en ϕ. La réponse se compose de tout tuple ha1 , . . . , an i tel que ϕ(a1 , . . . , an ) est Vrai. Illustrons cela à l’aide de deux exemples: • La question: “Donnez tous les vins de la qualité A!” est exprimée par: {x, y | VINS(x, y, A)} . La rangée hVolnay, 1983i fait partie de la réponse ssi VINS(Volnay, 1983, A) est Vrai, c’està-dire, si hVolnay, 1983, Ai est un enregistrement dans la relation VINS. Noter: on suppose que l’ordre des attributs est fixe, ce qui permet écrire hVolnay, 1983, Ai au lieu de {Cru : Volnay, Millesime : 1983, Qualite : A}. • La question: “Qui a bu un vin de la qualité A?” est exprimée par: {x | ∃y, z(ABUS(x, y, z) ∧ VINS(y, z, A))} . La rangée hJeani fait partie de la réponse ssi ∃y, z(ABUS(Jean, y, z) ∧ VINS(y, z, A)) est Vrai. 4.1.2 Le Problème Ensuite considérons la question: “Donnez les vins qui ne sont pas de la qualité A!” 16 CHAPITRE 4. LE CALCUL RELATIONNEL 17 et la requête: {x, y | ¬VINS(x, y, A)} . Certes, tout vin qui n’est pas de la qualité A rendra la formule Vrai. Prenons, par exemple, le vin hVolnay, 1997i de la qualité B. La formule ¬VINS(Volnay, 1997, A) est Vrai, parce que VINS(Volnay, 1997, A) est Faux. Il y a cependant un problème, comme le montre le paragraphe suivant. Prenons le tuple hJupiler, 1999i. . . La formule ¬VINS(Jupiler, 1999, A) est Vrai, parce que VINS(Jupiler, 1999, A) est Faux. Donc, hJupiler, 1999i rend la formule Vrai. . . Vu que les tuples qui rendent la formule Vrai ne sont pas nécessairement restreints par les valeurs qui apparaissent dans la base de données, il existe un nombre infini de tuples qui rendront la formule Vrai (pourvu qu’on ne limite pas les constantes “valables”): hChimay, 2000i, hBicyclette, 1999i,. . . Or, rappelons qu’une relation est, par définition, un ensemble fini . Comment résoudre ce problème? Il suffit d’assurer que seuls des vins peuvent apparaı̂tre dans le résultat: {x, y | ¬VINS(x, y, A) ∧ ∃z(VINS(x, y, z))} . Maintenant, le tuple hJupiler, 1999i rend la formule Faux, parce que ∃z(VINS(Jupiler, 1999, z)) est Faux. Finalement, considérons la question: “Qui a bu tous les vins de la qualité A?” et la requête: {x | ∀y, z(VINS(y, z, A) → ABUS(x, y, z))} . Le même problème se produit: s’il n’y a aucun vin de la qualité A, tout tuple hai rendra la formule Vrai; par exemple, hSupermani et hPokémoni. Cette “requête dangereuse” (unsafe query) peut être réparée comme suit: {x | ∃v, w(ABUS(x, v, w)) ∧ ∀y, z(VINS(y, z, A) → ABUS(x, y, z))} . 4.2 4.2.1 Traitement Plus Formel Syntaxe Définissons la notion de requête en calcul relationnel. Atomes. Il y a deux types d’atomes: • R(e1 , . . . , en ) où R est une relation avec n attributs et chaque ei est une variable ou une constante. On suppose que l’ordre des attributs est fixe. • x = a ou x = y. Les symboles a, b, c dénotent désormais des constantes; les symboles x, y, z des variables. Formules. Les formules sont construites comme suit: • Tout atome est une formule. • Si ϕ, ϕ1 , ϕ2 sont des formules, alors ϕ1 ∧ ϕ2 , ϕ1 ∨ ϕ2 , ϕ1 → ϕ2 , ¬ϕ, ∀x(ϕ) et ∃x(ϕ) sont aussi des formules. L’occurrence d’une variable x dans une formule est liée si elle se trouve entre “∀x(” et la parenthèse “)” correspondante, ou entre “∃x(” et la parenthèse “)” correspondante; sinon on dit que l’occurrence est libre. Noter: dans ce contexte, le mot “occurrence” signifie: place occupée par un symbole dans une formule. Prenons la formule: ∃x(R(x, y) ∧ R(y, x)) ∨ R(x, a) . CHAPITRE 4. LE CALCUL RELATIONNEL 18 Les deux premières occurrences de x dans cette formule sont liées. La dernière occurrence de x est libre. Les deux occurrences de y sont libres. On peut toujours renommer les variables de manière qu’aucune variable ait à la fois une occurrence liée et une occurrence libre. Par exemple, la formule précédente est équivalente à: ∃z(R(z, y) ∧ R(y, z)) ∨ R(x, a) . Requête. Une requête est une expression: {x1 , . . . , xn | ϕ(x1 , . . . , xn )} , où x1 , . . . , xn sont toutes les variables qui ont une occurrence libre dans la formule ϕ. 4.2.2 Sémantique Par ϕ(a1 , . . . , an ), on dénote la formule qu’on obtient en remplaçant dans la formule ϕ(x 1 , . . . , xn ) toute occurrence libre de xi par ai . Par exemple, si ϕ(x, y) dénote: ∃z(R(z, y) ∧ R(y, z)) ∨ R(x, a) , alors ϕ(a, b) dénote: ∃z(R(z, b) ∧ R(b, z)) ∨ R(a, a) . Réponse. La réponse à la requête: {x1 , . . . , xn | ϕ(x1 , . . . , xn )} n fois z }| { est l’ensemble contenant tout tuple ha1 , . . . , an i ∈ dom × dom × . . . × dom tel que ϕ(a1 , . . . , an ) est Vrai pourvu que cet ensemble de tuples soit fini ; sinon la réponse est indéfinie. Rappelons que dom est l’ensemble avec toutes les constantes qui peuvent apparaı̂tre dans la base de données. Cet ensemble peut être infini. Voir plus tard pour une discussion en ce qui concerne la condition exigeant que la réponse soit finie. On définit: • R(a1 , . . . , an ) est Vrai si ha1 , . . . , an i est un tuple de R. • a = a est Vrai; a = b est Faux. • ϕ1 ∧ ϕ2 est Vrai si ϕ1 est Vrai et ϕ2 est Vrai. • ϕ1 ∨ ϕ2 est Vrai si ϕ1 est Vrai ou ϕ2 est Vrai. • ϕ1 → ϕ2 est Vrai si ϕ1 est Faux ou ϕ2 est Vrai. • ¬ϕ est Vrai si ϕ est Faux. • ∀x(ϕ(x)) est Vrai si ϕ(a) est Vrai pour toute constante a ∈ dom. • ∃x(ϕ(x)) est Vrai s’il existe une constante a ∈ dom telle que ϕ(a) est Vrai. Une formule est Faux si elle n’est pas Vrai. 19 CHAPITRE 4. LE CALCUL RELATIONNEL 4.3 Indépendance du domaine Domaine de discours (Domain of discourse) Ensemble de constantes sur lequel une requête prend valeur par interprétation des variables comme des constantes quelconques. Le domaine de discours est dénoté par dom. 2 Domaine actif (Active domain) Pour une requête sur une base de données, le domaine actif est l’ensemble de toutes les constantes qui apparaissent dans la requête ou la base de données. Le domaine actif est toujours un sousensemble de dom. 2 Requête dépendante du domaine (Domain dependent query) Une requête dont la réponse peut varier selon qu’elle est interprétée par rapport à dom ou par rapport au domaine actif. 2 Voici trois exemples de requêtes qui dépendent du domaine. 1. On démontre que la requête {x | ϕ1 (x)} avec ϕ1 (x) = R(a) ∨ R(b) ∨ R(x) dépend du domaine. Soit R la relation suivante: R A a . c Notez: puisque R(a) est Vrai, ϕ1 (d) est Vrai pour toute constante d. Cette requête dépend donc du domaine: • Le domaine actif est {a, b, c}. L’interprétation par rapport au domaine actif donne la réponse {hai, hbi, hci}. • Soit d une constante telle que d 6= a, d 6= b et d 6= c. L’interprétation par rapport à {a, b, c, d} donne la réponse {hai, hbi, hci, hdi}, qui est bien différente de la réponse obtenue pour le domaine actif. 2. La requête {x | ϕ2 (x)} avec ϕ2 = ¬R(x) dépend du domaine. Soit R la relation suivante: R A a . Le domaine actif est {a}. L’interprétation par rapport au domaine actif donne la réponse vide. L’interprétation par rapport à {a, d}, d 6= a, donne la réponse {hdi}. 3. La requête {x | ϕ3 (x)} avec ϕ3 = ∀y(R(x, y)) dépend du domaine. Soit R la relation suivante: R A a a B a b . Le domaine actif est {a, b}. L’interprétation par rapport au domaine actif donne la réponse {hai}. L’interprétation par rapport à {a, b, d} donne la réponse vide, parce que R(a, d) est Faux. Pour une requête dépendante du domaine, les réponses ne dépendent donc pas seulement du contenu de la base de données, mais aussi des constantes dans dom qui ne font pas partie du domaine actif. Cet effet est non souhaité; nous considérons désormais que les requêtes dépendantes du domaine sont erronées. 20 CHAPITRE 4. LE CALCUL RELATIONNEL Contrairement à ce que l’on pouvait penser, une interprétation par rapport au domaine actif n’est pas toujours naturelle. Pour la table R suivante, on considère la requête “Quel modèle existe en chaque couleur ?”; la réponse devrait être {hRenault Espacei}. R Modele Renault Clio Renault Espace Renault Espace Couleur bleu bleu rouge La requête suivante dépend du domaine et est donc erronée : {x | ∃y(R(x, y) ∧ ∀z(R(x, z)))} Même une interprétation par rapport au domaine actif ne donne pas la bonne réponse : puisque hRenault Espace, Renault Clioi n’est pas un tuple de R et “Renault Clio” est bien dans le domaine actif, la sous-formule ∀z(R(Renault Espace, z)) est Faux. La bonne requête est : {x | ∃y(R(x, y) ∧ ∀u∀z(R(u, z) → R(x, z)))} , ce qui est équivalent à : {x | ∃y(R(x, y) ∧ ¬∃u∃z(R(u, z) ∧ ¬R(x, z)))} . 4.4 Expressivité On peut prouver que l’algèbre relationnelle et la partie du calcul relationnel qui ne comprend que les requêtes qui sont indépendantes du domaine, ont la même puissance. Chapitre 5 SQL 5.1 S La Base de Données S# S1 S2 S3 S4 S5 SNAME Smith Jones Blake Clark Adams STATUS 20 10 30 20 30 SP 5.2 P CITY London Paris Paris London Athens S# S1 S1 S1 S1 S1 S1 S2 S2 S3 S4 S4 S4 P# P1 P2 P3 P4 P5 P6 P# P1 P2 P3 P4 P5 P6 P1 P2 P2 P2 P4 P5 PNAME Nut Bolt Screw Screw Cam Cog COLOR Red Green Blue Red Blue Red QTY 300 200 400 200 100 100 300 400 200 200 300 400 Création de Domaines et de Tables CREATE DOMAIN COLOR CHAR(6) DEFAULT ‘???’ CONSTRAINT VALID_COLORS CHECK ( VALUE IN ( ‘Red’, ‘Yellow’, ‘Blue’, ‘Green’, ‘???’ ) ) ; CREATE DOMAIN S# ... CREATE DOMAIN QTY CHAR(5) ; NUMERIC(9) ; CREATE TABLE S ( S# S#, SNAME NAME, STATUS STATUS, CITY CITY, PRIMARY KEY ( S# ) ) ; 21 WEIGHT 12 17 17 14 12 19 CITY London Paris Rome London Paris London CHAPITRE 5. SQL 22 CREATE TABLE P ( P# P#, PNAME NAME, COLOR COLOR, WEIGHT WEIGHT, CITY CITY, PRIMARY KEY ( P# ) ) ; CREATE TABLE SP ( S# S# NOT NULL, P# P# NOT NULL, QTY QTY NOT NULL, PRIMARY KEY ( S#, P# ), FOREIGN KEY ( S# ) REFERENCES S ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY ( P# ) REFERENCES P ON DELETE CASCADE ON UPDATE CASCADE, CHECK ( QTY > 0 AND QTY < 5001 ) ) ; 5.3 Retrouver des Données Get color and city for “nonParis” parts with weight greater than 10. SELECT FROM WHERE AND P.COLOR, P.CITY P P.CITY <> ‘Paris’ P.WEIGHT > 10 ; SELECT FROM WHERE AND DISTINCT P.COLOR, P.CITY P P.CITY <> ‘Paris’ P.WEIGHT > 10 ; SELECT FROM WHERE AND ORDER DISTINCT P.COLOR, P.CITY P P.CITY <> ‘Paris’ P.WEIGHT > 10 BY CITY DESC ; For all parts, get the part number and the weight of that part in grams. que le poids est donné en livre (=454 g). SELECT P.P#, P.WEIGHT * 454 AS GMWT FROM P ; Get full details of all suppliers. SELECT * FROM S ; SELECT S.* FROM S ; Supposons 23 CHAPITRE 5. SQL Get all combinations of supplier number and part number such that the supplier and part in question are colocated. SELECT S.S#, P.P# FROM S, P WHERE S.CITY = P.CITY ; Sémantique. Premièrement, “FROM S, P” donne le produit cartésien de S et P. S.S# S1 S1 S1 S1 S1 S1 S2 S2 S2 S2 S2 S2 S.SNAME Smith Smith Smith Smith Smith Smith Jones Jones Jones Jones Jones Jones S.STATUS 20 20 20 20 20 20 10 10 10 10 10 10 S.CITY London London London London London London Paris Paris Paris Paris Paris Paris S5 Adams 30 Athens P.P# P1 P2 P3 P4 P5 P6 P1 P2 P3 P4 P5 P6 ... P6 P.PNAME Nut Bolt Screw Screw Cam Cog Nut Bolt Screw Screw Cam Cog P.COLOR Red Green Blue Red Blue Red Red Green Blue Red Blue Red P.WEIGHT 12 17 17 14 12 19 12 17 17 14 12 19 P.CITY London Paris Rome London Paris London London Paris Rome London Paris London Cog Red 19 London Deuxièmement, “WHERE S.CITY = P.CITY” sélectionne les tuples satisfaisant la condition. S.S# S1 S1 S1 S2 S2 S.SNAME Smith Smith Smith Jones Jones S.STATUS 20 20 20 10 10 S.CITY London London London Paris Paris P.P# P1 P4 P6 P2 P5 ... P.PNAME Nut Screw Cog Bolt Cam P.COLOR Red Red Red Green Blue P.WEIGHT 12 14 19 17 12 P.CITY London London London Paris Paris Finalement, “SELECT S.S#, P.P#” sélectionne les colonnes mentionnées. S# S1 S1 S1 S2 S2 P# P1 P4 P6 P2 P5 ... Get all pairs of city names such that a supplier located in the first city supplies a part stored in the second city. SELECT FROM WHERE AND S.CITY, P.CITY S, SP, P S.S# = SP.S# SP.P# = P.P# ; Get the total number of suppliers. SELECT COUNT(*) AS N FROM S ; Get the maximum and the minimum quantity for part P2. SELECT MAX (SP.QTY ) AS MAXQ, MIN ( SP.QTY ) AS MINQ FROM SP WHERE SP.P# = ‘P2’ ; 24 CHAPITRE 5. SQL For each part supplied, get the part number and the total shipment quantity. SELECT SP.P#, SUM ( SP.QTY ) AS TOTQTY FROM SP GROUP BY SP.P# ; Sémantique. Premièrement, imaginons que “FROM SP GROUP BY SP.P#” donne la “table” suivante. {S#} {S1, S2} {S1, S2, S3, S4} {S1} {S1, S4} {S1, S4} {S1} P# P1 P2 P3 P4 P5 P6 {QTY} {300, 300} {200, 400, 200, 200} {400} {200, 300} {100, 400} {100} Finalement, “SELECT SP.P#, SUM ( SP.QTY ) AS TOTQTY” donne: P# P1 P2 P3 P4 P5 P6 TOTQTY 600 1000 400 500 500 100 SELECT P.P#, ( SELECT SUM ( SP.QTY) FROM SP WHERE SP.P# = P.P# ) AS TOTQTY FROM P ; Get part number for all parts supplied by more than one supplier. SELECT FROM GROUP HAVING SP.P# SP BY SP.P# COUNT ( SP.S# ) > 1 ; Get supplier names for suppliers who supply part P2. SELECT FROM WHERE ( DISTINCT S.SNAME S S# IN SELECT SP.S# FROM SP WHERE SP.P# = ‘P2’ ) ; SELECT FROM WHERE ( DISTINCT S.SNAME S EXISTS SELECT * FROM SP WHERE SP.P# = ‘P2’ AND SP.S# = S.S# ) ; SELECT FROM WHERE AND DISTINCT S.SNAME S, SP S.S# = SP.S# SP.P# = ‘P2’ ; CHAPITRE 5. SQL 25 Get supplier numbers for suppliers with status less than the current maximum status in the S table. SELECT FROM WHERE ( S.S# S S.STATUS < SELECT MAX ( S.STATUS ) FROM S ) ; Get supplier names for suppliers who do not supply part P2. SELECT FROM WHERE ( DISTINCT S.SNAME S S# NOT IN SELECT SP.S# FROM SP WHERE SP.P# = ‘P2’) ; SELECT FROM WHERE ( DISTINCT S.SNAME S NOT EXISTS SELECT * FROM SP WHERE SP.P# = ‘P2’ AND SP.S# = S.S# ) ; Get supplier names for suppliers who supply all red parts. SELECT FROM WHERE ( S.SNAME S NOT EXISTS SELECT * FROM P WHERE P.COLOR = ‘Red’ AND NOT EXISTS ( SELECT * FROM SP WHERE SP.S# = S.S# AND SP.P# = P.P# ) ) ; Get part numbers for parts that either weigh more than 16 pounds or are supplied by supplier S2, or both. SELECT FROM WHERE UNION SELECT FROM WHERE P.P# P P.WEIGHT > 16 5.4 Mises à Jour SP.P# SP SP.S# = ‘S2’ ; Single-row INSERT. 26 CHAPITRE 5. SQL INSERT INTO P ( P#, PNAME, COLOR, WEIGHT, CITY ) VALUES (‘P8’, ‘Sprocket’, ‘Pink’, 14, ‘Nice’ ) ; Multi-row INSERT. INSERT INTO TEMP ( SELECT FROM WHERE S#, CITY ) S.S#, S.CITY S S.STATUS > 15 ; Multi-row UPDATE. UPDATE P SET COLOR = ‘Yellow’, WEIGHT = P.WEIGHT + 5 WHERE P.CITY = ‘Paris’ ; Multi-row UPDATE. UPDATE P SET CITY = ( SELECT FROM WHERE WHERE P.COLOR = ‘Red’ S.CITY S S.S# = ‘S5’ ) ; Multi-row DELETE. DELETE FROM SP WHERE ‘London’ = ( SELECT S.CITY FROM S WHERE S.S# = SP.S# ) ; 5.5 Intégration de SQL à des Langages de Programmation EXEC SQL DECLARE X CURSOR FOR SELECT S.S#, S.SNAME, S.STATUS FROM S WHERE S.CITY = :Y ; EXEC SQL OPEN X ; /* execute the query EXEC SQL FETCH X INTO :V1, :V2, :V3 ; /* fetch the first row (if any) WHILE a row is fetched LOOP ... /* process the row EXEC SQL FETCH X INTO :V1, :V2, :V3 ; /* fetch the next row (if any) END-LOOP EXEC SQL CLOSE X ; /* deactivate cursor X */ */ */ */ */ CHAPITRE 5. SQL 5.6 5.6.1 27 Vues Définition des Vues Vue (View) Une ou plusieurs tables virtuelles dont le schéma et le contenu sont dérivé de la base réelle par un ensemble de questions. 2 CREATE VIEW REDPARTS ( P#, PNAME, WT, CITY ) AS SELECT P.P#, P.PNAME, P.WEIGHT, P.CITY FROM P WHERE P.COLOR = ‘Red’ ; CREATE VIEW PQ AS SELECT SP.P#, SUM ( SP.QTY ) AS TOTQTY FROM SP GROUP BY SP.P# ; 5.6.2 Interrogation au Travers de Vues Get red parts that weigh more than 15 pounds. SELECT P# FROM REDPARTS WHERE WT > 15 ; ⇔ SELECT FROM WHERE AND 5.6.3 P# P WEIGHT > 15 COLOR = ‘Red’ ; Mise à Jour au Travers de Vues UPDATE REDPARTS SET WT = 454 * WT ; ⇔ UPDATE P SET WEIGHT = 454 * WEIGHT WHERE COLOR = ‘Red’ ; UPDATE PQ SET TOTQTY = TOTQTY + 1 ; ⇔ UPDATE SP SET ??? Chapitre 6 Théorie de la Normalisation Critics of normalization usually miss this point; they claim (quite rightly) that the ideas are all basically common sense, but they typically do not realize that it is a significant achievement to state what “common sense” means in a precise and formal way. [3, page 309] 6.1 6.1.1 Introduction Redondance Voici une relation qui sert à enregistrer les départements et les facultés des étudiants. Étudiant Jean Pierre Anne Eric Département Chimie Chimie Marketing Biologie Faculté Sciences Sciences Économie Sciences Supposons qu’un département appartient à une seule faculté. Étudiant Jean Pierre Anne Eric Département Chimie Chimie Marketing Biologie Faculté Sciences ? Économie Sciences La valeur qui se cache derrière le point d’interrogation est prévisible et donc redondante. Trois problèmes se soulèvent : Anomalies de mise à jour. Par exemple, le département de Chimie change de faculté. Anomalies d’insertion Par exemple, insérer le fait que le département de Physique appartient à la faculté des Sciences. Anomalies de suppression Par exemple, supprimer le tuple concernant Anne. 6.1.2 Décomposition Voir figure 6.1. Quelle est la meilleure décomposition et pourquoi ? Peut-on construire une théorie pour formaliser ce choix ? 28 29 CHAPITRE 6. THÉORIE DE LA NORMALISATION Étudiant Jean Pierre Anne Eric Département Chimie Chimie Marketing Biologie . Faculté Sciences Sciences Économie Sciences ↓ & Deuxième décomposition : Première décomposition : Étudiant Jean Pierre Anne Eric Département Chimie Chimie Marketing Biologie Étudiant Jean Pierre Anne Eric Faculté Sciences Sciences Économie Sciences Étudiant Jean Pierre Anne Eric Troisième décomposition : Département Chimie Chimie Marketing Biologie Département Chimie Marketing Biologie Faculté Sciences Économie Sciences Étudiant Jean Pierre Anne Eric Faculté Sciences Sciences Économie Sciences Département Chimie Marketing Biologie Faculté Sciences Économie Sciences Figure 6.1: Trois décompositions du schéma original. 6.2 6.2.1 Formaliser le Concept de Redondance Dépendance Fonctionnelle Dépendance Fonctionnelle (Functional Dependency) Soit U un ensemble d’attributs. Syntaxe : Une dépendance fonctionnelle (DF) sur U est une expression X → Y avec X, Y ⊆ U . Sémantique : Une relation R sur U satisfait la DF X → Y , dénoté par R |= X → Y , ssi pour tout tuple t1 , t2 ∈ R, si t1 [X] = t2 [X] alors t1 [Y ] = t2 [Y ]. Si Σ est un ensemble de DF, alors R |= Σ dénote que R satisfait toute DF de Σ. 2 Conséquence logique Soit Σ un ensemble de DF sur l’ensemble U d’attributs, et X → Y une DF sur U . On dit que X → Y est une conséquence logique de Σ, dénoté par Σ |= X → Y , ssi pour toute relation R sur U , si R |= Σ alors R |= X → Y . Si Σ1 , Σ2 sont deux ensembles de DF sur U , alors Σ1 |= Σ2 dénote que pour toute DF X → Y dans Σ2 , Σ1 |= X → Y . Deux ensembles Σ1 et Σ2 de DF sont équivalents, dénoté par Σ1 ≡ Σ2 , ssi Σ1 |= Σ2 et Σ2 |= Σ1 . 2 Notez le double usage du symbole |= : 1. R |= X → Y signifie “X → Y est satisfait par R”. 2. Σ |= X → Y signifie “X → Y est une conséquence logique de Σ”. 30 CHAPITRE 6. THÉORIE DE LA NORMALISATION Par exemple, l’ensemble U = EDF d’attributs et l’ensemble Σ = {E → D, D → F } de DF. 1 Alors {X → Y | XY ⊆ U, Σ |= X → Y } est l’ensemble suivant : { DEF → DEF , DE → DEF , DEF → DE, DE → DE, EF → DEF , EF → DE, E → DEF , E → DE, DEF → DF , DE → DF , DF → DF , EF → DF , D → DF , E → DF , DEF → EF , DE → EF , EF → EF , E → EF , DEF → D, DE → D, DF → D, EF → D, D → D, E → D, DEF → E, DE → E, EF → E, E → E, DEF → F, DE → F, DF → F, EF → F, D → F, E → F, F → F, DEF → {}, DE → {}, DF → {}, EF → {}, D → {}, E → {}, F → {}, {} → {} } Notez que la DF ED → E est toujours satisfaite, et que l’ensemble {E → DF } est équivalent à l’ensemble {E → D, E → F }. DF triviale (Trivial FD) Une DF X → Y sur U est triviale si pour toute relation R sur U , R |= X → Y . 2 Lemme 1 Une DF X → Y sur U est triviale ssi Y ⊆ X. Preuve. ⇒ Supposons Y * X. Alors il existe un attribut A ∈ Y tel que A 6∈ X. Soit t 1 , t2 deux tuples sur U tels que : 1. t1 (A) 6= t2 (A); et 2. pour tout attribut B ∈ U tel que B 6= A, t1 (B) = t2 (B). Soit R = {t1 , t2 }. Il est facile de démontrer que R 6|= X → Y . ⇐ Facile. 2 DF singulière Une DF X → Y est singulière si à la fois Y est un singleton (c’est-à-dire, Y contient exactement un attribut) et Y 6⊆ X. 2 Lemme 2 Pour tout ensemble Σ de DF, il existe un ensemble Σ0 de DF singulières tel que Σ0 ≡ Σ. Dans ce chapitre, un schéma contient deux composants: un ensemble U d’attributs et un ensemble Σ de DF sur U . Schéma Un schéma est une paire (U, Σ) avec U un ensemble d’attributs et Σ un ensemble de DF sur U . 2 Superclé et Clé (Superkey and Key) Une superclé pour un schéma (U, Σ) est un ensemble X ⊆ U tel que Σ |= X → U . Une clé pour un schéma (U, Σ) est un ensemble X ⊆ U tel que : 1. Σ |= X → U ; et 2. Minimalité : pour tout ensemble X 0 ( X, Σ 6|= X 0 → U . Donc, une clé est une suprclé qui est minimale par rapport à ⊆. 2 Par exemple, soit U = EDF et Σ = {E → D, D → F }. Une clé pour (U, Σ) est E. 1 Si A est un attribut, on écrit souvent A au lieu de {A}. Si X et Y sont des ensembles d’attributs, on écrit souvent XY au lieu de X ∪ Y . XA signifie donc X ∪ {A}. 31 CHAPITRE 6. THÉORIE DE LA NORMALISATION 6.2.2 BCNF Soit (U, Σ) un schéma tel que Σ |= X → C, C 6∈ X (XC ⊆ U ). Soit R une relation quelconque sur U telle que R |= Σ (et donc R |= X → C). On se pose la question : Existe-t-il une relation R sur U telle que R |= Σ et la DF X → C résulte en une valeur redondante dans R ? À première vue, la réponse est “oui”. Soit Y = U \ XC. Supposons sans perte de généralité que X = {A1 , . . . , Ak } et Y = {B1 , . . . , Bl }. Soit R la relation suivante : R A1 a1 a1 ... ... ... Ak ak ak B1 b1 y1 ... ... ... Bl bl yl C c c , avec a1 , . . . , ak , b1 , . . . , bl des constantes déjà fixées, et y1 , . . . , yl des constantes à choisir plus tard. Une des occurrences de c semble redondante. En effet, considérez : R A1 a1 a1 ... ... ... Ak ak ak B1 b1 y1 ... ... ... Bl bl yl C c ? . Si R |= Σ, alors R |= X → C, donc le point d’interrogation “?” ne peut cacher que la valeur c. Pourtant, si XC est une superclé, c’est-à-dire si Σ |= XC → Y , alors il faut choisir y 1 = b1 , . . . , yl = bl pour que R |= Σ, ce qui aboutit à t1 = t2 . Si t1 = t2 , la valeur c n’apparaı̂t qu’une seule fois. . . Lemme 3 Soit (U, Σ) un schéma tel que Σ |= X → A. Alors, XA est une superclé ssi X est une superclé. Donc, soit R une relation sur le schéma (XY C, Σ) et t ∈ R. La valeur de t(C) peut être redondante à cause de X → C, Σ |= X → C, pourvu que X ne soit pas une superclé. Cette observation importante mène à la définition de BCNF. BCNF (Boyce-Codd Normal Form) Un schéma (U, Σ) est en BCNF ssi pour toute DF singulière X → A sur U telle que Σ |= X → A, X est une superclé pour (U, Σ). 2 Par exemple, soit U = EDF et Σ = {E → D, D → F }. (U, Σ) n’est pas en BCNF car Σ |= D → F mais D n’est pas une superclé. Comment peut-on améliorer les schémas qui ne sont pas en BCNF ? 6.3 6.3.1 Propriétés des Décompositions Formaliser le Concept de Décomposition Limiter un ensemble de DF à certains attributs Soit (U, Σ) un schéma et V ⊆ U . On définit : Restrict(Σ, V ) := {X → Y | XY ⊆ V, Σ |= X → Y } . 2 Par exemple, soit U = EDF et Σ = {E → D, D → F }. Alors Restrict(Σ, EF ) = {E → F, {} → {}, E → E, E → {}, F → F, F → {}, EF → EF , EF → E, EF → F, EF → {}}. Notez que Restrict(Σ, EF ) ≡ {E → F } (cf. lemme 2). 32 CHAPITRE 6. THÉORIE DE LA NORMALISATION Décomposition (Decomposition) Soit (U, Σ) un schéma. Une décomposition de (U, Σ) est un ensemble { (U1 , Σ1 ), . . . , (Un , Σn ) } de schémas tel que : 1. U1 , . . . , Un ⊆ U et U1 ∪ U2 ∪ . . . ∪ Un = U . C’est-à-dire, les attributs que l’on trouve dans les n composants sont exactement les attributs du schéma original. 2. pour tout i ∈ [1..n], Σi ≡ Restrict(Σ, Ui ). C’est-à-dire, un composant contient une DF X → Y si X et Y ne contiennent que des attributs du composant et si X → Y est bien une contrainte du schéma original (modulo équivalence, bien sûr!!!). 2 Par exemple, trois décompositions du schéma (EDF, {E → D, D → F }) sont (cf. la figure 6.1) : Première décomposition { (ED, {E → D}), (EF, {E → F }) }. schéma est en BCNF et donc sans redondance. Notez que chaque sous- Deuxième décomposition { (ED, {E → D}), (DF, {D → F }) }. Notez que chaque sousschéma est en BCNF. Troisième décomposition { (EF, {E → F }), (DF, {D → F }) }. schéma est en BCNF. Notez que chaque sous- Notez que dans la première décomposition on a “perdu” la DF D → F , et dans la troisième décomposition on a perdu E → D. 6.3.2 Préservation des DF Préservation des DF (Dependency preservation) On dit qu’une décomposition { (U1 , Σ1 ), . . . , (Un , Σn ) } d’un schéma (U, Σ) préserve les DF ssi Σ ≡ Σ1 ∪ . . . ∪ Σ n . 2 La perte d’une DF est nuisible car il faut effectuer une jointure pour vérifier si cette DF est satisfaite par la base. Par exemple, il faut effectuer une jointure pour découvrir que la DF D → F est violée dans la base suivante : E Jean Pierre Anne Eric 6.3.3 D Chimie Chimie Marketing Biologie E Jean Pierre Anne Eric F Sciences Économie Économie Science Préservation du Contenu La perte d’informations est plus nuisible que la perte de DF. La troisième décomposition dans la figure 6.1 en témoigne. En effectuant une décomposition, on a perdu le fait que Jean est un étudiant en chimie, etc. Comment peut-on formaliser cette perte d’informations ? Voir figure 6.2. Les tuples suivis par ∗ sont faux. Il n’y a pas moyen de distinguer les tuples corrects des tuples faux. On a donc perdu l’information sur les départements de Jean, Pierre et Eric. Préservation du contenu (Lossless join decomposition) On dit qu’une décomposition { (U1 , Σ1 ), . . . , (Un , Σn ) } d’un schéma (U, Σ) préserve le contenu ssi pour toute relation R sur U telle que R |= Σ, R = πU1 (R) 1 πU2 (R) 1 . . . 1 πUn (R) . 33 CHAPITRE 6. THÉORIE DE LA NORMALISATION 2 Théorème 1 (Heath) {(AB, {A → B}), (AC, {})} est une de décomposition de (ABC, {A → B}) qui préserve le contenu. Preuve. Soit R une relation sur (ABC, {A → B}). L’inclusion R ⊆ πAB (R) 1 πAC (R) est triviale (voir exercices sur le chapitre 3). Pour l’inclusion πAB (R) 1 πAC (R) ⊆ R, prenons n’importe quel tuple {A : a, B : b, C : c} de πAB (R) 1 πAC (R). Donc, {A : a, B : b} ∈ πAB (R) et {A : a, C : c} ∈ πAC (R). Donc, il existe des constantes b0 , c0 telles que {A : a, B : b, C : c0 } ∈ R et {A : a, B : b0 , C : c} ∈ R. Puisque R satisfait A → B et ces deux tuples ont la même valeur pour A, on obtient b = b0 . Donc, {A : a : ,B : b, C : c} ∈ R. 2 Il est clair qu’une décomposition qui ne préserve pas le contenu, est inacceptable. Ci-après, nous dirons plutôt “décomposition” au lieu de “décomposition qui préserve le contenu”; la préservation du contenu est alors sous-entendu. 6.4 6.4.1 Supprimer la Redondance en Préservant le Contenu et les DF Le Défi Ultime Soit donné un schéma (U, Σ) qui n’est pas en BCNF, le défi est de trouver une décomposition en BCNF (c’est-à-dire, chaque composant est en BCNF) qui préserve à la fois le contenu et les DF. Voir figure 6.1. On obtient : Schéma original EDF BCNF ? non Préservation du Contenu ? n.p. Préservation des DF ? n.p. Jugement mauvais n.p. : Question Non Pertinente 6.4.2 Déc. 1 (ED et EF ) oui oui non pire Déc. 2 (ED et DF ) oui oui oui excellent Déc. 3 (EF et DF ) oui non non inacceptable Non-Reconciliation de BCNF et Préservation des DF Malheureusement, il n’existe pas toujours une décomposition (sans perte d’informations, bien sûr) en BCNF qui préserve les DF. Considérez le schéma (P CH, {P H → C, C → P }) . Un tuple hP : x, C : y, H : zi signifie que le professeur x enseigne le cours y chaque semaine à l’heure z. La DF P H → C exprime qu’un professeur ne sait pas enseigner deux cours différents qui commencent à la même heure. La DF C → P exprime qu’un cours est enseigné par un seul professeur. Par exemple, P Dufour Dufour C Algorithmes I Algorithmes I H Vendredi, 10h15 Mardi, 10h15 Les clés pour ce schéma sont P H et CH. Le schéma n’est pas en BCNF car la DF C → P doit être satisfaite mais C n’est pas une superclé. Par conséquence, une relation sur ce schéma peut contenir des données redondantes. Dans l’exemple, on enregistre deux fois le fait que Dufour enseigne Algorithmes I. On pourrait considérer la décomposition : { (P C, {C → P }), (CH, {}) } . 34 CHAPITRE 6. THÉORIE DE LA NORMALISATION E Jean Pierre Anne Eric D Chimie Chimie Marketing Biologie F Sciences Sciences Économie Sciences décomposition en effectuant des projections . & E F E F Jean Sciences Chimie Sciences Pierre Sciences Marketing Économie Anne Économie Biologie Sciences Eric Sciences re-composition en effectuant une jointure 1 & . E Jean Jean Pierre Pierre Anne Eric Eric D Chimie Biologie Chimie Biologie Marketing Chimie Biologie F Sciences Sciences ∗ Sciences Sciences ∗ Économie Sciences ∗ Sciences Figure 6.2: La perte d’informations en décomposant. Ceci est une décomposition en BCNF qui préserve le contenu. Malheureusement, on a perdu la DF P H → C. Pour la table présentée ci-dessus, le résultat de la décomposition est comme suit : P Dufour C Algorithmes I C Algorithmes I Algorithmes I H Vendredi, 10h15 Mardi, 10h15 Il est facile de comprendre qu’il n’existe pas de décomposition en BCNF qui préserve la DF P H → C. Donc, Il n’existe pas toujours une décomposition en BCNF qui préserve les DF. Puisque BCNF est donc une condition trop sévère, un affaiblissement de BCNF, appelé 3NF, sera introduit ci-après. Par contre, on peut facilement prouver (faites-le!) qu’il existe toujours une décomposition en BCNF qui préserve le contenu. 6.4.3 3NF 3NF (Third Normal Form) Un schéma (U, Σ) est en 3NF ssi pour toute DF singulière X → A sur U telle que Σ |= X → A, X est une superclé pour (U, Σ) ou bien l’attribut A fait partie d’une clé quelconque pour (U, Σ). 2 Par exemple, le schéma (P CH, {P H → C, C → P }) est en 3NF, parce que les clés étant P H et CH, tout attribut fait partie d’une clé. Il est clair qu’un schéma en BCNF est forcément en 3NF. On peut prouver le résultat suivant : Il existe toujours une décomposition en 3NF qui préserve à la fois le contenu et les DF. 35 CHAPITRE 6. THÉORIE DE LA NORMALISATION Voici l’esquisse d’un algorithme pour décomposer un schéma en 3NF en préservant à la fois le contenu et les DF (voir aussi la question 112). 1. Entrée : un schéma (U, Σ). 2. Remplacer Σ par un ensemble Σ0 de DF tel que : (a) Σ0 ≡ Σ. (b) Toute DF de Σ0 est singulière. (c) Si X → A ∈ Σ0 , alors pour tout ensemble X 0 ( X, Σ 6|= X 0 → A. C’est-à-dire, les ensembles à gauche de → sont minimaux. (d) Si Σ0 contient X → Y , alors Σ0 − {X → Y } 6≡ Σ. C’est-à-dire, Σ0 est minimal. 3. Pour chaque DF X → A ∈ Σ0 , ajouter un composant (XA, Φ) avec Φ ≡ Restrict(Σ, XA). 4. Déterminer une clé K pour (U, Σ) et ajouter un composant (K, Φ) avec Φ ≡ Restrict(Σ, K). Par exemple, soit U = ABCDE et Σ = {AB → C, ABC → D}. AB n’est pas une superclé et (U, Σ) n’est donc pas en BCNF. Σ est équivalente à Σ0 = {AB → C, AB → D}. L’ensemble ABE est une clé pour (U, Σ). Une décomposition en 3NF qui préserve à la fois le contenu est les DF est { (ABC, {AB → C}), (ABD, {AB → D}), (ABE, {}) } . L’exemple suivant montre l’intérêt d’ajouter un composant qui constitue une clé (point 4 de l’algorithme). Soit U = EDL où un tuple {E : e, D : d, L : l} signifie que l’étudiant e appartient au département d et sait programmer en l. La seule contrainte est E → D. Une clé pour ce schéma est EL. L’algorithme donne la décomposition {(ED, {E → D}), (EL, {})}. E Ed Ed Tim D Info Info Info L Java C Java Après décomposition : E Ed Tim D Info Info E Ed Ed Tim L Java C Java Proposition 1 L’algorithme décrit ci-dessus aboutit à une décomposition en 3NF qui préserve à la fois le contenu et les DF. Preuve. 3NF • Supposons, au contraire, que X → A ∈ Σ0 , A 6∈ X, résulte en un composant (XA, Φ) qui n’est pas en 3NF. C’est-à-dire, il existe une DF singulière Y → B sur XA telle que : 1. Φ |= Y → B; 2. Φ |6 = Y → XA (Y n’est pas une superclé); et 3. B ne fait partie d’aucune clé pour (XA, Φ). Démontrons d’abord que X est une clé pour (XA, Φ). Puisque X → A ∈ Σ0 , on a Φ |= X → A et par conséquence, Φ |= X → XA. X est donc une superclé pour (XA, Φ). Il faut encore montrer que X est une superclé minimale (par rapport à ⊆). Supposons, au contraire, un ensemble X 0 ( X tel que Φ |= X 0 → XA et par conséquence, Φ |= X 0 → A. Puisque Σ0 |= Φ, on a Σ0 |= X 0 → A, ce qui condredit la minimalité des ensembles à gauche de → dans Σ0 . Nous concluons par contradiction que X est une clé pour (XA, Φ). Puisque B ne fait partie d’aucune clé pour (XA, Φ), B 6∈ X. Puisque B ∈ XA, B = A. 36 CHAPITRE 6. THÉORIE DE LA NORMALISATION Démontrons X 6⊆ Y . Supposons, au contraire, X ⊆ Y . Alors Y → X est triviale, donc Φ |= Y → X. Puisque Φ |= Y → B et A = B, on obtient Φ |= Y → XA, une contradiction. Nous concluons par contradiction que X 6⊆ Y . On a Y ⊆ X puisque Y ⊆ XA, B = A et B 6∈ Y . À partir de X 6⊆ Y et Y ⊆ X, on obtient Y ( X. Puisque Σ0 |= Φ et Φ |= Y → A (rappelez A = B), on a Σ0 |= Y → A. Mais Y ( X et Σ0 |= Y → A contredit la minimalité des ensembles à gauche de → dans Σ0 . Nous concluons par contradiction que (XA, Φ) est en 3NF • Le composant (K, Φ) pour lequel K est une clé et Φ ≡ Restrict(Σ, K), est en 3NF. La preuve est un exercice. Préservation des DF Trivial. Préservation du Contenu Cette preuve est difficile. 2 6.5 Formes Normales Plus Élevées 6.5.1 4NF Supposons un schéma ELP . Un tuple hE : x, L : y, P : zi signifie que l’étudiant x connaı̂t la langue y et sait préparer le plat z. Par exemple, E Jean Jean Jean Jean L français anglais français anglais P paella spaghetti spaghetti paella L’ensemble de DF pour ce schéma est vide; le schéma est donc en BCNF. Néanmoins, des anomalies de mise à jour sont possibles, parce que les valeurs de L et P sont mutuellement indépendantes. La forme normale 4NF exprime qu’il faut décomposer ce schéma en EL et EP , comme suit : E Jean Jean 6.5.2 L français anglais E Jean Jean P paella spaghetti 5NF Supposons un schéma SP J. Un tuple hS : x, P : y, J : zi signifie que le fournisseur x fournit le produit y au projet z. Supposons que toute relation sur ce schéma doit obéir à la contrainte suivante : Si alors (1) un fournisseur x fournit un produit y à un projet quelconque et (2) un projet z achète le produit y d’un fournisseur quelconque et (3) le fournisseur x fournit un produit quelconque au projet z, le fournisseur x fournit le produit y au projet z. Par exemple, R S S1 S1 S2 S1 P P1 P2 P1 P1 J J2 J1 J1 J1 37 CHAPITRE 6. THÉORIE DE LA NORMALISATION Notez que le quatrième tuple est une conséquence des trois premiers tuples et la contrainte d’intégrité. Ce tuple est donc redondant en quelque sorte. L’ensemble de DF pour ce schéma est vide; le schéma est donc en BCNF. Néanmoins, des anomalies de mise à jour sont possibles. Par exemple, si l’on supprime le quatrième tuple, il faut aussi supprimer un autre tuple (lequel ?). La forme normale 5NF prescrit qu’il faut décomposer ce schéma en SP , P J et SJ, comme suit : R1 S S1 S1 S2 P P1 P2 P1 R2 P P1 P2 P1 J J2 J1 J1 R3 S S1 S1 S2 J J2 J1 J1 Notez que R = R 1 1 R2 1 R3 , ce qui veut dire qu’on a préservé le contenu en décomposant la relation. En général, il est facile de vérifier que toute relation sur SP J qui satisfait la contrainte présentée ci-dessus peut être décomposée en trois composants (SP , P J et SJ) sans perte d’informations. Notez aussi que R R 6= 6= R 1 1 R2 , R 1 1 R3 , R 6= R 2 1 R3 . Cela implique que deux schémas ne suffisent pas pour préserver le contenu; les trois schémas sont nécessaires. 6.5.3 Dépendance de Jointure 4NF et 5NF s’appuient sur le concept de dépendance de jointure. Dépendance de Jointure (Join Dependency) Soit U un ensemble d’attributs. Syntaxe : Une dépendance de jointure (DJ) sur U est une expression 1 [X 1 , . . . , Xn ] avec X1 , . . . , Xn ⊆ U et X1 ∪ . . . ∪ Xn = U . Sémantique : Une relation R sur U satisfait la DJ 1 [X1 , . . . , Xn ] ssi R = πX1 (R) 1 . . . 1 πXn (R) . 2 Par exemple, dans la section 6.5.1 toute relation sur ELP doit satisfaire 1 [EL, EP ]. La contrainte présentée dans la section 6.5.2 exprime que toute relation sur SP J doit satisfaire 1 [SP, P J, SJ]. Certaines DJ sont impliquées par des DF. Supposons un schéma (EDA, {E → D}). Un tuple hE : x, D : y, L : zi signifie que l’étudiant x est inscrit au département y et connaı̂t la langue z. On peut vérifier que chaque relation sur ce schéma satisfait la DJ 1 [ED, EL]. En général, si R est une relation sur U qui satisfait la DF X → Y , alors R doit forcément satisfaire la DJ 1 [XY, X(U − X)] (à prouver). Essentiellement, 4NF et 5NF prescrivent qu’on ne peut pas tolérer dans un schéma des DJ autres que celles impliquées par des DF. La différence entre 4NF et 5NF est que 4NF ne considère que des décompositions en deux composants, tandis que 5NF considère aussi des décompositions en plus de deux composants. 5NF est donc une généralisation de 4NF. Et le 1NF ? Et le 2NF ? Partie II Gestion de Transactions 38 Chapitre 7 Théorie de la Concurrence 7.1 7.1.1 Exécutions Sérialisables Exemple d’Introduction A et B sont des “objets” partagés dans la base de données. Changer de Place var x, y begin read A → x read B → y write y → A write x → B end 7.1.2 Read et Write dans un Contexte Pratique • read A → x ; SELECT ENAME INTO :x FROM EMPLOYEES WHERE ENUMBER="123" UPDATE EMPLOYEES SET ENAME=:y WHERE ENUMBER="123" • write y → A ; 7.1.3 EMPLOYEES ENUMBER ENAME 123 Jean ... ... Succession de Deux Transactions Changer de Place T1 read A → x read B → y write y → A write x → B T2 read A → x0 read B → y 0 write y 0 → A write x0 → B A = Jean, B = Pierre x = Jean y = Pierre A = Pierre B = Jean x0 = Pierre y 0 = Jean A = Jean B = Pierre A = Jean, B = Pierre 39 ... ... ... CHAPITRE 7. THÉORIE DE LA CONCURRENCE 7.1.4 Exécution Correcte de Deux Transactions Changer de Place T1 read A → x read B → y write y → A T2 read A → x0 write x → B read B → y 0 write y 0 → A write x0 → B 7.1.5 A = Jean, B = Pierre x = Jean y = Pierre A = Pierre x0 = Pierre B = Jean y 0 = Jean A = Jean B = Pierre A = Jean, B = Pierre Exécution Inexacte de Deux Transactions Changer de Place T1 read A → x read B → y write y → A T2 read A → x0 read B → y 0 write y 0 → A write x → B write x0 → B 7.1.6 40 A = Jean, B = Pierre x = Jean y = Pierre A = Pierre x0 = Pierre y 0 = Pierre A = Pierre B = Jean B = Pierre A = Pierre, B = Pierre Exécution Correcte Transaction (transaction): L’exécution d’un programme. Exécution de transactions (schedule of transactions): Séquence d’actions obtenue en entrelaçant les transactions. Succession (serial schedule): Exécution dans laquelle les transactions sont exécutées l’une après l’autre sans interruption. Si le nombre de transactions est n, le nombre de successions possibles est n! . Exécution correcte: Une exécution de n transactions est correcte si elle est équivalente à une des n! successions possibles. Exécutions équivalentes: Deux exécutions S et S 0 des mêmes transactions sont équivalentes si S(BD) = S 0 (BD) pour n’importe quelle base BD de départ. Cette caractérisation des exécutions correctes n’est pas pratique. Par exemple, supposons que A et B dénotent le nombre d’Euros que possèdent An et Bob. La transaction T 1 donne l’argent de Bob à An, et T2 double le montant de Bob. Supposons qu’au début A = a et B = b. Après avoir exécuté chaque transaction, le résultat doit être ou bien A = a + b, B = 0 (T 1 suivie par T2 ), ou bien A = a + 2b, B = 0 (T2 suivie par T1 ). L’exécution suivante est correcte grâce à un incident arithmétique, notamment le fait que 2 × 0 = 0. Si on remplace u := 2 × u par u := 2 + u, le résultat final sera le même (A = a + b, B = 0). Néanmoins, avec l’addition au lieu de la multiplication, les 41 CHAPITRE 7. THÉORIE DE LA CONCURRENCE bons résultats deviennent A = a + b, B = 2 et A = a + b + 2, B = 0. T1 T2 read B → u u := 2 × u A = a, B = b u=b u = 2b v=a w=b v =a+b A=a+b B = 2b B=0 A = a + b, B = 0 read A → v read B → w v := v + w write v → A write u → B write 0 → B En général, il est impossible de tenir compte de ces incidents arithmétiques. Il faut donc trouver une caractérisation plus pratique des exécutions correctes; une caractérisation qui ne dépend que des accès à la base de données. Simplification. L’exécution: T1 read A → x read B → y write y → A T2 read A → x0 write x → B read B → y 0 write y 0 → A write x0 → B sera notée: R1 (A)R1 (B)W1 (A)R2 (A)W1 (B)R2 (B)W2 (A)W2 (B) . 7.1.7 Exécution Sérialisable Actions permutables (permutable actions): Deux actions qui se succèdent dans une exécution sont permutables si (1) elles font partie de deux transactions différentes, et (2) la permutation (c’est-à-dire, le changement de l’ordre) de ces deux actions résulte en une exécution équivalente. Par exemple, l’exécution R1 (A)R1 (B)W1 (A)R2 (A)W1 (B)R2 (B)W2 (A)W2 (B) est équivalente à R1 (A)R1 (B)W1 (A)W1 (B)R2 (A)R2 (B)W2 (A)W2 (B) . En particulier: • R1 (X) and R2 (Y ) sont toujours permutables; • R1 (X) and W2 (Y ) sont permutables si X 6= Y ; • W1 (X) and W2 (Y ) sont permutables si X 6= Y . Exécution sérialisable (serialisable schedule): Une exécution qui peut être transformée en une succession par une ou plusieurs permutations d’actions permutables. Théorème 2 Toute exécution sérialisable est correcte. CHAPITRE 7. THÉORIE DE LA CONCURRENCE 42 T2 * T1 ? YH H H H T3 Figure 7.1: Graphe de précédence. 7.1.8 Vérifier la Sérialisabilité Observation. L’exécution . . . R1 (A) . . . W2 (A) . . . W1 (A) . . . n’est pas sérialisable. En permutant des actions permutables, on ne saura jamais obtenir une des successions . . . R1 (A) . . . W1 (A) . . . W2 (A) . . . ou . . . W2 (A) . . . R1 (A) . . . W1 (A) . . . Généralisation. Ajouter une expression Ti ≺ Tj (i 6= j) si dans l’exécution on trouve une des trois séquences suivantes: 1. . . . Ri (X) . . . Wj (X) . . ., 2. . . . Wi (X) . . . Rj (X) . . ., ou 3. . . . Wi (X) . . . Wj (X) . . . . Théorème 3 L’exécution est sérialisable si et seulement si “≺” est sans circuit. La présentation graphique de “≺” est appelée le graphe de précédence. Exemples. • L’exécution R1 (A)W2 (B)W2 (A)R3 (B)W3 (C)W1 (C) donne T1 ≺ T 2 , T 2 ≺ T 3 , T 3 ≺ T 1 et n’est donc pas sérialisable. Figure 7.1 montre le graphe de précédence. • L’exécution R1 (A)W2 (B)R2 (A)R3 (B)W3 (C)W1 (C) donne T2 ≺ T 3 , T 3 ≺ T 1 et est équivalente à W2 (B)R2 (A)R3 (B)W3 (C)R1 (A)W1 (C) . Il n’est pas pratique de vérifier si une exécution est sérialisable: dès que l’on trouve un circuit dans le graphe de précédence, le mal s’est déjà produit. On va plutôt imposer des protocoles qui empêchent l’apparition de circuits dans le graphe de précédence. Mieux vaut prévenir que guérir. 43 CHAPITRE 7. THÉORIE DE LA CONCURRENCE # verrous acquis 6 # verrous acquis 6 2PL temps - Strict 2PL temps - Figure 7.2: Le nombre de verrous acquis en fonction du temps, pour une transaction donnée. 7.2 7.2.1 Le Verrouillage Deux Phases (Two-Phase Locking ou 2PL) Le Protocole Le protocole se compose de trois règles: Règle L1 Avant d’écrire un objet, une transaction doit d’abord demander et obtenir un verrou exclusif (exclusive lock ou X-lock ) sur cet objet. Avant de lire un objet, une transaction doit d’abord demander et obtenir un verrou partagé (shared lock ou S-lock ) ou un verrou exclusif sur cet objet. Règle L2 Une transaction relâchera les verrous dont elle n’a plus besoin. Néanmoins, après avoir relâché un verrou, une transaction ne peut plus demander de nouveaux verrous sur n’importe quel objet. Autrement dit, toutes les demandes de verrous précèdent tous les relâchements. Règle L3 Il ne peut jamais y avoir deux transactions qui possèdent des verrous pour effectuer des actions non-permutables. Les règles L1 et L2 sont la responsibilité des transactions. Elles impliquent qu’une transaction comporte deux phases: une phase d’acquisition (growing phase) et une phase de relâchement (shrinking phase). Voir figure 7.2 (gauche). La règle L3 est la responsabilité d’un module SGBD appelé gestionnaire de verrous (locking manager ). 7.2.2 Programme Changer de Place Révisé S lock(A) read A → x S lock(B) read B → y X lock(A) write y → A X lock(B) Unlock(A) write x → B Unlock(B) 7.2.3 Noter qu’on ne peut pas changer l’ordre de ces deux actions. Assurer la Règle L3: La Gestion de Verrous Terminologie: 1. Une demande S lock(A) par une transaction Ti sera notée Si (A). Pareillement, X lock(A) par Ti sera notée Xi (A). Unlock(A) par Ti sera dénotée Ui (A). 2. Si une transaction demande un verrou, cette demande peut être acceptée ou refusée par le gestionnaire de verrous. Une demande refusée est mise dans une file d’attente et la transaction demandante est suspendue. CHAPITRE 7. THÉORIE DE LA CONCURRENCE 44 3. Si une demande Si (A) a été acceptée, alors on dit que Ti possède un verrou partagé sur A jusqu’au moment où Ti relâche le verrou au moyen de l’opération Ui (A). Si une demande Xi (A) a été acceptée, alors on dit que Ti possède un verrou exclusif sur A jusqu’au moment où Ti relâche le verrou au moyen de l’opération Ui (A). 4. Un verrou partagé (=“S-lock”) sur A est un “permis de lire A”. Un verrou exclusif (=“Xlock”) sur A est un “permis de modifier (écrire) ou de lire A”. Le gestionnaire de verrous assure que l’on n’arrive jamais à une situation où deux transactions possèdent des permis d’effectuer des actions non-permutables. C’est la règle L3. . . Par exemple, si T1 possède un permis d’effectuer W1 (A), T2 ne peut pas posséder de permis d’effectuer R2 (A) ou W2 (A). Donc, le gestionnaire de verrous assure que si une transaction possède un verrou exclusif sur un objet, aucune autre transaction ne peut posséder un verrou partagé ou exclusif sur ce même objet. En plus, le gestionnaire doit tenir compte du problème de la famine (starvation) et du problème du verrou mortel (deadlock ). Une entrée dans la table de verrouillage pour un objet A peut être représentée par un triple: (A, verrous acquis, file d’attente) . Si l’ensemble verrous acquis n’est pas vide, alors cet ensemble contient (a) un seul X-lock, ou bien (b) un ou plusieurs S-locks. • Une demande Si (A) est acceptée si à la fois (a) l’ensemble verrous acquis pour A dans la table de verrouillage contient zéro, un ou plusieurs S-locks, et (b) la file d’attente file d’attente est vide. Sinon la demande est mise dans la file d’attente (et la transaction demandante est suspendue). Si l’ensemble verrous acquis ne contient que des S-locks mais la file d’attente n’est pas vide, la demande Si (A) est quand-même refusée afin d’éviter le problème de la famine. • Une demande Xi (A) est acceptée si l’ensemble des verrous acquis sur A est vide {} ou le singleton {Si } (lock upgrade). Sinon la demande est mise dans la file d’attente; si l’ensemble des verrous acquis contient d’autres verrous à côté de Si , alors la demande est insérée à la tête de la file d’attente, afin d’éviter un verrou mortel. Exemple. S1 (A)S2 (A)X3 (A)X1 (A)S4 (A)U2 (A). verrous acquis file d’attente pour A pour A {S1 } hi {S1 , S2 } hi {S1 , S2 } hX3 i {S1 , S2 } hX1 X3 i T1 est suspendue et possède un verrou. S1 (A)S2 (A)X3 (A)X1 (A)S4 (A) {S1 , S2 } hX1 X3 S4 i S1 (A)S2 (A)X3 (A)X1 (A)S4 (A)U2 (A) {X1 } hX3 S4 i Après l’exécution de: S1 (A) S1 (A)S2 (A) S1 (A)S2 (A)X3 (A) S1 (A)S2 (A)X3 (A)X1 (A) Exemple. Comment l’exécution inexacte introduite en section 7.1.5 est-elle traitée par 2PL? CHAPITRE 7. THÉORIE DE LA CONCURRENCE 7.2.4 45 2PL Est Correct On a d’abord établi les règles du protocole. En général, les règles L1 et L2 sont la responsabilité des transactions, donc du programmeur (néanmoins, voir la discussion Strict 2PL ci-dessus). On a vu comment la règle L3 peut être assurée par le gestionnaire de verrous. On sait donc que le protocole peut être implanté. Néanmoins, avant de l’implanter, il faut mieux s’assurer que le protocole est correct. Lemme 4 Si le graphe de précédence d’une execution 2PL possède une arête de T 1 vers T2 , alors T1 effectue son premier relâchement de verrou avant le premier relâchement de verrou par T 2 . Preuve.(Esquisse) Supposons l’exécution contient W1 (A) . . . W2 (A). Par les règles L1 et L3 , l’exécution contient U1 (A) . . . X2 (A). Par la règle L2 , T2 ne peut relâcher aucun verrou avant X2 (A). Dès lors, T2 ne peut pas effectuer son premier relâchement avant U1 (A). 2 Théorème 4 Toute exécution 2PL peut être “sérialisée” en une succession dans laquelle les transactions se suivent dans l’ordre qu’elles relâchent leur premier verrou. Preuve. Observer que, suite au Lemme 4, un circuit dans le graphe de précédence mène à une contradiction. 2 Corollaire 1 Toute exécution 2PL est sérialisable (et donc correcte grâce au Théorème 2). 7.3 7.3.1 Le Verrou Mortel Le Problème du Verrou Mortel Supposer X1 (A)X2 (B)S1 (B)S2 (A). Voici la table de verrouillage après cette exécution: objet A B verrous acquis {X1 } {X2 } file d’attente hS2 i hS1 i T2 attend jusqu’à T1 relâche son X-lock sur A, et T1 attend jusqu’à T2 relâche son X-lock sur B. Il y a deux solutions à ce problème: 7.3.2 Première Solution: Détection (et “Guérison”) du Verrou Mortel À intervalles réguliers, on vérifie si un verrou mortel s’est produit; si c’est le cas, le SGBD va rompre le verrou mortel en tuant certaines transactions. Graphe des attentes (Wait-for graph) Graphe dont les nœuds correspondent aux transactions et les arcs représentent les attentes entre transactions. 2 Il existe une situation de verrou mortel si et seulement si le graphe des attentes possède un circuit. Un algorithme de détection de l’interblocage peut se déduire d’un algorithme de détection de circuits appliqué au graphe des attentes. Quand le gestionnaire de verrous détecte des circuits d’attente, il annule certaines transactions afin de rompre les circuits d’attente. 7.3.3 Deuxième Solution: Prévention du Verrou Mortel On impose un protocole qui garantit qu’un verrou mortel ne pourra jamais se produire. Estampille de transaction (Transaction timestamp) Numéro unique attribué à une transaction permettant de l’ordonner strictement par rapport aux autres transactions. 2 Deux stratégies: CHAPITRE 7. THÉORIE DE LA CONCURRENCE 46 Wait-Die: Une transaction plus récente n’attend pas une transaction plus ancienne; 1 la transaction plus récente “meurt” plutôt. Dans l’exemple, T2 meurt quand elle demande S2 (A). Noter: une transaction qui a obtenu tous les verrous dont elle a besoin, ne sera jamais annulée pour éviter un verrou mortel. Wound-Wait: Une transaction plus ancienne n’attend pas une transaction plus récente; la récente est “blessée”. Dans l’exemple, T2 est blessée quand T1 demande S1 (B). Dans les deux approches, c’est toujours la transaction la plus jeune qui est annulée. Une transaction annulée est reprise avec la même estampille. Elle devient ainsi plus vieille et finit toujours par passer. Ainsi on évite le problème de la famine. 7.4 Le Verrouillage Deux Phases Strict (Strict 2PL) 7.4.1 Annuler des Transactions et les Propriétés ACID La solution du problème du verrou mortel soulève un nouveau problème: celui de l’annulation de transactions. Il y a d’autres situations qui mènent à l’annulation de transactions: une division par zéro, une panne d’électricité, . . . Annulation de transaction (Transaction abort) Action atomique spéciale, généralement exécutée après une défaillance, provoquant l’annulation de toutes les mises à jour de la base effectuées par la transaction. 2 Validation de transaction (Transaction commit) Action atomique spéciale, exécutée en fin de transaction, provoquant l’intégration définitive de toutes les mises à jour de la transaction exécutante dans la base de données. 2 Par exemple, transférer de l’argent. La transaction retire de l’argent du compte A, puis dépose le même montant sur le compte B. Supposons que la transaction soit annulée après qu’elle ait retiré l’argent, mais avant d’avoir eu le temps de le déposér. Les propriétés ACID: Atomicité Les transactions sont atomiques (tout-ou-rien). Cohérence Bien sûr, on suppose que toute transaction isolée soit correcte. La cohérence est la responsabilité du programmeur, pas du SGBD! Isolation Pas d’effets nuisibles à cause de la concurrence des transactions (le sujet de ce chapitre). Durabilité Les modifications qui ont été validées par des transactions doivent être conservées dans la base, même s’il se produit une panne à un moment plus tard (recovery, voir le chapitre suivant). 1 On dit que T attend T (i 6= j) si T attend le relâchement d’un verrou par T , ou si T se trouve derrière T dans i j i j i j la queue d’attente. Par example, si pour un objet donné verrous acquis est {S 2 , S3 } et file d’attente hX1 , X2 i, alors T1 attend T2 et T3 , et T2 attend T1 et T3 . Noter que T2 attend T1 bien que T1 ne possède aucun verrou. CHAPITRE 7. THÉORIE DE LA CONCURRENCE 7.4.2 Non-Reconciliation de 2PL et Durabilité T1 X1 (A) W1 (A) U1 (A) T2 X2 (A) R2 (A) W2 (A) U2 (A) hd’autres actionsi abort T1 7.4.3 • Si T2 n’a pas encore validé ses modifications, on peut (et on doit) aussi annuler T2 : cascading abort. • Si T2 a déjà validé ses modifications, on ne peut pas défaire ses actions (le principe de la durabilité)! Strict 2PL • T2 ne peut pas voir les modifications de T1 avant que T1 ait validé ces modifications. Les verrous sont seulement • Strict 2PL = 2PL + relâchés en fin de transaction. Voir figure 7.2 (droite). • Il est clair que Strict 2PL garantit que toute exécution sera sérialisable (pourquoi?). • Avantages en comparaison avec 2PL: – En strict 2PL, l’annulation d’une transaction n’affecte pas les autres transactions. – Strict 2PL peut être transparent au programmeur. • Le problème du verrou mortel reste. 47 Chapitre 8 Résistance aux Pannes et Reprise 8.1 Le Buffer Voir figure 8.1. Le page manager a la responsabilité de (1) charger en mémoire centrale les pages demandées par des transactions, et (2) réécrire sur disque les pages modifiées par ces mêmes transactions (dirty pages). Buffer Zone de mémoire tampon dédiée au stockage de données en attente de traitement sur un périphérique. 2 8.2 Principaux Types de Pannes • La panne d’une transaction (transaction failure). • La panne du système (system failure). La mémoire centrale est perdue. • La panne de mémoire secondaire (media failure). 8.3 8.3.1 Résistance aux Pannes du Système Undo/Redo Supposons un protocole qui interdit à une transaction T1 de lire un objet modifié par T2 avant le commit de T2 (pas de dirty reads). C’est-à-dire, un protocole comme strict 2PL qui ne nécessite pas de cascading aborts. Voir figure 8.2. Il faut être capable de: • Refaire (Redo) les modifications effectuées par T1 (principe de la durabilité). Il peut y avoir des pages (1) modifiées en mémoire volatile par T1 , mais (2) pas encore stockées dans la base au moment de la panne. • Défaire (Undo) les modifications effectuées par T2 (principe de l’atomicité). Il peut y avoir des pages (1) modifiées en mémoire volatile par T2 , et (2) déjà stockées dans la base (donc sur disque) au moment de la panne. 8.3.2 Le Journal La méthode la plus classique pour permettre la validation atomique, l’annulation et la reprise de transactions consiste à utiliser un journal (ou log). Le journal est un fichier append-only gardé sur disque. On enregistre dans le journal l’occurence des actions suivantes: 48 49 CHAPITRE 8. RÉSISTANCE AUX PANNES ET REPRISE CPU MAIN MEMORY TRX 1 TRX 2 DISK DATABASE DATABASE BUFFER PAGING DIRTY PAGE Figure 8.1: Le buffer. panne du système T1 T2 Figure 8.2: Transaction T1 est à refaire, T2 à défaire. CHAPITRE 8. RÉSISTANCE AUX PANNES ET REPRISE 50 • (T , begin), où T dénote l’identifiant d’une transaction. La transaction T a commencé. • (T , A, image avant, image après), où A dénote un “objet” de la base de données. La transaction T a modifié A. L’ancienne valeur de A était image avant; la nouvelle valeur écrite est image après. Dans ce chapitre, supposons que les objets qui constituent l’unité de la résistance aux pannes, sont des pages entières. • (T , commit). La transaction T a terminé. Comme pour tout fichier, ces enregistrements sont d’abord produits en mémoire volatile, puis sauvegardés dans le journal sur disque. Les enregistrements sont ajoutés au journal dans l’ordre qu’ils sont produits. On dit qu’une transaction T est commise si (T , commit) se trouve dans le journal sur disque. Ci-après, la terminologie suivante est adoptée: sauvegarder: copier sur disque une donnée qui se trouve en mémoire volatile. stocker, stockage: sauvegarder dans la base de données sur disque une page modifiée en mémoire volatile. journaliser: sauvegarder dans le journal sur disque. En tout cas, il faut obéir aux règles suivantes: 1. Journalisation avant stockage: Avant de stocker une page modifiée en mémoire volatile par une transaction non-commise, l’image avant de cette page doit être journalisée (afin de pouvoir défaire). 2. Sauvegarde avant commit: Toute page modifiée en mémoire volatile par une transaction doit être sauvegardée (stockée ou journalisée) avant le commit de la transaction (afin de pouvoir refaire). 8.3.3 Procédure de Reprise Procédure de reprise: Analyse Déterminer quelles transactions sont à défaire/refaire (parcourir le journal en avant). Défaire Parcourir le journal en arrière et stocker dans la base les “images avant” des modifications qui sont à défaire. Refaire Parcourir le journal en avant et stocker dans la base les “images après” des modifications qui sont à refaire. 8.3.4 Exemple T1 dépose 1$ sur le compte A. T2 essaie de transférer 1$ du compte B au compte A. 51 CHAPITRE 8. RÉSISTANCE AUX PANNES ET REPRISE (START CKPT hT4 , T5 i) panne du système (END CKPT) T1 T2 T3 T4 T5 Figure 8.3: Transactions T1 et T4 sont à refaire, T2 et T5 à défaire. T1 T2 A = 3, B = 7 begin read A → x x←x+1 write x → A commit x=3 x=4 A=4 begin read B → y y ←y−1 write y → B read A → z z ←z+1 ? ? ? panne d’électricité ? ? ? y=7 y=6 B=6 z=4 z=5 Enregistrements dans le journal (T1 , begin) (T1 , A, 3, 4) (T1 , commit) (T2 , begin) (T2 , B, 7, 6) Au moment de la panne, l’état de la base est indéfini; il y a quatre possibilités: • A = 3, B = 7: Aucune modification n’a été stockée. • A = 3, B = 6 • A = 4, B = 7 • A = 4, B = 6: Toutes les modifications ont été stockées. La procédure de reprise va restaurer l’état A = 4, B = 7. 8.3.5 Checkpointing Comment peut-on réduire le nombre de transactions à refaire lors d’une reprise? La réalisation d’un checkpoint consiste à: 1. journaliser un enregistrement (START CKPT hT1 , . . . , Tk i), où T1 , . . . , Tk sont les transactions actives; 2. stocker toutes les pages modifiées dans la base de données sur disque; 3. journaliser un enregistrement (END CKPT). Voir figure 8.3: la transaction T3 n’intervient pas lors de la reprise après la panne. Une fois que le (END CKPT) apparaı̂t dans le journal, on peut donc supprimer du journal tous les enregistrements concernant les transactions commises avant le START CKPT. CHAPITRE 8. RÉSISTANCE AUX PANNES ET REPRISE 8.3.6 52 Undo/No-Redo et Redo/No-Undo Il est généralement nécessaire de défaire les transaction non-commises et refaire les transactions commises. Cependant, différents protocoles peuvent faciliter la reprise: Undo/No-Redo Toujours stocker dans la base de données toutes les pages modifiées par une transaction T avant le commit de T . Cette règle est plus sévère que le principe de sauvegarde avant commit vu ci-dessus. Aucune image après ne doit être journalisée. Par contre, les images avant doivent être journalisées (pour pouvoir défaire, principe de journalisation avant stockage). Cette stratégie peut aboutir à des entrées-sorties excessives. Redo/No-Undo Ne jamais stocker dans la base de données les pages modifiées par une transaction T avant le commit de T . Le principe de journalisation avant stockage est manifestement satisfait. Aucune image avant ne doit être journalisée. Par contre, les images après doivent être journalisées (pour pouvoir refaire, principe de sauvegarde avant commit). Il y a un problème si le buffer n’est pas assez large pour stocker toutes les pages modifiées. Partie III Exercices 53 Exercices sur le Chapitre 2 Question 1 On pourrait choisir de remplacer les deux relations VINS et ABUS par une seule relation avec le schéma {Nom:VARCHAR, Cru:VARCHAR, Mill:ANNÉE, Qualite:CHAR}. Discutez ce choix. Question 2 Proposez un schéma pour une base décrivant des abonnements sur des magazines. Les abonnés identifiés par un numéro sont décrits par un nom et une adresse. Les magazines sont décrits par un titre, une description et un rédacteur. Question 3 Voici deux tables. Ajoutez les clés primaires et étrangères. Motivez votre choix. Cities Countries Name Bergen Bergen Brussels Name Belgium Norway Japan Country Population Belgium 20.3 Norway 30.5 Belgium 370.6 ... Capital Population Currency Brussels 10 255.6 EUR Oslo 4 463.2 NOK Tokyo 128 888.0 YEN ... Réponse. Supposons que toutes les villes d’un même pays s’appellent différemment. Cities ( Countries ( PRIMARY KEY(Name, Country), FOREIGN KEY(Country) REFERENCES Countries ); PRIMARY KEY(Name), FOREIGN KEY(Capital, Name) REFERENCES Cities, UNIQUE(Capital) ); Notons: 1. Il serait erroné d’écrire FOREIGN KEY(Name, Capital) au lieu de FOREIGN KEY(Capital, Name) (pourquoi?). 2. UNIQUE(Capital) indique qu’il ne peut pas y avoir deux tuples différents en Countries avec la même valeur pour Capital. 2 Question 4 Voici trois tables d’une agence spécialisée dans les voyages en autobus. Déterminez les identifiants possibles et choisissez, parmi ceux-ci, les clés primaires. Ajoutez les clés étrangères. Motivez votre choix. 54 55 TRIPS Date 15/10/2001 15/10/2001 16/10/2001 17/10/2001 17/10/2001 BUSES Number Plate DDT 123 LPG 234 DDT 123 LPG 234 DDT 123 Driver Destination Departure John Antwerp Zoo Tim Ostende Beach Tim Dinant Citadel John Antwerp Zoo Tim Antwerp Zoo ... Number Plate Chassis Make Mileage DDT 123 XGUR6775 Renault 212 342 LPG 234 ZXRY9823 Mercedes 321 734 RAM 221 XXZZ7345 Renault 10 000 ... DESTINATIONS Name Antwerp Zoo Ostende Beach Dinant Citadel Brussels Atomium ... Time 09.00 08.00 10.00 08.15 08.15 Réponse. Supposons qu’il s’agit d’excursions d’une journée. C’est-à-dire, un bus ou un chauffeur ne fait qu’une excursion par jour. TRIPS ( BUSES ( DESTINATIONS ( PRIMARY KEY(Date, Number Plate), UNIQUE(Date, Driver), FOREIGN KEY(Number Plate) REFERENCES BUSES, FOREIGN KEY(Destination) REFERENCES DESTINATIONS PRIMARY KEY(Number Plate), UNIQUE(Chassis) ); PRIMARY KEY(Name) ); ); 2 Question 5 Voici deux tables d’une entreprise qui gère plusieurs dépôts. La première rangée de la table STOCK signifie que 200 charnières jaunes sont stockées au dépôt D1. Ce dépôt se trouve 6, Rue de l’Eglise à Mons. Les quantités sont des entiers ≥ 1. Déterminez les identifiants possibles et choisissez, parmi ceux-ci, les clés primaires. Ajoutez les clés étrangères. Motivez votre choix. WAREHOUSES STOCK W# D1 D2 D3 D4 W# D1 D1 D2 D2 D2 D4 D4 Address 6, Rue de l’Eglise 18, Place du Parc 18, Place du Parc 5, Avenue Louise Product Color hinge yellow hinge blue lock blue hinge yellow handle red hinge red lock red City Mons Mons Chimay Enghien Qty 200 150 100 200 100 150 600 Réponse. WAREHOUSES ( STOCK ( PRIMARY KEY(W#), UNIQUE(Address,City) ); PRIMARY KEY(W#,Product,Color), FOREIGN KEY(W#) REFERENCES WAREHOUSES ); 2 56 Question 6 Le championnat de la Formule 1 se déroule chaque année du mois de mars au mois d’octobre. Dans cette période se déroulent 16 courses, appelées Grands Prix (GP), sur 16 circuits différents. Tout pilote est membre d’une équipe, appelée “écurie”, pendant toute une année. La table AFFILIATION enregistre l’affiliation des pilotes aux écuries par saison. La table PARTICIPATIONS enregistre quels pilotes ont participé à quels Grands Prix. La participation à un Grand Prix est réservée aux pilotes affiliés à une écurie. Néanmoins, il se peut qu’un pilote ne participe pas à tous les Grands Prix. Par exemple, en 2001, M. Häkkinen, membre de l’écurie McLaren, n’a pas participé au Grand Prix de Belgique. Finalement, la table PODIUM enregistre les trois meilleurs pilotes de chaque Grand Prix; bien sûr, seuls les participants peuvent gagner. PODIUM annee 2001 2003 2003 GP Belgique Espagne Belgique gagneur M. Schumacher M. Schumacher G. Fisichella AFFILIATION annee pilote 2001 M. Schumacher 2001 R. Barrichello 2001 J. Trulli 2001 G. Fisichella 2001 M. Häkkinen ecurie Ferrari Ferrari Jordan Benetton McLaren 2003 2003 2003 2003 2003 2003 Ferrari Ferrari Renault Renault Jordan Jordan M. Schumacher R. Barrichello J. Trulli F. Alonso G. Fisichella K. Räikkönen deuxieme J. Trulli F. Alonso K. Räikkönen troisieme R. Barrichello R. Barrichello F. Alonso PARTICIPATIONS annee pilote 2001 M. Schumacher 2001 R. Barrichello 2001 J. Trulli 2001 G. Fisichella GP Belgique Belgique Belgique Belgique 2003 2003 2003 2003 M. Schumacher R. Barrichello F. Alonso G. Fisichella Espagne Espagne Espagne Espagne 2003 2003 2003 2003 2003 2003 M. Schumacher R. Barrichello J. Trulli F. Alonso G. Fisichella K. Räikkönen Belgique Belgique Belgique Belgique Belgique Belgique • Déterminez les identifiants possibles et choisissez, parmi ceux-ci, les clés primaires. Ajoutez les clés étrangères. Utilisez une syntaxe non ambiguë et ajoutez un mot d’explication. Notez que la base de donnée montrée ci-dessous est cohérente. Question 7 Considérez les tables suivantes: EMPLOYE NrEmp E1 E1 E2 E3 E3 E4 E5 E5 E5 Dept Info Bio Eco Bio Eco Eco Eco Bio Info Pourcent 40 60 100 50 50 100 50 25 25 DEPARTEMENT NomDept Info Bio Eco Budget 5000 3500 4000 Chef E1 E1 E5 Les deux premières rangées de la table EMPLOYE indiquent que l’employé identifié par le numéro E1 travaille pendant 40% de son temps pour le département Info, et pendant 60% pour le département Bio. Tout employé travaillera à 100% en total. La première rangée de DEPARTEMENT indique que E1 est le chef du département Info. Ce département dispose d’un budget annuel de 5000 Euros. Tout département aura un seul budget et un seul chef. Un chef travaillera pendant au moins 25% de son temps pour le département dont il est chef. Un employé peut être le chef de plusieurs départements. 57 • Déterminez les identifiants possibles et choisissez, parmi ceux-ci, les clés primaires. Ajoutez les clés étrangères. Utilisez une syntaxe non ambiguë et ajoutez un mot d’explication. Question 8 Supposez deux relations: EMPLOYEES Emp Ed Ed An Pierre Pierre Dept Jeux MIS Jeux MIS Jeux Depuis 8 jan 1982 DEPARTEMENTS 11 jan 1997 et 13 sep 2001 23 oct 1992 11 nov 1995 Dept Jeux MIS Chef An Pierre Ces tuples expriment, entre autres, que Ed travaille pour le département Jeux depuis le 8 janvier 1982; ce département est actuellement dirigé par An. Un employé est associé à un ou plusieurs départements. Un département n’a qu’un seul chef et personne n’est chef de plusieurs départements. En plus, le chef d’un département doit toujours figurer parmi les employés de ce département. • Donnez les clés primaires et étrangères pour ce schéma. Question 9 La table CDA représente un Calendrier de Dates d’Anniversaire. La table MARIAGES stocke les mariages en vigueur; un homme ou une femme ne peut avoir plusieurs conjoints en même temps. On maintient l’anniversaire et l’adresse de tous les mariés. On apprend que Tante Odette est née le 27 juin 1936. Elle est mariée avec Oncle Urbain depuis le 1 mai 1950. CDA Nom Tante Odette Oncle Urbain Mon chat Jean Bidon Anne Lalo Jean Crevette MARIAGES Anniversaire 27 juin 27 juin 17 mars 23 mai 15 mars 12 janvier Femme Tante Odette Anne Lalo Année 1936 1927 2001 1963 1965 1965 Adresse 17 Rue R. Barre 17 Rue R. Barre Chez moi 36 Rue d’Egmont 35 Rue d’Egmont 23 Place du Parc Mari Oncle Urbain Jean Crevette Jour 1 mai 14 juillet Ville Mons Mons Enghien Bruxelles Mons Mons Année 1950 1978 Déterminez les identifiants possibles et choisissez, parmi ceux-ci, les clés primaires. Ajoutez les clés étrangères. Motivez votre choix. Question 10 Pour le problème de la question 94, la prochaine décomposition est proposée. Donnez pour chaque table la clé primaire, les clés étrangères et les contraintes de type UNIQUE. 58 DATES Année 2004 2004 2000 2000 Nage Papillon Libre Libre Papillon Distance 200 200 50 200 .. . NAT Année 2004 2004 2004 2000 2000 Athlète M. Phelps T. Yamamoto S. Parry I. de Bruijn M. Phelps .. . MED Année 2004 2004 2004 2004 2000 2000 Nage Papillon Papillon Papillon Libre Libre Papillon Sexe M M F M Date 17/8 16/8 23/9 23/9 Pays USA JAP GBR NED GBR Distance 200 200 200 200 50 200 VILLES Ville Athènes Sydney .. . ATHLÈTES Sexe M M M M F M Année 2004 2000 Athlète M. Phelps T. Yamamoto S. Parry M. Phelps I. de Bruijn M. Phelps Médaille Or Argent Bronze Bronze Or Argent Athlète M. Phelps T. Yamamoto S. Parry I. de Bruijn .. . Sexe M M M F Temps 1:54.04 1:54.56 1:55.52 1:45.32 0:24.32 1:55.19 .. . Question 11 La table PROCHES enregistre le sexe et la date de naissance de mes proches; chaque personne est identifiée de manière unique par son nom. Les mariages sont enregistrés dans la table MARIAGES; aucune personne n’est mariée plusieurs fois. La table FAVORIS stocke les bières favorites de mes proches, au maximum trois bières par personne. Notez que Tante Odette n’aime aucune bière. Le petit Nicolas est trop jeune pour boire de la bière! FAVORIS MARIAGES Nom Oncle Urbain Oncle Urbain Oncle Urbain Caroline Caroline Jim An Pierre Eric Homme Oncle Urbain Jim Pierre Bière Duvel Leffe Orval Leffe Carlsberg Grimbergen Leffe Leffe Chimay PROCHES Nom Oncle Urbain Caroline Jim An Pierre Tante Odette Nicolas Eric Sexe M F M F M F M M Anniversaire 9 sep 28 oct 24 jan 12 sep 11 feb 2 jan 30 août 11 sep Femme Tante Odette An Caroline • Déterminez les identifiants possibles et choisissez, parmi ceux-ci, les clés primaires. Ajoutez les clés étrangères. Utilisez une syntaxe non ambiguë et ajoutez un mot d’explication. Année 1945 1960 1971 1974 1959 1947 2005 1981 Exercices sur le Chapitre 3 Question 12 Pour la base de données de la question 6, donnez une requête en algèbre relationnelle pour la question suivante: Quels pilotes ont donné forfait pour quels Grands Prix? Pour la base de données de la question 7, la réponse est comme suit: pilote M. Häkkinen J. Trulli K. Räikkönen GP Belgique Espagne Espagne annee 2001 2003 2003 Le résultat contient le tuple {pilote: M. Häkkinen, GP: Belgique, annee: 2001} parce qu’en 2001, M. Häkkinen était inscrit au championnat mais ne figure pas parmi les participants au GP de Belgique. Notez que l’absence de M. Häkkinen dans le GP d’Espagne de 2003 ne peut pas être considéré comme un forfait, car M. Häkkinen n’était pas affilié à une écurie en 2003. Question 13 Pour la base de données de la question 6, donnez une requête en algèbre relationnelle pour la question suivante, en utilisant le moins possible la sélection σ: Donnez les Grands Prix (GP et annee) où le gagneur et le deuxième faisaient partie de la même écurie? (seul le GP de Belgique en 2003) Question 14 Pour la base de données de la question 7, donnez une requête en algèbre relationnelle pour la question: Quel employé partage son temps moitié-moitié (c’est-à-dire 50%-50%) entre deux départements? (seul E3 dans l’exemple) Question 15 Soit R une relation sur le schéma AB. La relation R sert à stocker un graphe orienté: un tuple hA : a, B : bi dénote une arête du nœud a vers le nœud b. Traduisez la requête πAB (ρB→C (R) 1 ρA→C (R)) − R • en français et • en calcul relationnel. Question 16 Voici un schéma avec deux tables. COURS Nom Génie logiciel Gestion de projets Bases de données .. . Prof Mens Mens Wijsen COURS NOTES NOTES Ects 7 4 10 Nom Ed Ed Tim Pk(Nom) Pk(Nom, C) Fk(C) Refs COURS 59 C Génie logiciel Bases de données Bases de données .. . Note 13 15 13 60 Soit (D, ≤) un domaine ordonné. Soit T une relation sur un schéma {A : D, B : D, . . .}. Soit a ∈ D. On définit: σA≤B (T ) σA≤a (T ) = {t ∈ T | t(A) ≤ t(B)} = {t ∈ T | t(A) ≤ a} σA<B (T ) σA<a (T ) = {t ∈ T | t(A) < t(B)} = {t ∈ T | t(A) < a} Formulez les questions suivantes en algèbre/calcul/SQL: 1. Donnez les cours de Mens qui n’ont pas été suivis par Ed. 2. Quels étudiants ont obtenu une note supérieure à 10 dans un cours enseigné par Mens? 3. Donnez une relation binaire qui contient une rangée hn1 , n2 i ssi n1 et n2 sont deux étudiants qui ont eu le même professeur (pas forcément le même cours). 4. Quels professeurs n’enseignent qu’un seul cours? 5. Quels professeurs n’ont jamais attribué une note inférieure à 10? 6. Donnez la note maximale obtenue en “Bases de Données”. 7. Qui a suivi tous les cours de Mens? 8. Un étudiant est “prodigieux” s’il a obtenu la meilleure note de la classe pour tous les cours qu’il a suivis. Donnez les noms des étudiants prodigieux (s’il y en a). 9. Donnez pour tout étudiant le total de ses crédits ECTS (en SQL seulement). 10. Quel professeur donne les notes, en moyenne, les plus basses (en SQL seulement)? Question 17 Pour la base de données de la question 9, écrivez une requête en algèbre relationnelle pour répondre à la question: Donnez toute femme mariée qui habite au même endroit que son mari (Tante Odette dans l’exemple). Question 18 La première ligne de la table RESTAURANTS ci-dessous signifie que le Taco est un restaurant mexicain à Anvers. La première ligne de la table VISITES signifie que Jean a déjà été manger au Naxos. Les contraintes sont: RESTAURANTS(PRIMARY KEY(Nom)); VISITES(PRIMARY KEY(Nom, Restaurant), FOREIGN KEY(Restaurant) REFERENCES RESTAURANTS); VISITES RESTAURANTS Nom Taco Naxos Trevi Campos Pronto Ville Anvers Anvers Anvers Mons Mons Type mexicain grec italien italien italien Nom Jean Jean Jean Pierre Pierre An An Restaurant Naxos Trevi Pronto Naxos Trevi Campos Pronto Écrivez une requête en algèbre relationnelle pour répondre à la question: Donnez les noms de tous les restaurants pour lesquels aucune visite n’a été enregistrée. (Taco dans l’exemple.) 61 Question 19 Prouvez ou réfutez, en supposant que la syntaxe est correcte. 1. πX (R ∪ S) ⊆ πX (R) ∪ πX (S) 2. πX (R) ∪ πX (S) ⊆ πX (R ∪ S) 3. πX (R ∩ S) ⊆ πX (R) ∩ πX (S) 4. πX (R) ∩ πX (S) ⊆ πX (R ∩ S) Question 20 Prouvez ou réfutez. Les attributs de R sont exactement X ∪ Y . 1. πX (R) 1 πY (R) ⊆ R 2. R ⊆ πX (R) 1 πY (R) Question 21 Soit R une relation sur X, et S une relation. Est-ce que R = πX (R 1 S)? Question 22 Exprimez la division en utilisant seulement les opérations de base. Question 23 Exprimez l’intersection en utilisant seulement les opérations de base. Question 24 Exprimez la question suivante en algèbre relationnelle: Quels sont les vins (cru et millésime) de la qualité A qui ont été bus par Jean mais pas par Pierre. Réponse. Soit J = πCru,Millesime (σQualite=A (VINS) 1 ρMill→Millesime (σNom=Jean (ABUS))) , les vins de la qualité A bus par Jean. Soit P = πCru,Millesime (VINS 1 ρMill→Millesime (σNom=Pierre (ABUS))) , les vins bus par Pierre. La requête est: J −P . 2 Question 25 Exprimez à l’aide de l’algèbre les requêtes suivantes: 1. Trouvez les personnes qui ne boivent que des vins de la qualité A. 2. Quel cru a été bu par chaque personne? Utilisez les tables du chapitre 2. Question 26 Soit R une relation sur {A, B}. Exprimez à l’aide des opérations de base de l’algèbre relationnelle la requête suivante: Donnez tout tuple {A : a, B : b} de R pour lequel {A : b, B : a} est aussi en R. R Par exemple, si R est A 1 1 2 1 B 1 2 , le résultat est 1 3 A 1 1 2 B 1 . 2 1 62 Réponse. R 1 ρAB→BA (R) . 2 R Question 27 Soit R la relation A 1 1 2 1 B 1 2 . Donnez le résultat de: 1 3 ρC→B (πAC (ρA→C (R) 1 R)) . Réponse. A 1 1 2 2 B 1 2 1 2 2 Question 28 Soit R une relation sur {A, B} et S une relation sur {B, C}. Prouvez que: πA (R 1 S) ⊆ πA (σB=C (R 1 (ρB→C (πB (S))))) . Réponse. Soit {A : a} n’importe quel tuple de πA (R 1 S). Donc, il existe b, c tels que {A : a, B : b, C : c} ∈ R 1 S. Donc, il existe b, c tels que {A : a, B : b} ∈ R et {B : b, C : c} ∈ S. Donc, il existe b tel que {A : a, B : b} ∈ R et {B : b} ∈ πB (S). Donc, il existe b tel que {A : a, B : b} ∈ R et {C : b} ∈ ρB→C (πB (S)). Donc, il existe b tel que {A : a, B : b, C : b} ∈ R 1 ρB→C (πB (S)). Donc, il existe b tel que {A : a, B : b, C : b} ∈ σB=C (R 1 ρB→C (πB (S))). Donc, {A : a} ∈ πA (σB=C (R 1 (ρB→C (πB (S))))). 2 Question 29 Soit q1 la requête: πCru,Qualite (VINS) 1 ρQualite→Qual (πCru,Qualite (VINS)) et q2 la requête: πCru (VINS) − πCru (q1 − σQualite=Qual (q1 )) Exprimez la requête q2 en français. Réponse. Donnez tous les crus qui ont toujours été de la même qualité. 2 Question 30 Écrivez une requête en algèbre relationnelle pour répondre à la question: Quelle est la population de la capitale du Mali? La base de données est celle de la question 3. Réponse. Créons d’abord, à l’aide de la requête CC définie ci-dessous, une relation avec attributs Country et Capital , telle qu’un tuple {Country : x, Capital : y} signifie que y est la capitale de x: CC := ρName→Country (πName,Capital (Countries)) . La requête demandée: πPopulation ((ρName→Capital (Cities)) 1 (σCountry=Mali (CC ))) . 2 63 Question 31 Écrivez une requête en algèbre relationnelle pour répondre à la question: Quelle monnaie est utilisée dans plusieurs pays? La base de données est celle de la question 3. Réponse. Introduisons d’abord une abréviation: σA6=B (φ) est une abréviation pour φ − σA=B (φ), où A, B ∈ sorte(φ). Définissons la requête Currencies comme suit: Currencies := πName,Currency (Countries) . Alors la requête demandée est: πCurrency (σCountry6=Name ((ρName→Country (Currencies)) 1 Currencies)) . 2 Question 32 Soit R une relation avec attributs A et B, et S une relation avec attributs B et C. Prouvez ou réfutez: Quel que soit le contenu de R et S, π{A,B} (R 1 S) = R. Réponse. Choisissons S vide et R non-vide. Alors π{A,B} (R 1 S) est vide, et donc différent de R. 2 Question 33 Soient R et S deux relations avec les mêmes attributs A et B. Prouvez ou réfutez: Il n’existe pas d’expression algébrique φ(R, S) telle que: 1. quel que soit le contenu de R et S, φ(R, S) = R ∪ S, et 2. l’union (∪) n’apparaı̂t pas en φ(R, S). Si l’on prend, par exemple, φ(R, S) = σA=B (R 1 ρB→C (S)), il est clair que φ(R, S) et R ∪ S n’ont pas toujours le même contenu. Réponse. Le nombre de tuples dans une relation R est notée |R|. Il est facile à prouver que (φ, φ1 , φ2 sont des expressions en algèbre SPJRUD qui contiennent R et S): |σA=B (φ)| |σA=a (φ)| ≤ |φ| ≤ |φ| (8.1) (8.2) |πX (φ)| ≤ |φ| |φ1 1 φ2 | ≤ |φ1 | × |φ2 | (8.3) (8.4) |ρA→B (φ)| ≤ |φ| |φ1 − φ2 | ≤ |φ1 | (8.5) (8.6) Choisissons les relations R et S telles que |R| = |S| = 1 et |R ∪ S| = 2. Par exemple, R A 0 B 1 S A 1 B 0 R∪S A 0 1 B 1 0 Soit φ(R, S) une requête quelconque en algèbre SPJRD (donc sans Union). On prouve |φ| ≤ 1. Preuve par induction sur la structure de φ (la manière dont φ est composé). La base d’induction est simple: Si φ ≡ R ou φ ≡ S, alors |φ| = 1. Ensuite, l’étape d’induction: CAS φ ≡ σA=B (φ1 ). Par hypothèse d’induction, |φ1 | ≤ 1. Par (8.1), |φ| ≤ 1. 64 CAS φ ≡ σA=b (φ1 ). Analogue. CAS φ ≡ πX (φ1 ). Analogue. CAS φ ≡ ρA→B (φ1 ). Analogue. CAS φ ≡ φ1 1 φ2 . Par hypothèse d’induction, |φ1 | ≤ 1 et |φ2 | ≤ 1. Par (8.4), |φ| ≤ 1. CAS φ ≡ φ1 − φ2 . Par hypothèse d’induction, |φ1 | ≤ 1. Par (8.6), |φ| ≤ 1. Donc |φ(R, S)| ≤ 1. Par conséquent, φ(R, S) 6= R ∪ S. 2 Question 34 Démontrez que l’algèbre SPJRUD est plus puissante que l’algèbre SPJRU (sans différence). Hint: Soit Q une requête qui porte sur une seule relation. On appelle Q monotone si pour n’importe quelles relations I et J, si I ⊆ J alors Q(I) ⊆ Q(J). Question 35 Prouvez: aucun opérateur de base de l’algèbre relationnelle est redondant. Question 36 Écrivez une requête en algèbre relationnelle pour répondre à la question: Quel chauffeur a été à toutes les destinations? La base de données est celle de la question 4. Réponse. Soit R := (πDriver (TRIPS ) 1 DESTINATIONS ) − ρDestination→Name (πDriver ,Destination (TRIPS )) Un tuple {Driver : d, Name; n} en R signifie que le chauffeur d n’a jamais fait une excursion à la destination n. Donc, if faut retenir tout chauffeur qui ne figure pas en R: πDriver (TRIPS ) − πDriver (R) 2 Question 37 Pour la base de données de la question 4, écrivez une requête en algèbre relationnelle pour trouver les destinations qui n’ont jamais été visitées par John. Réponse. DESTINATIONS − ρDestination→Name (πDestination (σDriver =John (TRIPS ))) 2 Question 38 Comment peut-on exprimer la requête {x | ∃y(R(x, a, y) ∧ ¬∃z(R(x, b, z)))} en algèbre relationnelle? Réponse. Supposez que le schéma de R est ABC. πA (σB=a R) − πA (σB=b R) 2 Question 39 Considérez les tables: 65 PERSONNE(P#, Nom, Prenom, Adresse) PRIMARY KEY(P#) VEHICULE(V#, Marque, Type) PRIMARY KEY(V#) CONDUCTEUR(P#, V#, NbAcc) PRIMARY KEY(P#, V#) FOREIGN KEY(P#) REFERENCES PERSONNE FOREIGN KEY(V#) REFERENCES VEHICULE Les relations PERSONNE et VEHICULE ont les significations évidentes. La relation CONDUCTEUR associe les personnes et les véhicules et mémorise le nombre d’accidents auxquels a participé un conducteur donné au volant d’un véhicule donné. La valeur pour NbAcc est un entier positif (≥ 1). Exprimer en algèbre relationnelle la requête suivante: Donnez le nom et le prénom pour chaque personne qui a participé à deux accidents au volant de deux véhicules différents. Par exemple, pour la table CONDUCTEUR P# P1 P1 P1 P2 V# V1 V2 V3 V1 NbAcc 1 3 1 2 le résultat se compose du nom et prénom de P1. Question 40 Considérez les tables suivantes avec les significations évidentes. MANGE Personne Anne Anne Anne Bill Bill Ed Ed Ed Ed Aliment pomme steak tomate pomme tomate pomme orange salade poulet NOURRITURE Exprimez la requête suivante en algèbre relationnelle: Qui est végétarien (c’est-à-dire, qui ne mange pas de viande)? (Bill dans l’exemple.) Question 41 Prenons la base de données avec les tables: FOURNISSEURS(F#, FNom, Ville) PRIMARY KEY(F#) PRODUITS(P#, PNom, Couleur) PRIMARY KEY(P#) STOCK(F#, P#) PRIMARY KEY(F#, P#) FOREIGN KEY(F#) REFERENCES FOURNISSEURS FOREIGN KEY(P#) REFERENCES PRODUITS Aliment pomme steak tomate orange salade poulet poire Categorie fruit viande légume fruit légume viande fruit 66 Les relations FOURNISSEURS et PRODUITS ont les significations évidentes. La relation STOCK contient un tuple {F#:f, P#:p} si le fournisseur f garde le produit p en stock. Exprimez en algèbre relationnelle la requête suivante: Donnez les numéros des fournisseurs qui gardent à la fois un produit rouge et un produit bleu en stock. Question 42 Soit R une relation sur le schéma {A, B} représentant un graphe. Un tuple {A : a, B : b} signifie qu’il existe un arc de a vers b, où a et b représentent des nœuds. Écrivez une requête pour déterminer si R est symétrique. C’est-à-dire, est-ce que pour tout arc il existe un arc inverse? Écrivez une requête en utilisant l’algèbre, le calcul, et SQL. Question 43 Considérez les tables S(S#, SNAME, STATUS, CITY) P(P#, PNAME, COLOR, WEIGHT, CITY) J(J#, JNAME, CITY) SPJ(S#, P#, J#, QTY) Exprimez les requêtes suivantes à l’aide de l’algèbre relationnelle, le calcul relationnel, et SQL. 1. Donnez les noms des fournisseurs qui fournissent à la fois un produit rouge et un produit vert au même projet à Londres. 2. Donnez les noms des produits qui sont fournis à un ou plusieurs projets en dehors de Londres. Question 44 Il se fait que souvent (toujours ?) on peut éviter l’usage de la sélection de la forme “attribut=attribut”. Par exemple, si R est une relation avec schéma {A} et S une relation avec schéma {B}, alors la requête πA (σA=B (R 1 S)) donne les tuples de S qui se trouvent aussi en R. On peut écrire cette même requête sans utiliser σA=B (·), comme suit: R 1 ρB→A (S). Supposez que l’on vous interdise d’utiliser la sélection de la forme “attribut=attribut” en algèbre SPJRUD, tout en permettant la sélection de la forme “attribut=constante”. Est-ce que, oui ou non, cette limitation syntaxique diminuerait la puissance de l’algèbre? Expliquez de manière très détaillée. Question 45 Pour la base de données de la question 10, donnez une requête SPJRUD pour répondre à la question: Donnez les villes qui ont organisé les jeux olympiques plus qu’une fois. Question 46 Cette question porte sur la base de données de la question 11. On dit qu’un mariage est superbe si les deux conjoints ont une bière favorite commune. Dans l’exemple, seul le mariage de Pierre et Caroline est superbe. Écrivez une requête en algèbre relationnelle qui donne les noms des hommes mariés dont le mariage n’est pas superbe. Utilisez le moins possible la sélection. Pour l’exemple, la réponse est Oncle Urbain et Jim. Question 47 Soit R une relation avec un seul attribut A qui contient des nombres naturels. Écrivez une requête q en algèbre relationnelle qui donne l’ensemble suivant: {{A : i, B : j} | {A : i} ∈ R et {A : j} ∈ R et i < j et pour tout k, si i < k < j, alors {A : k} 6∈ R} Par exemple, R A 7 8 10 17 23 q(R) ; A B 7 8 8 10 10 17 17 23 67 On peut se servir des sélections avec < et ≤ : σA<B (S) := {t ∈ S | t(A) < t(B)} σA≤B (S) := {t ∈ S | t(A) ≤ t(B)} Question 48 Soient R et S deux ensembles d’attributs. Soit r une relation sur R, et s une relation sur S. Démontrez (à l’aide d’une preuve mathématique) ou réfutez (à l’aide d’un contre-exemple) l’expression suivante: πR (r 1 s) = r 1 πR∩S (s) Exercices sur le Chapitre 4 Question 49 Pour la base de données de la question 6, donnez une requête en calcul relationnel pour la question suivante: Donnez les écuries qui n’ont jamais gagné de Grand Prix. (Benneton, McLaren et Renault; notez que G. Fisichella n’était plus chez Benneton au moment où il a gagné le GP de Belgique.) Question 50 Pour la base de données de la question 7, donnez une requête en calcul relationnel pour la question: Qui sont les chefs de E3? (E1 et E5 dans l’exemple) Question 51 Soit R une relation sur le schéma AB. Traduisez la requête {x | ∃w(R(x, w)) ∧ ∃w(∃v(R(v, w)) ∧ ¬R(x, w))} en algèbre relationnel SPJRUD, en n’utilisant que les six opérateurs de base. Ajoutez une explication en français. Question 52 Pour la base de données de la question 9, écrivez une requête en calcul relationnel pour répondre à la question: Donnez tout individu qui n’est pas marié. (Mon chat et Jean Bidon dans l’exemple). Question 53 Pour la base de données de la question 18, écrivez une requête en calcul relationnel pour répondre à la question: Qui a déjà visité deux restaurants italiens dans des villes différentes? l’exemple.) (Jean dans Question 54 Exprimez à l’aide du calcul les requêtes suivantes: 1. Trouver les personnes qui ne boivent que des vins de la qualité A. 2. Quel cru a été bu par chaque personne? Utilisez les tables du chapitre 2. Question 55 Traduisez la requête q2 de la question 29 en calcul relationnel. Réponse. {x | ∃y(∃z(VINS(x, y, z) ∧ ¬(∃v(∃w(VINS(x, v, w) ∧ ¬(z = w))))))} Si on prend la liberté d’alléger la syntaxe: {x | ∃y, z(VINS(x, y, z) ∧ ¬∃v, w(VINS(x, v, w) ∧ z 6= w))} En mots simples: donnez tout x tel qu’il existe un tuple hx, y, zi en VINS pourvu qu’il n’existe aucun autre tuple hx, v, wi qui témoigne que le cru x a eu une qualité w autre que z (donc w 6= z). 2 68 69 Question 56 Soient R et S deux relations avec un seul attribut. Considérez les requêtes les suivantes: q1 q2 = = {x | R(x) ∨ ¬S(x)} {x | ¬(R(x) ∨ ¬S(x))} Quelle des deux requêtes est erronée, et pourquoi? Réponse. Si φ(x) dénote la formule R(x) ∨ ¬S(x), alors la formule φ(a) est Vrai pour toute constante a qui ne se trouve pas en S. Ceci montre que la requête q1 dépend du domaine d’interprétation. Par contre, si on écrit la requête q2 comme {x | ¬R(x) ∧ S(x)} , il est clair que cette requête est équivalente à la requête S − R de l’algèbre relationnelle. 2 Question 57 Soit R une relation sur ABC. Écrivez une requête en calcul relationnel qui résulte en une réponse vide si et seulement si la relation R satisfait la DF A → B. Le nombre d’attributs du résultat est sans importance. Réponse. {x | ∃y1 (∃y2 (∃z1 (∃z2 (R(x, y1 , z1 ) ∧ R(x, y2 , z2 ) ∧ ¬(y1 = y2 )))))} 2 Question 58 Écrivez une requête en calcul relationnel pour répondre à la question: Qui a conduit un autobus de la marque Renault pour aller à “Antwerp Zoo”? La base de données est celle de la question 4. Réponse. {x | ∃y ( ∃u(∃v(TRIPS (u, y, x, Antwerp Zoo, v))) ∧ ∃w(∃z(BUSES (y, w, Renault, z))) ) } 2 Question 59 Traduisez la requête suivante en français: {x | DESTINATIONS (x) ∧ ¬(∃u(∃v(∃w(TRIPS (u, v, John, x, w)))))} La base de données est celle de la question 4. Question 60 Pour la base de données de la question 5, écrivez une requête en calcul relationnel pour répondre à la question: Quels produits sont disponibles en plusieurs couleurs dans un même dépôt? (seulement hinge) 70 Réponse. {y | ∃x(∃z1 (∃z2 (∃q1 (∃q2 (STOCK (x, y, z1 , q1 ) ∧ STOCK (x, y, z2 , q2 ) ∧ ¬(z1 = z2 ))))))} 2 Question 61 Pour la base de données de la question 5, écrivez une requête en calcul relationnel pour répondre à la question: Quel entrepôt ne stocke aucun produit rouge? (D1 et D3) Réponse. On utilisera is a warehouse(x) comme abbréviation pour: ∃v(∃w(WAREHOUSES (x, v, w))) . La requête demandée: {x | is a warehouse(x) ∧ ¬∃y(∃q(STOCK (x, y, red, q)))} (8.7) Une autre solution est: {x | is a warehouse(x) ∧ ∀y(∀z(∀q(¬STOCK (x, y, z, q) ∨ ¬(z = red))))} (8.8) 2 Question 62 Pour la base de données de la question 5, écrivez une requête en calcul relationnel pour répondre à la question: Quel entrepôt ne stocke aucun produit non-rouge? (D3 et D4) Réponse. Il suffit de remplacer ¬(z = red) par (z = red) dans la solution (8.8) ci-dessus. 2 Question 63 Pour la base de données de la question 40, exprimez la requête suivante en calcul relationnel: Qui mange au moins deux fruits différents? (Ed dans l’exemple.) Question 64 Pour la base de données de la question 41, exprimez en calcul relationnel la requête suivante: Donnez les numéros des fournisseurs qui ne gardent aucun produit rouge en stock. Question 65 Comment peut-on exprimer la requête {x | R(x, a) ∧ ∃y(R(b, y))} en algèbre relationnelle? Et en SQL? Question 66 Pour la base de données de la question 10, donnez une requête en calcul relationnel pour répondre à la question: Donnez les athlètes qui n’ont jamais changé de nationalité. Question 67 Cette question porte sur la base de données de la question 11. On dit qu’une personne A surpasse-en-matière-de-bière une personne B si A aime au moins toutes les bières que B aime. Par exemple, Oncle Urbain surpasse-en-matière-de-bière An et Pierre. Évidemment, puisque Tante Odette n’aime aucune bière et puisque Nicolas est trop jeune pour boire de la bière, tous mes proches surpassent-en-matière-de-bière Tante Odette et Nicolas. Écrivez une requête en calcul relationnel qui donne toute femme qui surpasse-en-matière-de-bière au moins un homme né en 1985 ou avant. Pour l’exemple, la réponse est Caroline et An. 71 Question 68 La table prix permet de comparer le prix des albums entre différents magasins. Prix Album What’s Inside What’s Inside What’s Inside À Tatons À Tatons Artiste Joan Armatrading Joan Armatrading Joan Armatrading Axelle Red Axelle Red Magasin Proxis.be Free Record Shop Carrefour Proxis.be Free Record Shop Prix 18.99 14.99 10.55 9.99 8.99 Donnez une requête en calcul relationnel qui affiche pour chaque album, l’endroit [les endroits dans le cas d’un ex æquo] où on peut acheter cet album au meilleur prix. Prix Album What’s Inside À Tatons Artiste Joan Armatrading Axelle Red Magasin Carrefour Free Record Shop Exercices sur le Chapitre 5 Question 69 Pour la base de données de la question 6, donnez une requête en SQL pour la question suivante: Quel pilote a gagné le plus de Grands Prix? (M. Schumacher ) Question 70 Pour le schéma de la question 8, écrivez une requête SQL pour répondre à la question: Donnez tout chef qui ne travaille que pour le département dont il est chef. Pour la base de données de la question 8, la réponse est An. Question 71 Pour la base de données de la question 9, écrivez une requête en SQL pour répondre à la question: Quel est le nombre de femmes mariés qui habitent Mons? (2 dans l’exemple) Question 72 Pour la base de données de la question 9, écrivez une requête en SQL pour répondre à la question: Quel est l’homme marié le plus âgé? (Oncle Urbain dans l’exemple) Question 73 Pour la base de données de la question 18, écrivez une requête en SQL pour répondre à la question: Qui n’a jamais visité un restaurant non-italien? (An dans l’exemple) Question 74 Consider a suppliers-parts-projects database. Suppliers (S) and parts (P) are as in the course handouts. Projects (J) are uniquely identified by a project number (J#). Other attributes of projects are project name (JNAME) and city. The significance of an SPJ (shipment) tuple is that the specified supplier supplies the specified part to the specified project in the specified quantity (and the combination S#-P#-J# uniquely identifies such a tuple). Write a suitable data definition for this database. Réponse. CREATE TABLE S ( ... ) ; CREATE TABLE P ( ... ) ; CREATE TABLE J ( J# J#, JNAME NAME, CITY CITY, PRIMARY KEY ( J# ) ) ; 72 73 CREATE TABLE SPJ ( S# S#, P# P#, J# J#, QTY QTY, PRIMARY KEY ( FOREIGN KEY ( FOREIGN KEY ( FOREIGN KEY ( S#, P#, J# ), S# ) REFERENCES S, P# ) REFERENCES P, J# ) REFERENCES J ) ; 2 Question 75 Get part number for parts supplied by a supplier in London. Réponse. SELECT FROM WHERE AND DISTINCT SPJ.P# SPJ, S SPJ.S# = S.S# S.CITY = ‘London’ ; 2 Question 76 Get project numbers for projects supplied by at least one supplier not in the same city. Réponse. SELECT FROM WHERE AND AND DISTINCT SPJ.J# SPJ, S, J SPJ.S# = S.S# SPJ.J# = J.J# S.CITY <> J.CITY ; 2 Question 77 Get part numbers of parts supplied to some project in an average quantity of more than 320. Réponse. SELECT FROM GROUP HAVING DISTINCT SPJ.P# SPJ BY SPJ.P#, SPJ.J# AVG ( SPJ.QTY ) > 320 ; 2 Question 78 Get project numbers for projects supplied entirely by S1. Réponse. 74 SELECT FROM WHERE AND ( SPJX.J# SPJ AS SPJX SPJX.S# = ‘S1’ NOT EXISTS SELECT * FROM SPJ AS SPJY WHERE SPJY.J# = SPJX.J# AND SPJY.S# <> ‘S1’ ) ; 2 Question 79 Get all cities in which at least one supplier, part, or project is located. Réponse. SELECT FROM UNION SELECT FROM UNION SELECT FROM CITY S CITY P CITY J ; 2 Question 80 Get all pairs of supplier numbers, Sx and Sy say, such that Sx and Sy supply exactly the same set of parts each. Réponse. SELECT FROM WHERE ( AND ( SX.S#, SY.S# S AS SX, S AS SY NOT EXISTS SELECT * FROM SPJ AS SPJX WHERE SPJX.S# = SX.S# AND NOT EXISTS ( SELECT * FROM SPJ AS SPJY WHERE SPJY.S# = SY.S# AND SPJY.P# = SPJX.P# ) ) NOT EXISTS SELECT * FROM SPJ AS SPJY WHERE SPJY.S# = SY.S# AND NOT EXISTS ( SELECT * FROM SPJ AS SPJX WHERE SPJX.S# = SX.S# AND SPJX.P# = SPJY.P# ) ) ; 2 75 Question 81 Get supplier-number/part-number pairs such that the indicated supplier does not supply the indicated part. Réponse. SELECT FROM WHERE ( S.S#, P.P# S, P NOT EXISTS SELECT * FROM SPJ WHERE SPJ.S# = S.S# AND SPJ.P# = P.P# ) ; 2 Question 82 Get supplier numbers for suppliers supplying some project with part P1 in a quantity greater than the average shipment quantity of part P1 for that project. Réponse. SELECT FROM WHERE AND ( SPJX.S# SPJ AS SPJX SPJX.P# = ‘P1’ SPJX.QTY > SELECT AVG ( SPJY.QTY ) FROM SPJ AS SPJY WHERE SPJY.P# = ‘P1’ AND SPJY.J# = SPJX.J# ) ; 2 Question 83 Get project numbers for projects supplied with part P1 in an average quantity greater than the greatest quantity in which any part is supplied to project J1. Réponse. SELECT FROM WHERE GROUP HAVING ( SPJX.J# SPJ AS SPJX SPJX.P# = ‘P1’ BY SPJX.J# AVG ( SPJX.QTY ) > SELECT MAX ( SPJY.QTY ) FROM SPJ AS SPJY WHERE SPJY.J# = ‘J1’ ) ; 2 Question 84 Pour la base de données de la question 5, écrivez une requête en SQL pour répondre à la question: Combien de produits rouges sont stockés en dehors de Mons? (750 dans l’exemple) Quel est le résultat de votre requête si tous les produits en dehors de Mons sont non-rouges? Question 85 Traduisez la requête suivante en français: 76 SELECT FROM WHERE AND GROUP BY HAVING W1.CITY WAREHOUSES W1, STOCK S1 W1.W# = S1.W# S1.COLOR <> ‘red’ W1.CITY SUM(S1.QTY) > ( SELECT SUM(S2.QTY) FROM WAREHOUSE W2, STOCK S2 WHERE W2.W# = S2.W# AND W2.CITY = W1.CITY AND S2.COLOR = ‘red’ ); La base de données est celle de la question 5. Question 86 Pour la base de données de la question 10, donnez une requête SQL qui donne le nombre total de médailles par année et par pays, pourvu que ce nombre soit supérieur à zéro. Pour cet exemple, la réponse est comme suit: Année 2004 2004 2004 2000 2000 Pays USA JAP GBR NED GBR Nombre 2 1 1 1 1 Question 87 Pour la base de données de la question 11, donnez une requête SQL pour répondre à la question : “Quelle bière apparaı̂t le plus grand nombre de fois comme bière favorite ?” Pour l’exemple, la réponse est Leffe. Exercices sur le Chapitre 6 Question 88 Voici une table qui sert à stocker des informations sur les cours à l’UMH. Tout cours a un code et un titre unique, et est enseigné par un seul enseignant. Les leçons commencent à 8h15, 10h15, 13h15 ou 15h15, et durent 2 heures. On ne tient pas compte des jours fériés. Un cours peut avoir comme prérequis un certain nombre d’autres cours. La première rangée signifie que le cours S/3I/2, intitulé “Systèmes d’information”, est enseigné par J. Wijsen; les leçons de ce cours ont lieu à la salle 3E11/P, chaque jeudi du deuxième semestre, à partir de 13h15. Le cours S/2I/17 est un prérequis pour ce cours. La deuxième rangée stipule que le cours S/3I/5 est un autre prérequis pour le cours S/3I/2. Code S/3I/2 S/3I/2 S/2I/17 S/3I/5 S/1I/3 S/1I/3 Titre Systèmes d’information Systèmes d’information Fichiers et Bases de Données Structure de l’information Informatique I Informatique I Enseignant J. Wijsen J. Wijsen J. Wijsen V. Bruyère P. Dufour P. Dufour Sem 2 2 1 1 1 1 Jour Jeudi Jeudi Vendredi Vendredi Vendredi Mardi Heure 13h15 13h15 10h15 10h15 10h15 15h15 Local 3E11/P 3E11/P 3E11/P 3E10/P 211/VI 209/VI Prerequis S/2I/17 S/3I/5 S/1I/3 S/1I/3 — — Quelles sont les DF valables pour ces données? Remarquons que ces DF doivent exprimer, entre autres, que deux cours différents qui sont enseignés au même moment, doivent avoir des enseignants et des locaux différents. Question 89 Considérons le schéma {Code, Titre, Enseignant, Sem, Jour , Heure, Local , Prerequis} avec les DF de la question 88. Quelles sont les clés de ce schéma? Est-ce que ce schéma est en 3NF? Expliquez. Question 90 Supposons une table FILMS qui sert à enregistrer des informations sur des films. Les attributs ont les significations évidentes. Deux films peuvent porter le même Titre, mais la combinaison Titre plus Directeur constitue une identification unique d’un film. Supposons que la production de chaque film est assurée par une seule société. L’attribut Minutes donne la durée d’un film en minutes. L’attribut Premiere est la date de la première. Plusieurs premières peuvent avoir lieu à la même date pourvu que les films concernés n’aient pas de régisseurs ou acteurs en commun, afin de permettre aux directeurs et acteurs d’assister aux premières de leurs films. Voici un exemple de cette table: FILMS Titre The Birds The Birds Titanic Titanic The Birds The Birds Directeur A. Hitchcock A. Hitchcock J. Cameron J. Cameron J. Cameron J. Cameron Acteur T. Hedren R. Taylor K. Winslet L. DiCaprio K. Winslet R. Taylor Societe Universal Pictures Universal Pictures Twentieth Century Fox Twentieth Century Fox Paramount Pictures Paramount Pictures Premiere 28/03/1963 28/03/1963 19/12/1997 19/12/1997 28/01/2001 28/01/2001 Minutes 113 113 195 195 182 182 a. Pour simplifier la notation, désignons chaque attribut par sa première lettre (donc T pour Titre, D pour Directeur,. . . ). Donnez l’ensemble Σ de dépendances fonctionnelles qui doivent être satisfaites par toute relation “valide” sur U := {T, D, A, S, P, M }. Donnez les clés du schéma (U, Σ) obtenu. 77 78 b. Expliquez pourquoi le schéma (U, Σ) qui résulte du point (a) n’est pas en 3NF. Donnez une décomposition en 3NF qui préserve les DF et les informations. c. Si la décomposition qui résulte du point (b) n’est pas en BCNF, donnez une décomposition en BCNF qui préserve les informations (mais pas nécessairement les DF). Réponse. Σ ={ T D → SP M , DP → T , AP → T D } Les clés sont T DA et AP . Cette relation n’est pas en 3NF parce que T D → S est une conséquence logique de Σ, mais T D n’est pas une superclé et S ne fait pas partie d’une clé. Le bon sens évoque une décomposition en deux composants: un premier composant pour stocker la société, la date de la première et la durée de tout film, un deuxième composant pour stocker les acteurs de tout film. Composant 1 2 Schéma T DSP M T DA DF Clé(s) {T D → SP M , DP → T } T D, DP {} T DA BCNF? oui oui Cette décomposition préserve les informations (pourquoi?). Il est clair qu’on a perdu les DF AP → T et AP → D. Donc ceci est une décomposition en BCNF qui préserve le contenu. Essayons ensuite d’ajouter au deuxième composant l’attribut P afin de préserver AP → T D: Composant 1 2 Schéma T DSP M T DAP DF Clé(s) BCNF? {T D → SP M , DP → T } T D, DP oui {AP → T D, T D → P, DP → T } AP, T DA non 3NF? oui oui Ceci est une décomposition en 3NF qui préserve le contenu (notons que T DP → SM est une conséquence logique de Σ) et les contraintes. Remarquons qu’on peut supprimer l’attribut P dans le premier composant: Composant 1 2 Schéma T DSM T DAP DF Clé(s) BCNF? {T D → SM } TD oui {AP → T D, T D → P, DP → T } AP, T DA non 3NF? oui oui Ceci est une autre décomposition en 3NF qui préserve le contenu (notons que T D → SM est une conséquence logique de Σ) et les contraintes. Pour l’exemple, la dernière décomposition donne les tables suivantes: Titre The Birds Titanic The Birds Directeur A. Hitchcock J. Cameron J. Cameron Titre The Birds The Birds Titanic Titanic The Birds The Birds Societe Universal Pictures Twentieth Century Fox Paramount Pictures Directeur A. Hitchcock A. Hitchcock J. Cameron J. Cameron J. Cameron J. Cameron Acteur T. Hedren R. Taylor K. Winslet L. DiCaprio K. Winslet R. Taylor Minutes 113 195 182 Premiere 28/03/1963 28/03/1963 19/12/1997 19/12/1997 28/01/2001 28/01/2001 79 2 Question 91 La Société Nationale des Cinémas Belges (SNCB) stocke des informations sur les cinémas et leur programmation actuelle dans la table montrée ci-dessous. Les premières deux lignes signifient que le film “Felice” de P. Delpeut est programmé à 19:15 et à 21:15 au cinéma Utopia à Alost. Ce film, avec une durée de 1 heure et 39 minutes, est aussi programmé au cinéma Rex à Alost, à 18:00 (cinquième ligne). Il ne faut pas confondre ce film avec celui de S. Spielberg montré à l’Utopia à Namur (dernière ligne). Bien sûr, il peut y avoir plusieurs cinémas dans la même ville, mais il est impossible d’avoir deux cinémas différents à la même adresse postale. De plus, tous les cinémas de la même ville auront des noms différents. Chaque cinéma ne dispose que d’une seule salle de projection. Dès lors, aucun cinéma ne peut programmer deux films différents au même moment. Un film est identifié de manière unique par son titre plus son régisseur. La durée d’un film est une donnée fixe. Notons que deux films différents peuvent avoir le même titre. Chaque cinéma possède un ou plusieurs numéros de téléphone, mais aucun numéro n’est partagé parmi plusieurs cinémas. CinémaNom Utopia Utopia Utopia Utopia Rex Utopia Utopia Rue 6 Place du Parc 6 Place du Parc 6 Place du Parc 6 Place du Parc 8 Rue du Marché 5 Avenue Codd 5 Avenue Codd Ville Alost Alost Alost Alost Alost Namur Namur Téléphone 053 66 33 33 053 66 33 33 053 88 44 44 053 88 44 44 053 44 22 22 081 33 66 99 081 33 66 99 Titre Felice Felice Felice Felice Felice Little Sister Felice Régisseur P. Delpeut P. Delpeut P. Delpeut P. Delpeut P. Delpeut T. Ravolta S. Spielberg Durée 1:39 1:39 1:39 1:39 1:39 1:30 2:05 Heure 19:15 21:15 19:15 21:15 18:00 18:15 19:00 Quelles sont les DF pour ce schéma? Réponse. • CinémaNom, Ville → Rue • Rue, Ville → CinémaNom • Téléphone → CinémaNom, Ville • CinémaNom, Ville, Heure → Titre, Régisseur • Titre, Régisseur → Durée 2 Question 92 Démontrez de manière précise que le schéma présenté à la question 91 ne satisfait pas la définition de BCNF. Question 93 Vous êtes engagé par la SNCB comme expert en BD. En effet, la société a remarqué que la table de la question 91 est difficile à maintenir dû à des informations dupliquées. Ceci ne vous étonne pas, car la violation de BCNF est évidente (voir question 92). Donnez une décomposition de cette table qui permet de stocker les mêmes informations et qui ne souffre pas des informations redondantes. Ajoutez les clés primaires et étrangères. Note: On peut se baser sur le “bon sens” pour arriver à la décomposition. Réponse. En s’appuyant sur le “bon sens,” on trouve la décomposition suivante: CINEMAS TELEPHONES FILMS PROGRAMME (CinémaNom, Ville, Rue) (Téléphone, CinémaNom, Ville) (Titre, Régisseur, Durée) (CinémaNom, Ville, Titre, Régisseur, Heure) 80 Néanmoins, cette décomposition n’est pas lossless join, comme le montre la relation R suivante qui satisfait toute DF: R CinémaNom a1 a1 Rue a2 a2 Ville a3 a3 Téléphone a4 b4 Titre b5 a5 Régisseur b6 a6 Durée b7 a7 Heure b8 a8 La décomposition donne: CINEMAS TELEPHONES FILMS PROGRAMME CinémaNom a1 CinémaNom a1 a1 Titre b5 a5 CinémaNom a1 a1 Rue a2 Ville a3 a3 Régisseur b6 a6 Ville a3 a3 Ville a3 Téléphone a4 b4 Durée b7 a7 Titre b5 a5 Régisseur b6 a6 Heure b8 a8 La jointure des composants donne un tuple ha1 , a2 , a3 , . . . , a8 i qui n’est pas en R. décomposition proposée n’est pas lossless join. Deux questions supplémentaires: Donc, la 1. Quel composant faut-il ajouter pour arriver à une décompostion en BCNF qui est lossless join et dependency preserving? 2. Après tout, le “bon sens” ne nous a pas vraiment trompés. Comprenez-vous porquoi? 2 Question 94 La table suivante sert à stocker les podiums (médaille d’or, d’argent et de bronze) de la natation aux jeux Olympiques. On ne prend compte que des courses individuelles, pas les courses de relais. • Supposons que tout athlète est identifié par un nom unique et invariable. Par exemple, l’athlète nommé “M. Phelps” de 2004 est le même que celui de 2000. • Un athlète ne peut pas changer de sexe. Néanmoins, il peut changer de nationalité. Dans l’exemple, M. Phelps a changé de la Grande-Bretagne (GBR) aux États-Unis (USA) entre 2000 et 2004. Évidemment, il est interdit de nager pour deux pays différents pendant les mêmes jeux Olympiques. • La finale d’une discipline a lieu à un jour déterminé. Par exemple, en 2004, la finale des 200 mètres papillon messieurs a eu lieu le 17/8. Dans une course, le temps du gagneur (médaille d’or) est inférieur au temps du deuxième (médaille d’argent); le temps du deuxième est inférieur à celui du troisième (médaille de bronze). Pour une course, il y a exactement une médaille de chaque couleur. Évidemment, un même nageur ne peut pas gagner deux médailles différentes dans une même course. Il est possible de gagner plusieurs médailles à une même date dans des disciplines différentes. • Les jeux Olympiques sont attribués à une seule ville: Athènes en 2004, Sydney en 2000,. . . Certaines villes, telles que Paris et Athènes, ont déjà organisé les jeux plus qu’une fois. 81 NATATION Année Ville 2004 Athènes 2004 Athènes 2004 Athènes 2004 Athènes 2000 Sydney 2000 Sydney Nage Papillon Papillon Papillon Libre Libre Papillon Distance 200 200 200 200 50 200 Sexe M M M M F M Date 17/8 17/8 17/8 16/8 23/9 23/9 .. . Athlète M. Phelps T. Yamamoto S. Parry M. Phelps I. de Bruijn M. Phelps Pays USA JAP GBR USA NED GBR Médaille Or Argent Bronze Bronze Or Argent Temps 1:54.04 1:54.56 1:55.52 1:45.32 0:24.32 1:55.19 • Quelles sont les DF pour ce schéma? Écrivez les DF en format X → A avec A un seul attribut; assurez que X est minimal. Évitez les DF redondantes, i.e. les DF qui sont une conséquence logique des autres. • Donnez une clé pour ce schéma. Question 95 Un club de tennis gère les réservations de ses terrains de tennis. Les dix terrains sont numérotés I, II, III, IV, . . . , X. L’attribut site indique si un terrain se trouve en salle (salle) ou en plein air (dehors); cette caractéristique d’un terrain ne change jamais. Les terrains peuvent être réservés en tranches d’une heure: la première tranche commence à 9h, la dernière à 19h. On stockera la personne (nom) qui fait la réservation, le terrain (terrain) et la tranche (jdate et tranche). L’attribut nom détermine une personne de manière unique. On enregistre aussi la date où la réservation a été introduite, c’est l’attribut rdate. La date où on introduit la réservation (rdate) est bien sûr antérieure à la date où on joue (jdate). L’attribut membre indique si la personne était membre du club au moment où la réservation était introduite. L’affiliation au club se fait sur base quotidienne; c’est-à-dire, une personne ne peut avoir des affiliations différentes à une même date. Le prix d’une réservation ne dépend que de deux facteurs: le site (les terrains en salle sont plus chers) et l’affiliation (les membres payent moins). Il faut veiller à ce qu’un même terrain ne soit réservé qu’une seule fois pour une même tranche. Notons qu’une même personne peut réserver plusieurs terrains au même moment. Par exemple, les deux premières rangées indiquent qu’à la date du 8 janvier, J. Henin a réservé le terrain IV pour le 22 janvier pendant deux tranches successives, à partir de 9h. Après vient K. Clijsters. Notons que le prix d’un terrain en salle est de 100 euros pour les membres et de 150 euros pour les non-membres. Apparemment, K. Clijsters est devenue membre du club à partir du 10 janvier; à cette date, elle introduit une réservation pour les terrains IV et II à l’heure du midi. rdate 8 jan 2004 8 jan 2004 9 jan 2004 10 jan 2004 10 jan 2004 nom J. Henin J. Henin K. Clijsters K. Clijsters K. Clijsters membre oui oui non oui oui terrain IV IV IV IV II site salle salle salle salle dehors 22 22 22 22 22 jdate jan 2004 jan 2004 jan 2004 jan 2004 jan 2004 tranche 9 10 11 12 12 prix 100 100 150 100 50 • Quelles sont les DF pour ce schéma? • Donnez une clé pour ce schéma. Question 96 La table suivante sert à stocker les réservations des chambres dans un hôtel. RESERVATIONS #Client NomClient 111 Jean Dufour 111 Jean Dufour 222 Pierre Dupont 222 Pierre Dupont 333 Jean Dufour Domicile Belgique Belgique France Espagne Belgique NrChambre 10 11 10 10 22 FaiteLe 10/08/2003 10/08/2003 12/06/2003 21/07/2003 11/08/2003 Séjour 14/10/2003 14/10/2003 15/10/2003 16/10/2003 15/10/2003 CartePaiement 1111–1111 4444–4444 2222–2222 3333–3333 1111–1111 82 Les deux premières rangées indiquent qu’à la date du 10/08/2003, Jean Dufour a contacté l’hôtel pour réserver les chambres 10 et 11 pour la date du 14/10/2003. Le 10/08/2003, Jean Dufour était domicilié en Belgique. Evidemment, une chambre ne peut être réservée qu’une seule fois pour une date donnée. Une carte de paiement est indispensable pour garantir une réservation; toute carte de paiement est personnalisée et portera le nom de la personne qui a demandé la réservation. On n’enregistra jamais plus d’une carte de paiement par réservation. Bien sûr, une personne peut avoir plusieurs cartes de paiement. Tout numéro de carte est unique au cours du temps. La même personne peut être connue sous différents identifiants (#Client). Par exemple, les identifiants 111 et 333 identifient tous les deux le porteur de la carte 1111–1111. Néanmoins, les identifiants des clients, comme les cartes de paiements, sont personnalisés et ne seront jamais réutilisés pour d’autres clients. Donc, bien que deux personnes différentes puissent occasionnellement avoir le même nom et domicile, ils ne peuvent jamais partager la même carte de paiement ou le même #Client. Une personne ne peut être domiciliée en différents pays au même temps. Néanmoins, le domicile d’une personne peut varier dans le temps. Par exemple, Pierre Dupont habitait d’abord en France, puis en Espagne. • Quelles sont les DF pour ce schéma? • Donnez une clé pour ce schéma. Question 97 Monsieur Bricolage est une entreprise qui loue des outils de bricolage (perceuses, bétonnières,. . . ) au grand public sur base journalière. NrOutil 111 111 232 333 999 Type perceuse perceuse bétonnière perceuse marteau Prix 34 37 233 37 3 NrNat 60 10 07 59 07 06 60 10 07 59 12 07 59 12 07 123 233 123 223 223 12 57 12 90 90 Nom Jean Leduc Anne Leblanc Jean Leduc Anne Leblanc Anne Leblanc Tel 053 053 054 016 016 56 56 26 99 99 65 65 23 33 33 34 34 11 34 34 Date 7 dec 2002 8 dec 2002 9 jan 2002 8 dec 2002 8 dec 2002 NrOutil dénote le numéro unique d’un outil. NrNat est le numéro national de l’emprunteur. Les autres attributs sont le type d’outil (Type), le prix journalier de location (Prix), le nom et le téléphone de l’emprunteur (Nom et Tel), la date de location (Date). Il n’y a qu’un seul prix pour un type d’outil pour une journée donnée. Par exemple, le 8 décembre 2002, le prix d’une perceuse était fixé à 37 Euros. Bien sûr, le prix d’un type d’outil peut augmenter au cours du temps. Évidemment, il ne peut y avoir qu’un seul emprunteur par jour et par outil. Le type d’un outil ne change pas. Deux personnes peuvent avoir le même nom. Le nom et le numéro national d’une personne ne changent jamais. Le numéro de téléphone d’une personne peut évoluer. Néanmoins, si une personne loue deux outils au même jour, ces deux locations seront accompagnées du même numéro d’appel. • Quelles sont les DF pour ce schéma? • Donnez toutes les clés pour ce schéma. Question 98 La Société du Tour de France stocke dans une table pour chaque étape: • La date (jour + année) de l’étape. • La ville de départ et d’arrivée. • Le vainqueur avec son équipe (VEquipe) et sa nationalité (VNat). • Le coureur qui a remporté le maillot jaune à la fin de l’étape (Jaune), avec son équipe (JEquipe) et sa nationalité (JNat). 83 L’attribut Nr donne le numéro du tour; par exemple, la 61ème édition du Tour de France avait lieu en 1974. Tout coureur est identifié de manière unique par son nom; la nationalité d’un coureur ne change jamais. Un coureur peut changer d’équipe entre deux éditions, mais il est clair que les équipes ne changent pas pendant les trois semaines de course. Le Tour de France étant toujours organisé au début de l’été, aucune édition n’est à cheval sur deux années civiles. Le deuxième tuple signifie que dans la 61ème édition, qui avait lieu en 1974, l’étape du 22/7 entre Bazas et Pau a été remporté par le belge Rik Looy, qui en plus a pris le maillot jaune de l’espagnol Juan Epo. En 1974, Rik Looy était payé par Molteni. Notez que l’année suivante, en 1975, Rik Looy avait un autre sponsor (Dotcom). ETAPES Nr Année 61 1974 61 1974 61 1974 61 1974 62 1975 Jour 21/7 22/7 23/7 24/7 22/7 Départ Bazas Bazas Pau Aime Metz Arrivée Bazas Pau La Mongie Cluses Nancy Vainqueur Jean Vite Rik Looy Ed Vlug Ed Vlug Jim Fast ... VEquipe Dotcom Molteni Molteni Molteni Molteni VNat F B NL NL UK Jaune Juan Epo Rik Looy Rik Looy Juan Epo Rik Looy JEquipe Cofidis Molteni Molteni Cofidis Dotcom JNat E B B E B Quelles sont les DF pour ce schéma? Question 99 Vous êtes engagé par la Société du Tour de France comme expert en BD. En effet, la Société a remarqué que la table de la question 98 est difficile à maintenir dû à des informations dupliquées. Ceci ne vous étonne pas, car la violation de BCNF est évidente. Donnez une décomposition de cette table qui permet de stocker les mêmes informations et qui ne souffre pas des informations redondantes. Ajoutez les clés primaires et étrangères. Question 100 Chaque année, l’UMH organise la Journée Math-Sciences. Les scientifiques de l’université donnent alors des exposés destinés aux élèves du secondaire. Chaque exposé est donné par un seul conférencier et appartient à exactement une discipline parmi bio, chimie, info, math et physique. Les exposés ont lieu en trois sessions parallèles; chaque session est attribuée à un amphithéâtre. Les exposés durent une heure et commencent à 9h00, 10h30, 13h00, 14h30. Ceci pourrait être le programme pour l’année 2005: 9h00 10h30 13h00 14h30 Van Gogh Plisnier Curie 3 est premier! Ch. Michaux math P=NP? R. Astier info Les abeilles P. Falmagne bio L’élément H M. Hecq chimie La résonance P. Gillis physique Fermat R. Astier math La vie sur Mars M. Wautelet physique Devenir 100 ans P. Rasmont bio Le recyclage Ph. Dubois chimie Les bourdons P. Rasmont bio Vivre en 2100 M. Wautelet physique La récursivité V. Bruyère info Un conférencier est identifié de manière unique par son nom. Chaque exposé a un intitulé unique et n’est donné qu’une seule fois pendant la journée. Les organisateurs assurent qu’il n’ait jamais deux exposés de la même discipline au même moment, afin de permettre aux participants de suivre tous les exposés d’une même discipline. Le même conférencier peut donner deux exposés sur des disciplines différentes (par exemple, R. Astier donne un exposé d’info et de math). Bien sûr, aucun 84 conférencier peut assurer deux exposés au même moment. Un amphithéâtre ne peut accueillir qu’un seul exposé à la fois. Les écoles qui souhaitent participer à cette journée fournissent une liste des élèves avec les exposés qu’ils souhaitent suivre. Chaque élève inscrit doit assister à quatre exposés successifs. Supposez que tout élève est identifié de manière unique par la combinaison de son nom plus son école. Deux élèves dans deux écoles différentes peuvent avoir le même nom. Pour chaque école, on enregistre aussi les noms d’un ou plusieurs professeurs qui accompagnent les élèves de leur école. Supposez que tout professeur est identifié de manière unique par son nom. Tout professeur est associé à une seule école. Toutes les données sont stockées dans une seule table. L’exemple ci-après nous montre que J. Petit, un élève du Collège St-Luc II, suivra d’abord l’exposé intitulé “3 est premier!”, puis l’exposé “La résonance”. Les professeurs V. Delue et E. Depré accompagnent les élèves de ce collège. Élève J. Petit J. Petit J. Petit J. Petit École Collège Collège Collège Collège St-Luc St-Luc St-Luc St-Luc II II II II Responsable V. Delue E. Depré V. Delue E. Depré Intitulé 3 est premier! 3 est premier! La résonance La résonance .. . Conférencier Ch. Michaux Ch. Michaux P. Gillis P. Gillis Discipline math math physique physique Heure 9h00 9h00 10h30 10h30 Amphi Van Gogh Van Gogh Plisnier Plisnier • Quelles sont les DF pour ce schéma? Écrivez les DF en format X → A avec A un seul attribut; assurez que X est minimal. Évitez les DF redondantes, i.e. les DF qui sont une conséquence logique des autres. • Donnez une clé pour ce schéma. Question 101 Le contrôle technique automobile stocke dans une base de données les informations sur les voitures contrôlées : • la marque et le type de voiture; • le carburant : diesel ou benzine; • l’année de construction et le numéro de châssis; • la plaque d’immatriculation; • les dates où la voiture a été contrôlée, avec le kilométrage (Km) et le numéro national (NN) du propriétaire au moment du contrôle. Les propriétés suivantes d’une voiture ne changent jamais : Marque, Type, Carburant, Année, Châssis#. Par contre, la plaque d’immatriculation et le propriétaire changent quand la voiture est vendue. Les plaques d’immatriculation sont personnalisées : une même plaque restera toujours attribuée au même numéro national. Une personne peut utiliser une plaque qui lui est attribuée pour plusieurs voitures au cours du temps, mais pas pour deux voitures différentes en même temps. Une voiture n’appartient qu’à une seule personne à la fois. Les voitures ne sont contrôlées qu’une fois par an. Il est donc impossible d’avoir deux enregistrements pour la même voiture sur la même journée. Le kilométrage d’une voiture ne diminuera jamais au cours du temps. Marque Renault Renault Renault Peugeot Type Clio Clio Clio 106 Carburant benzine benzine benzine diesel Année 1989 1989 1989 2003 Châssis# 123456789 123456789 123456789 000111222 .. . Plaque CGD689 CGD689 HHH111 CGD689 NN 1956 1956 1972 1956 06 06 04 06 02 02 02 02 148 148 999 148 45 45 99 45 Km 30765 39345 44005 1390 Date 17/06/2003 13/06/2004 17/06/2005 13/08/2005 85 • Quelles sont les DF pour ce schéma ? Écrivez les DF en format X → A avec A un seul attribut; assurez que X est minimal. Évitez les DF redondantes, i.e. les DF qui sont une conséquence logique des autres. • Donnez une clé pour ce schéma. Question 102 La relation R sert à stocker le contenu de mes CD audio. L’exemple montre deux CD: l’album “What’s Inside” de Joan Armatrading et “À Taton” d’Axelle Red. Chaque album est réalisé par un seul artiste et une seule maison de disques. L’ordre des chansons sur le CD est indiqué par des chiffres 1,2,3,. . . . Supposons que l’attribut Artiste identifie les artistes de manière unique. Deux albums [chansons] peuvent porter le même titre, mais un même artiste ne sortira jamais deux albums [chansons] avec le même titre. Un album ne contient jamais deux fois la même chanson. R Album What’s Inside What’s Inside Artiste Joan Armatrading Joan Armatrading Année 1995 1995 What’s Inside À Tatons À Tatons Joan Armatrading Axelle Red Axelle Red 1995 1996 1996 À Tatons Axelle Red 1996 MaisonDisques BMG Music BMG Music .. . BMG Music Virgin Belgium Virgin Belgium .. . Virgin Belgium Ordre 1 2 Chanson In Your Eyes Everyday Boy Durée 2:59 4:34 13 1 2 Trouble À Tatons Mon Café 4:04 1:28 4:23 14 À Tatons reprise 1:47 • Quelles sont les DF pour ce schéma ? Écrivez les DF en format X → A avec A un seul attribut; assurez que X est minimal. Évitez les DF redondantes, i.e. les DF qui sont une conséquence logique des autres. • Donnez une clé pour ce schéma. Question 103 Soit X → Y une DF sur l’ensemble U d’attributs. Prouvez: X → Y est satisfaite par toute relation R sur U ssi X → Y est triviale. Réponse. Prenons une DF X → Y qui n’est pas triviale, c’est-à-dire Y 6⊆ X. Soit A ∈ Y − X. Soit R = {t1 , t2 } une relation telle que t1 [X] = t2 [X] et t1 (A) 6= t2 (A). Il est clair que R ne satisfait pas X → Y . Donc, si X → Y n’est pas triviale, on peut toujours construire une relation R qui ne satisfait pas X → Y . Inversement, il est clair qu’une DF triviale est satisfaite par toute relation. 2 Question 104 Établissez un algorithme pour décider si une DF est une conséquence logique d’un ensemble de DF. C’est-à-dire, l’entrée de l’algorithme se compose d’un schéma (U, Σ) et une DF X → Y ; la sortie est “oui” si Σ |= X → Y et “non” autrement. Réponse. Si Σ 6|= X → Y , il doit y avoir une relation R qui à la fois satisfait Σ et ne satisfait pas X → Y . Une telle relation R montre que X → Y n’est pas une conséquence logique de Σ et on appelle R un contre-exemple pour Σ |= X → Y . Il est facile de réduire (comment?) chaque contre-exemple pour Σ |= X → Y à un contre-exemple R0 qui a la forme suivante: R0 attributs de X }| { z A1 0 0 ... ... ... Ak 0 0 z autres attributs }| { Ak+1 0 0 ou 1 ... ... ... An 0 0 ou 1 (t1 ) (t2 ) où il existe i ∈ [k + 1..n] tel que Ai ∈ Y et t2 (Ai ) = 1. Bien sûr, il faut encore compléter la table précédente en remplaçant toute occurrence de “0 ou 1” par 0 ou 1. De préférence on choisit 1 (pourquoi?), sauf si Σ nous oblige de choisir 0. A la fin, X détermine Aj ssi t2 (Aj ) = 0 (j ∈ [1..n]). Donc, Σ |= X → Y ssi t2 (A) = 0 pour tout attribut A ∈ Y . Ce raisonnement mène à l’algorithme suivant: 86 INPUT: OUTPUT: 1. 2. 3. un ensemble Σ de DF sur un ensemble U d’attributs un ensemble X ⊆ U tout attribut déterminé par X déterminé := X répéter tant que déterminé change répéter pour toute DF V → W de Σ si V ⊆ déterminé alors déterminé := déterminé ∪ W fin-si fin-répéter fin-répéter output déterminé Finalement, Σ |= X → Y ssi Y ⊆ déterminé. Quelle est la complexité de cet algorithme? La boucle extérieure est exécutée |Σ| fois au maximum. Pour toute exécution de la boucle extérieure, la boucle intérieure est exécutée |Σ| fois. L’algorithme est donc O(|Σ|2 ). Il existe un algorithme linéaire pour ce problème (à vous de le découvrir). 2 Question 105 Développez un algorithme pour décider si deux ensembles Σ 1 et Σ2 de DF sont équivalents. Question 106 Donnez un exemple d’une décomposition en BCNF qui préserve les DF mais pas le contenu. Question 107 Soit U un ensemble d’attributs et X, Y ⊆ U . Prouvez que toute relation R sur U qui satisfait la DF X → Y , satisfait aussi la DJ 1 [XY, X(U − Y )]. Question 108 Considérez le schéma SP J. Prouvez: toute relation sur ce schéma qui satisfait la DJ 1 [SP, P J] doit nécessairement satisfaire la DJ 1 [SP, P J, SJ], mais l’inverse n’est pas vrai. Question 109 Démontrez, en vous basant sur le Théorème de Heath, que tout schéma relationnel (U, Σ) peut être décomposé en BCNF sans perte d’informations. Question 110 Soit U = ABCD un ensemble d’attributs. Donnez un ensemble Σ de DF sur U tel que le schéma (U, Σ) possède au moins six clés différentes. Réponse. Remarquons: si X est une clé, alors tout ensemble Y tel que Y ⊆ X et Y 6= X, n’est pas une clé. i. Si U = AB, l’ensemble {A → U, B → U } résulte en deux clés A et B. Il est clair que deux est le nombre maximal de clés pour deux attributs. ii. Prenons ensuite U = ABC. • Si A est une clé, toute autre clé ne peut pas inclure A et est donc un sous-ensemble de BC. Puisque BC a au maximum deux clés (voir (i)), on obtient trois clés au maximum: A, B et C. • Si AB est une clé, ni A ni B est une clé. En plus, toute autre clé ne peut pas inclure AB. Les possibilités pour les autres clés sont donc: C, AC et BC. Si AB et C sont des clés, ni AC ni BC est une clé. Par contre, on obtient trois clés en choisissant AB, AC et BC. • Dès lors il est clair que trois est le nombre maximal de clés pour trois attributs. iii. Prenons ensuite U = ABCD. • Si A est une clé, toute autre clé ne peut pas inclure A et est donc un sous-ensemble de BCD. Puisque BCD résulte en trois clés au maximum (voir (ii)), on n’obtient que quatre clés. Aucune clé ne peut donc être un singleton si on veut arriver à six clés. 87 • Si ABC est une clé, tout autre clé doit inclure D. Les possibilités sont donc AD, BD, CD, ABD, ACD, BCD. On arrive à quatre clés au maximum. Par exemple, – ABC, AD, BD et CD; ou – ABC, ABD, ACD et BCD. Aucune clé ne peut donc se composer de trois attributs si on veut arriver à six clés. • Et si on prenait des clés de deux éléments? L’ensemble: {AB → U, AC → U, AD → U, BC → U, BD → U, CD → U } résulte en six clés: AB, AC, AD, BC, BD, CD . 2 Question 111 Soit (U, Σ) un schéma avec U = ABCDEF et Σ = {AB → CD, BC → DE, CD → EF , DE → F A, EF → B} . a. Quelles sont les clés de ce schéma? b. Est-ce que ce schéma est en BCNF? Et en 3NF? Expliquez. Réponse. a. • Il est clair qu’aucun singleton n’est une clé (pourquoi?). • AB détermine AB (bien sûr) ainsi que CD à cause de AB → CD. AB détermine donc ABCD. Dès lors, AB détermine DE et EF à cause de BC → DE et CD → EF . AB détermine donc ABCDEF . AB détermine donc tout autre attribut. Puisque ni A ni B est une clé, AB est une clé. • De même façon, on trouve les clés BC, CD, DE. • EF ne détermine que BEF et n’est donc pas une clé. • On peut vérifier que toute autre combinaison de deux attributs n’est pas une clé: AC, AD, AE, AF , BD, BE, BF , CE, CF , DF . • Par contre, AEF détermine tout autre attribut, et ne contient aucune clé avec moins de trois éléments. AEF est donc une clé. On peut vérifier que AEF et CEF sont les seules clés avec trois éléments, et qu’il n’y a pas de clé avec plus de trois attributs. • Les clés sont donc: AB, BC, CD, DE, AEF , CEF . b. Ce schéma n’est pas en BCNF puisque EF détermine B et EF n’est pas une superclé. Ce schéma est en 3NF puisque tout attribut fait partie d’une clé. 2 Question 112 On appelle un ensemble Σ de DF irréductible ssi les trois conditions suivantes sont satisfaites: 1. Toute DF en Σ est singulière. 2. Aucune DF en Σ est redondante. C’est-à-dire, si on enlève une DF de Σ, alors le nouvel ensemble obtenu n’est plus équivalent à Σ. 3. Aucune DF en Σ contient trop d’attributs. C’est-à-dire, si Σ contient XA → B avec A ∈ / X, alors remplacer XA → B par X → B en Σ résulte en un nouvel ensemble qui n’est plus équivalent à Σ. 88 Par exemple, Σ1 = {A → C, AB → C} n’est pas irréductible: si on enlève AB → C, le nouvel ensemble {A → C} reste équivalent à Σ. L’ensemble Σ2 = {A → C, ABC → D} n’est pas irréductible, car il est équivalent à {A → C, AB → D}. La question est de trouver un ensemble irréductible équivalent à: {A → BC, B → C, A → B, AB → C, AC → D} . Question 113 Considérez le schéma (U, Σ) où U = {W #, Address, City, Product, Color , Qty, Weight} et Σ ={ W # → Address, City; Address, City → W #; W #, Product, Color → Qty; Product → Weight } . 1. Quelles sont les clés de ce schéma? 2. Expliquez pourquoi ce schéma n’est pas en 3NF. Question 114 Donnez une bonne décomposition en 3NF du schéma proposé en question 113. Est-ce que le nouveau schéma est en BCNF? Question 115 Soit (U, Σ) un schéma avec U = {A, B, C} et Σ = {A → BC, B → C}. Soit {(U1 , Σ1 ), (U2 , Σ2 )} une décomposition de ce schéma avec: • U1 = {A, B}, • Σ1 = {A → B}, • U2 = {B, C}, • Σ2 = {B → C}. Est-ce que cette décomposition préserve tous les DF du schéma original? Expliquez. Question 116 Soit donné le schéma (ABCDEF , {ABC → E, BCD → F, EF → ABC, CEF → D}). Quelles sont les clés pour ce schéma? Est-ce que ce schéma est en 3NF? Et en BCNF? Réponse. Les clés sont: ABCD, ABCF , BCDE et EF . Le schéma est en 3NF parce que tous les attributs font partie d’une clé. Le schéma n’est pas en BCNF parce qu’il contient ABC → E et ABC n’est pas une superclé. 2 Question 117 Soit donné le schéma (ABCDE, {AB → CD, C → A, D → CB}). • Donnez toutes les clés de ce schéma. • En quelle forme normale (BCNF, 3NF, ni BCNF ni 3NF) se trouve ce schéma? • Si le schéma n’est pas en 3NF, proposez une décomposition en 3NF qui préserve le contenu et les DF. • Est-ce que la décomposition en 3NF est en BCNF? 89 Mêmes questions pour les schémas suivants: (ABCD, {AB → C, B → D}) (ABCDEF , {ABC → D, D → E, E → AD}) (ABCDE, {AB → C, C → BDE, D → C}) (ABCD, {A → B, B → D, C → AD, D → C}) (ABCDE, {AB → C, CD → E, E → AC}) (ABCDE, {AB → CD, C → A, D → B, C → E}) Question 118 Voici trois schémas relationnels: (U1 , Σ1 ) (U2 , Σ2 ) (U3 , Σ3 ) = ( ABCDE, = ( ABCDE, = ( ABCDEF, { A → B, AB → C, D → AC, D → E} ) { A → BC, D → AE} ) { AB → C, C → A, BC → D, ACD → B BE → C, CE → F A, CF → BD, D → EF } ) 1. Est-ce que Σ1 et Σ2 sont équivalents? 2. En quelle forme normale (en BCNF/en 3NF mais pas en BCNF/pas en 3NF) est chacun de ces schémas? 3. Pour les schémas qui ne sont pas en BCNF, touver une décomposition en BCNF qui est lossless join. 4. Pour les schémas qui ne sont pas en 3NF, touver une décomposition en 3NF qui est lossless join et dependency preserving. Question 119 Pour le schéma (U, Σ) où U = {A, B, C, D} et Σ = {A → B, B → A, C → D, D → C}, répondez aux questions suivantes et expliquez vos réponses. 1. Est-ce que ce schéma est en 3NF ? 2. Si la réponse à la question 1 est “non”, donnez une décomposition en 3NF qui préserve le contenu et les DF. 3. Est-ce que ce schéma est en BCNF ? 4. Si la réponse à la question 3 est “non”, donnez une décomposition en BCNF qui préserve le contenu et, si possible, les DF. Question 120 Pour le schéma (U, Σ) où U = {A, B, C, D, E} et Σ = {A → C, B → D, CD → E}, répondez aux questions suivantes et expliquez vos réponses. 1. Est-ce que le schéma (U, Σ) est en 3NF ? 2. Si la réponse à la question 1 est “non”, donnez une décomposition en 3NF qui préserve le contenu et les DF. 3. Votre décomposition en 3NF est-elle aussi en BCNF ? Exercices sur le Chapitre 7 Question 121 Supposez qu’une transaction T relâche un verrou sur un objet A dans un système 2PL. Plus tard, la transaction T est annulée afin de prévenir ou de guérir l’occurrence d’un verrou mortel. Est-ce possible dans un système qui s’appuie sur: 1. détection des verrous mortels? 2. WAIT-DIE? 3. WOUND-WAIT? Expliquez votre réponse pour chacune des trois possibilités. Question 122 Considérez la séquence S1 (A)S2 (A)X1 (A)S1 (B)X2 (B)Commit 2 Commit 1 . Comment cette séquence est-elle traitée par un gestionnaire de transactions qui exécute selon un protocole Strict 2PL + WAIT-DIE? Même question pour la séquence: S1 (A)S2 (A)S2 (B)X1 (B)X3 (A)Commit 1 Commit 2 Commit 3 . Question 123 Considérez la séquence S3 (B)S1 (A)S2 (A)X3 (A)X2 (A)X2 (B)Commit 1 Commit 3 Commit 2 . Expliquez en détail comment cette séquence est-elle traitée par un gestionnaire de transactions qui exécute selon un protocole Strict 2PL + WOUND-WAIT? Même question pour la séquence: S1 (A)S2 (A)X3 (A)X2 (B)X2 (A)Commit 2 X1 (A)Commit 1 Commit 3 . Réponse. Les trois premières demandes S3 (B)S1 (A)S2 (A) peuvent être acceptées. Puis, la demande X3 (A) est refusée, ce qui donne la table de verrouillage suivante: Objet A B verrous acquis {S1 , S2 } {S3 } file d0 attente hX3 i hi On suppose que les transactions sont estampillées selon leur temps de commencement. T 1 est donc la transaction la plus ancienne. La demande X2 (A) ne peut pas être acceptée; elle est insérée à la tête de la file d’attente, puisque T2 possède déjà un verrou sur A. Objet A B verrous acquis {S1 , S2 } {S3 } file d0 attente hX2 , X3 i hi Les transactions T2 et T3 sont donc suspendues; seule la transaction T1 est encore “active” et termine (Commit 1 ); les verrous de T1 sont relâchés. À ce moment, T2 est reprise et reçoit un verrou exclusif sur A (lock upgrade). On obtient: Objet A B verrous acquis {X2 } {S3 } 90 file d0 attente hX3 i hi 91 T2 continue avec la demande X2 (B). T2 n’attend pas jusqu’à T3 relâche son verrou sur A: T3 est plus jeune que T2 et est donc annulée. On obtient: Objet A B verrous acquis {X2 } {X2 } file d0 attente hi hi Puis T2 peut terminer. Plus tard, on va sans doute reprendre T3 . 2 Question 124 Si, pour un objet donné, les verrous acquis sont {S 2 , S3 }, et la file d’attente est hX1 , X2 i, alors un verrou mortel s’est produit. Dessinez le graphe des attentes pour cette situation et montrez l’existence du verrou mortel. Question 125 Considérez l’exécution: W3 (A)R2 (A)W3 (B)W1 (A)W2 (B) . Est-ce que cette exécution peut jamais se produire dans exactement cet ordre dans un système 2PL? En d’autres termes, imaginez-vous un observateur externe qui enregistre toutes les écritures et lectures d’un système 2PL en exécution. Est-ce que cet observateur peut jamais enregistrer l’exécution donnée? Si oui, complétez cette exécution en indiquant les positions dans l’exécution où les verrous nécessaires peuvent être acquis et relâchés. Si non, expliquez pourquoi cette exécution ne peut pas se produire. Même question pour les exécutions: W1 (A)R2 (A)R3 (B)W1 (B) R1 (A)W2 (B)W2 (A)W1 (A) R1 (A)W2 (B)W2 (C)R2 (A)W1 (C) W3 (A)R2 (A)W3 (B)W1 (A)W2 (B) R1 (A)R2 (A)W2 (B)W1 (B)W3 (A)R2 (A) R1 (A)R2 (A)R3 (B)W1 (B)W2 (B)R3 (C) R1 (A)R2 (A)R3 (B)W2 (B)R3 (A)W1 (B) R1 (C)R1 (A)W2 (B)R2 (A)W1 (D)W2 (C)W1 (A) R1 (A)R2 (A)R2 (B)W3 (C)W1 (B)W1 (A)W2 (C)W3 (D) R1 (A)R1 (B)R2 (A)R3 (B)W3 (B)W1 (A)W2 (C) R1 (A)W2 (B)W2 (A)W1 (C)W2 (C) Réponse. Cette exécution est possible en 2PL: T1 T2 T3 X3 (A) W3 (A) X3 (B) U3 (A) S2 (A) R2 (A) W3 (B) U3 (B) X2 (B) U2 (A) X1 (A) W1 (A) U1 (A) W2 (B) U2 (B) 2 92 Question 126 Comme la question 125, en remplaçant 2PL par Strict 2PL. Question 127 Simulez successivement l’exécution d’un gestionnaire de verrous 1. Strict 2PL + détection de verrou mortel, 2. Strict 2PL + WAIT-DIE et 3. Strict 2PL + WOUND-WAIT pour les trois transactions T1 , T2 , T3 suivantes: T1 : S1 (A)X1 (B)Commit 1 T2 T3 : : S2 (A)S2 (B)Commit 2 X3 (A)Commit 3 Supposons que l’ordre des demandes est déterminé par le scheduler des tâches 1 le suivant: boucler sans arrêt boucler pour toute transaction Ti en ordre d’ancienneté traitez la prochaine demande en suspens de Ti fin-boucler redémarrez les transactions qui ont été annulées fin-boucler Réponse. Prenons d’abord le protocole Strict 2PL + WAIT-DIE. Les deux premières demandes à traiter sont S1 (A) et S2 (A), ce qui donne la table de verrouillage suivante: Objet A B verrous acquis {S1 , S2 } {} file d0 attente hi hi La demande suivante est X3 (A). La transaction T3 “meurt” et est ensuite redémarrée. La prochaine demande X1 (B) est acceptée: Objet A B verrous acquis {S1 , S2 } {X1 } file d0 attente hi hi Puis, la transaction T2 meurt quand elle demande S2 (B): Objet A B verrous acquis {S1 } {X1 } file d0 attente hi hi La transaction T3 reprend la demande X3 (A) et meurt de nouveau. Les transactions T2 et T3 sont ensuite redémarrées. La transaction T1 atteint Commit 1 : Objet A B verrous acquis {} {} file d0 attente hi hi La transaction T2 reprend dès le début et effectue la demande S2 (A): Objet A B verrous acquis {S2 } {} file d0 attente hi hi 1 Noter que ce scheduler n’intervient nulle part dans la théorie exposée dans le chapitre 7; il s’agit d’une tâche du système d’exploitation. Le scheduler présenté manque sans doute d’intelligence. Néanmoins, pour rendre cette exercice intéressante, il faut que l’on impose un certain entrelaçement aux transactions. 93 La transaction T3 meurt pour la troisième fois en effectuant X3 (A). La transaction T3 est redémarrée. La transaction T2 continue avec S2 (B): Objet A B verrous acquis {S2 } {S2 } file d0 attente hi hi Ensuite la transaction T3 meurt une fois de plus. La transaction T2 se termine en effectuant Commit 2 . La transaction T3 est maintenant la seule transaction dans le système et peut effectuer X3 (A)Commit 3 . 2 Réponse. Prenons ensuite le protocole Strict 2PL + WOUND-WAIT. Les deux premières demandes à traiter sont S1 (A) et S2 (A), ce qui donne la table de verrouillage suivante: Objet A B verrous acquis {S1 , S2 } {} file d0 attente hi hi Puis la transaction T3 est suspendue quand elle effectue X3 (A): Objet A B verrous acquis {S1 , S2 } {} file d0 attente hX3 i hi Puis la demande X1 (B) peut être acceptée: Objet A B verrous acquis {S1 , S2 } {X1 } file d0 attente hX3 i hi La prochaine demande S2 (B) est refusée et T2 est suspendue: Objet A B verrous acquis {S1 , S2 } {X1 } file d0 attente hX3 i hS2 i La demande X3 (A) ne peut pas encore être acceptée; T3 reste donc en suspens. La transaction T1 relâche ensuite ses verrous en effectuant Commit 1 : Objet A B verrous acquis {S2 } {} file d0 attente hX3 i hS2 i À ce moment, la demande S2 (B) peut être acceptée et la transaction T2 reprend donc son exécution: Objet A B verrous acquis {S2 } {S2 } file d0 attente hX3 i hi La demande X3 (A) de T3 ne peut pas encore être acceptée; T3 reste en suspens. La transaction T2 prend fin en effectuant Commit 2 : Objet A B verrous acquis {} {} file d0 attente hX3 i hi Enfin la demande X3 (A) peut être acceptée: Objet A B verrous acquis {X3 } {} file d0 attente hi hi 94 Puis la transaction T3 se termine. 2 Question 128 Montrez qu’il y a des exécutions sérialisables qui ne sont pas possibles en 2PL. Question 129 Supposez qu’une transaction T1 qui est read-only, lit un objet A. Plus tard, T1 lit le même objet une deuxième fois et constate que la valeur de A a changé. Qu’est-ce que ça nous apprend concernant le protocole de concurrence qui est utilisé dans ce système? Expliquez. Note: Une transaction est read-only si elle n’effectue aucune écriture. Question 130 Supposez qu’une transaction T1 relâche un verrou sur un objet A dans un système 2PL. Plus tard, la transaction T1 est annulée pour des raisons de deadlock . Qu’est-ce que ça nous apprend concernant la manière dont le gestionnaire de transactions s’occupe du problème de deadlock ? Exercices sur le Chapitre 8 Question 131 Voici le contenu d’un journal de type Undo/Redo après une panne de système: [START T1 ] [START T2 ] [START T3 ] [START T4 ] [T1 , A, 0, 1 ] [T2 , B, 0, 1 ] [T3 , C, 0, 1 ] [T4 , D, 0, 1 ] [COMMIT T1 ] [START CKPT hT2 , T3 , T4 i] [START T5 ] [START T6 ] [START T7 ] [T5 , E, 0, 1 ] [T6 , F, 0, 1 ] [T7 , G, 0, 1 ] [COMMIT T2 ] [COMMIT T5 ] [END CKPT ] [COMMIT T3 ] [COMMIT T6 ] 1. Quelles sont les valeurs possibles pour A, B, C, D, E, F, G dans la base de données sur disque au moment de la panne? 2. Expliquez en détail comment le DBMS arrivera à un état cohérent lors de la procédure de reprise. Question 132 Après une panne du système, le contenu du log est comme suit: (T1 , begin) (T1 , A, 4, 5) (T2 , begin) (T1 , commit) (T2 , B, 9, 10) (T2 , A, 5, 6) (T3 , begin) (T3 , C, 19, 20) (T3 , commit) Quelles sont les valeurs pour A, B et C à restaurer dans la base de données pendant la reprise? Question 133 Comment la procédure de reprise après panne doit-elle être adaptée afin de tenir compte des enregistrements START CKPT et END CKPT? 95 96 Question 134 Voici le contenu d’un journal Undo/Redo après une panne du système. Quelles sont les actions effectuées par le recovery manager pendant la reprise? (T1,begin), (T1,A,4,5), (T2,start), (T1,commit), (T2,B,9,10), (START CKPThT2i), (T2,C,14,15), (T3,begin), (T3,D,19,20), (END CKPT), (T2,commit) Question 135 Comment la procédure de checkpointing doit-elle être adaptée au protocole Undo/NoRedo? Et au Redo/No-Undo? Question 136 Comment la procédure de reprise après panne doit-elle être adaptée au protocole Undo/No-Redo? Et au Redo/No-Undo? D’abord sans checkpointing, puis avec la procédure de checkpointing élaborée ci-dessus (question 135). Question 137 Dans une stratégie UNDO/REDO, un checkpoint stocke dans la base de données toute page modifiée se trouvant dans le buffer au moment où le checkpoint démarre. Cette manière de réaliser un checkpoint n’est pas adaptée à une stratégie REDO/NO-UNDO, parce qu’elle stocke dans la base de données des modifications qui ne sont pas encore commises (voir aussi la section 8.3.6). Discutez ce problème et proposez une solution. Annexe A Les Grandes Découvertes en Bases de Données Exposé à l’occasion de la Journée de Mathématique et de Sciences, 29 mars 2001. A.1 Introduction Dans ma jeunesse, j’étais passionné par les livres racontant les grandes découvertes scientifiques. Les découvertes dans le domaine des bases de données (BD) n’étaient pas parmi eux. . . Dans cet exposé, j’essaie néanmoins de montrer que les BD sont devenues un domaine de recherche intéressant et important en informatique depuis les années 60. J’explique quelles étaient les étapes principales de ces recherches et quels sont les problèmes restant à résoudre. Deux questions fondamentales posées par cette discipline sont: 1. Comment les données peuvent-elles être structurées? 2. Comment les données peuvent-elles être interrogées? Le terme “requête” est utilisé pour une question posée à une BD en un langage interprété par l’ordinateur. A.2 Les BD Hiérarchiques Le premier système de BD a été conçu pour la gestion des données du projet Apollo de la NASA. Les données étaient structurées dans des hiérarchies, comparables à l’organisation des répertoires sur un PC. La figure A.1 donne un exemple d’une telle hiérarchie; elle montre des animaux (Lion, Loup, Tigre,. . . ) groupés dans des ordres (Carnivores, Artiodactyles, Serpents) qui eux-mêmes sont groupés dans des classes (Mammifères, Reptiles). Une telle structuration des données permet de répondre facilement aux questions de type: Quels animaux sont carnivores? Supposons maintenant qu’on veuille ajouter des informations sur la répartition géographique des animaux. Au moins deux possibilités se présentent. La figure A.2 (gauche) ajoute les continents au plus bas niveau de la hiérarchie. Grâce à cette organisation, il est très facile de répondre à la question: Où peut-on trouver des lions? Par contre, pour répondre à la question: Quels sont les carnivores d’Afrique? 97 ANNEXE A. LES GRANDES DÉCOUVERTES EN BASES DE DONNÉES 98 Classe Ordre Espce Mammifres Carnivores Lion Loup Tigre Hyne Artiodactyles Girafe Hippopotame Reptiles Serpents Cobra Figure A.1: Classification hiérarchique des animaux. Les continents (Afrique, Asie, Europe) sont ajoutés à la base de la hiérarchie: Classe Ordre Espce Continent Mammifres Carnivores Lion Afrique Asie Loup Europe Asie Tigre Asie Hyne Afrique Artiodactyles Girafe Afrique Hippopotame Afrique Reptiles Serpents Cobra Asie Les animaux de même ordre sont groupés par continent: Classe Ordre Continent Espce Mammifres Carnivores Afrique Lion Hyne Asie Loup Lion Tigre Europe Loup Artiodactyles Afrique Girafe Hippopotame Reptiles Serpents Asie Cobra Figure A.2: Deux façons d’ajouter la répartition géographique à la classification hiérarchique des animaux. ANNEXE A. LES GRANDES DÉCOUVERTES EN BASES DE DONNÉES 99 la hiérarchie montrée par la figure A.2 (droite) convient mieux, parce que les carnivores africains (Lion et Hyène) se retrouvent groupés. Bien que personne ne mettra en doute la hiérarchie représentée par la figure A.1, on observe qu’ajouter les continents peut se faire de plusieurs manières et qu’il n’y a pas d’organisation idéale pour toutes les requêtes. Il est facile de comprendre pourquoi: la relation entre les continents et les espèces n’est pas de nature hiérarchique, dans le sens où une espèce n’est pas limitée à un seul continent (et inversement, bien sûr, un continent contient plusieurs espèces). Il n’est donc pas naturel de vouloir stocker une telle relation dans une hiérarchie. On est enclin à croire qu’une structuration des données en réseau est plus naturelle qu’une organisation hiérarchique. Ce sont sans doute de telles considérations qui ont mené aux BD de type réseau. A.3 Les BD de Type Réseau Ce modèle de données sera toujours associé au nom de C.W. Bachman. La figure A.3 montre les mêmes données zoo-géographiques structurées en réseau. Les rectangles contiennent les données et les “circuits” représentent les relations entre les données. Par exemple, on reconnaı̂t facilement le circuit qui relie les carnivores; celui-ci permet de répondre à la question: Quels animaux sont carnivores? Pour répondre à la question: Quels sont les animaux d’Asie? il faut parcourir un chemin qui contient plusieurs circuits (lesquels?). Finalement, pour répondre à la question: Quels sont les carnivores d’Asie? plusieurs parcours sont possibles. Tout d’abord, on peut traverser le circuit qui relie les carnivores et sélectionner ceux qui sont liés à l’Asie. Alternativement, on peut partir du nœud “Asie”, parcourir les animaux asiatiques et sélectionner ceux qui se trouvent dans le circuit qui relie les carnivores. Il faut comprendre qu’il n’est pas évident d’exprimer ces parcours en un langage de programmation. A titre d’exemple, le programme montré par la figure A.4 décrit le parcours qui trouve les carnivores asiatiques à partir du nœud “Asie”. Un tel programme est appelé “navigationnel”: le programmeur doit diriger de manière détaillée le parcours à travers les données en indiquant pas à pas les opérations à réaliser [1]. En 1973, C.W. Bachman a reçu le Prix Turing pour sa contribution à l’informatique. Ce prix signifie pour un informaticien ce qui signifie le Prix Nobel pour un physicien ou un chimiste. A.4 Les BD Relationnelles En 1970, au moment où les systèmes basés sur le modèle hiérarchique ou le modèle en réseau étaient en plein développement, E.F. Codd publiait un article [2] où il proposait de stocker des données dans des tables. A l’heure actuelle, cette solution peut nous sembler assez évidente; pensons aux tables utilisées pour afficher les scores des matchs de football ou les listes de prix. . . Néanmoins, en 1970 cette idée était considérée comme une curiosité intellectuelle. On doutait que les tables puissent jamais être gérées de manière efficace par un ordinateur. . . Une table se compose de plusieurs colonnes et rangées. Pour notre exemple, les tables sont celles de la figure A.5. En général, les tables et leurs colonnes sont fixées au moment de la conception de la BD. Après, on peut à tout moment changer le contenu des tables en insérant, en modifiant et en supprimant des rangées. Dans le même article, E.F. Codd proposait d’utiliser une algèbre pour interroger les tables. L’algèbre proposée se compose de cinq opérateurs, parmi lesquels: JOIN La jointure sert à joindre les rangées de deux tables. Les rangées à joindre sont celles qui ont la même valeur pour toute colonne commune aux deux tables. 100 ANNEXE A. LES GRANDES DÉCOUVERTES EN BASES DE DONNÉES t en Mamm. tin ce sp Con e E e s r ar ar las rd sP nsP n rC rO o o a a i i P P at at es es bit abit dr pc a r s H H E O r r Artiod. r r Hippop. r r r r Girafe r Carniv. r r Hyène r r Serp. Reptiles r r r r r Afrique r r r r Lion r r r r r r Asie r Cobra r r r r Tigre r Loup r r r r r r r r r Europe Habitation Classe Ordre Espce Continent Figure A.3: Classification et répartition des animaux dans une BD de type réseau. FIND Continent WITHIN IndexSurContinents USING ‘Asie’; FIND FIRST Habitation WITHIN HabitationsParContinent; WHILE db-rec-found LOOP OBTAIN OWNER WITHIN HabitationsParEspce; OBTAIN OWNER WITHIN EspcesParOrdre; IF Ordre = ‘Carnivores’ THEN print Espce END-IF; FIND NEXT Habitation WITHIN HabitationsParContinent; END-LOOP; Figure A.4: Programme navigationnel pour trouver les carnivores asiatiques. ANNEXE A. LES GRANDES DÉCOUVERTES EN BASES DE DONNÉES EO Espce Lion Loup Tigre Hyne Girafe Hippopotame Cobra Ordre Carnivores Carnivores Carnivores Carnivores Artiodactyles Artiodactyles Serpents OC VIT Ordre Carnivores Artiodactyles Serpents Espce Lion Lion Loup Loup Tigre Hyne Girafe Hippopotame Cobra 101 Classe Mammifères Mammifères Reptiles Continent Afrique Asie Europe Asie Asie Afrique Afrique Afrique Asie Figure A.5: Classification et répartition des animaux dans une BD relationnelle avec trois tables. SELECT La sélection sert à retenir les rangées qui vérifient une certaine condition, en supprimant les autres rangées. PROJECT La projection sert à retenir certaines colonnes, en supprimant les autres. Notons que le résultat de ces opérations est toujours une nouvelle table. La figure A.6 montre que la question: Quels animaux sont des mammifères? peut être exprimée en algèbre par la requête suivante: ((EO JOIN OC ) SELECT Classe=‘Mammifres’) PROJECT Espce D’abord l’expression (EO JOIN OC ) résulte en une table qui donne l’ordre et la classe de toute espèce dans la BD. Puis la sélection ne retient que les rangées qui portent sur les mammifères. Finalement, la projection ne retient que la colonne Espce. On peut maintenant vérifier que la requête: ((EO JOIN VIT ) SELECT Ordre=‘Carnivores’ & Continent=‘Asie’) PROJECT Espce donne tous les carnivores asiatiques. Cette requête est nettement plus simple que le programme équivalent pour la BD de type réseau montré par la figure A.4. Notons que toute requête en algèbre relationnelle sera traduite en un programme efficace qui peut être exécuté par l’ordinateur. Mais contrairement aux BD de type réseau, ce programme reste caché aux utilisateurs; la traduction est effectuée automatiquement par le Système de Gestion de Bases de Données (SGBD). Pour cette raison, on dit que les requêtes en modèle relationnel sont “assertionnelles”: l’utilisateur définit les caractéristiques qui s’imposent au résultat. Le SGBD doit alors construire la stratégie de recherche. Comme mentionné ci-dessus, au début des années 70, on considérait comme une curiosité intellectuelle l’idée de stocker les données dans des tables et d’interroger les tables de manière nonnavigationnelle. Il faut comprendre que cette idée était révolutionnaire dans un temps où on était loin des interfaces conviviales pour interagir avec l’ordinateur. Ce scepticisme n’a cependant pas empêché E.F. Codd de poursuivre ses idées. Un premier prototype de Système de Gestion de 102 ANNEXE A. LES GRANDES DÉCOUVERTES EN BASES DE DONNÉES EO JOIN OC Espce Lion Loup Tigre Hyne Girafe Hippopotame Cobra Ordre Carnivores Carnivores Carnivores Carnivores Artiodactyles Artiodactyles Serpents (EO JOIN OC ) SELECT Classe=Mammifères Classe Mammifères Mammifères Mammifères Mammifères Mammifères Mammifères Reptiles Espce Lion Loup Tigre Hyne Girafe Hippopotame ((EO JOIN OC ) SELECT Classe=Mammifres) PROJECT Espce Ordre Carnivores Carnivores Carnivores Carnivores Artiodactyles Artiodactyles Classe Mammifères Mammifères Mammifères Mammifères Mammifères Mammifères Espce Lion Loup Tigre Hyne Girafe Hippopotame Figure A.6: Pour répondre à la question “Quels animaux sont des mammifères?” on joint (JOIN) d’abord les tables EO et OC pour ensuite en retenir (SELECT) les mammifères. Finalement, on ne retient (PROJECT) que la colonne Espce. <H1> Énigmes </H1> <OL> <LI> Comment faire entrer quatre éléphants dans une fiat panda? </LI> <LI> Comment un éléphant se mouche-t-il? </LI> </OL> Énigmes 1. Comment faire entrer quatre éléphants dans une fiat panda? 2. Comment un éléphant se mouchet-il? Figure A.7: Les balises dans une page HTML (gauche) sont interprétées par le navigateur qui affiche la page (droite). ANNEXE A. LES GRANDES DÉCOUVERTES EN BASES DE DONNÉES 103 Bases de Données Relationnelles (SGBDR) a été construit dans les laboratoires d’IBM. Depuis les années 80, cette technologie a mûri et a été adoptée par l’industrie. En 1987, le langage SQL, qui étend l’algèbre relationnelle, a été standardisé. A l’heure actuelle, les SGBDR sont présents dans toutes les compagnies et représentent une industrie de plusieurs milliards de dollars. E.F. Codd a reçu le Prix Turing en 1981. A.5 Le Web, une BD? A.5.1 Un Manque de Structure Aujourd’hui, une immense quantité de données se trouve sur le Web. Néanmoins, il n’est guère possible de parler d’une vraie BD parce que, d’une part, ces données sont peu ou pas structurées et, d’autre part, il n’existe pas de langage pour interroger le Web. Le Web manque de structure. Il est construit à partir de “pages” écrites en langage HTML (HyperText Markup Language). En gros, ce langage permet (i) de spécifier à l’aide de balises comment une page doit être présentée sur l’écran de l’ordinateur et (ii) d’ajouter des liens vers d’autres pages. La figure A.7 donne un exemple: le titre se trouve entre les balises <H1> et </H1> (Header ); les balises <OL> et </OL> (Ordered List) délimitent le début et la fin d’une liste ordonnée; chaque article de la liste se trouve entre les balises <LI> et </LI> (List Item). Il y a deux manières de chercher des informations sur le Web: • Utiliser des moteurs de recherche tels que Google, Hotbot et Alta Vista. Ces moteurs sont comme l’index d’un livre: on saisit un mot clé et le moteur retourne toutes les pages contenant ce mot. Malheureusement, cette méthode de recherche manque de précision. Par exemple, un biologiste qui s’intéresse à la symbiose entre les pandas et les mouches peut demander toutes les pages contenant à la fois les mots “panda” et “mouche”. Il ne lui sera pas possible d’éviter des pages non pertinentes telles que celle montrée par la figure A.7. Une petite expérience: le lundi 5 mars 2001, le moteur de recherche Google (http://www.google.com/) trouvait 168 pages rédigées en français contenant les mots “panda” et “mouche”. La page classée en tête parle des “Gı̂tes Panda au Parc naturel rgional Normandie-Maine” où on sait “pêcher la truite fario la mouche”. . . • Naviguer de site en site, ce qui fait penser à la navigation dans les BD de type réseau. Il y a pourtant une différence importante: contrairement au Web, les BD de type réseau se conforment à une structure précise. A.5.2 Traiter le Futur Web comme BD Le défi est de mieux structurer et décrire le contenu des pages Web. Supposons que tous les biologistes du monde se mettent d’accord pour utiliser des balises standardisées de manière à décrire les animaux dans leurs pages Web. Voici un exemple: <ANIMAL> <ESPECE> Panda </ESPECE> <CLASS> Mammifres </CLASS> <NOURRITURE> bambou </NOURRITURE> <CONTINENT> Asie </CONTINENT> </ANIMAL> Par contre, le secteur automobile peut utiliser d’autres balises pour décrire les voitures: <VOITURE> <MARQUE> Fiat </MARQUE> <MODELE> Panda </MODELE> <VITESSE en ‘KMPH’> 140 </VITESSE> </VOITURE> ANNEXE A. LES GRANDES DÉCOUVERTES EN BASES DE DONNÉES 104 Ces balises standardisées permettraient aux moteurs de recherche de faire la distinction entre un panda et une Fiat Panda. Un tel standard permettrait la construction de requêtes plus précises que celles s’appuyant uniquement sur des mots clés. Par exemple, la question: Que mange le panda? pourrait se traduire en une requête à un moteur de recherche: <ANIMAL> <ESPECE> Panda </ESPECE> <NOURRITURE> ? </NOURRITURE> </ANIMAL> Le moteur de recherche enverrait une liste contenant “bambou”. Est-ce que cette technologie est de la science-fiction? Pas du tout: ce nouveau langage pour structurer le Web existe déjà; il s’appelle XML (eXtensible Markup Language)! Quant aux recherches, plusieurs prototypes de langages pour interroger des pages XML ont déjà été proposés. Cette technologie permettra dans un futur proche d’interroger le Web de manière précise et non-navigationnelle, un peu comme les BD relationnelles. Il est fort possible que les recherches dans ce domaine aboutissent à un Prix Turing d’ici 10 ans. A suivre donc. . . Bibliographie [1] C. W. Bachman. The programmer as navigator. Communications of the ACM, 16(11):635–658, 1973. [2] E. F. Codd. A relational model of data for large shared data banks. Communications of the ACM, 13(6):377–387, 1970. [3] C. Date. An Introduction to Database Systems. Addison-Wesley, sixth edition, 1995. [4] C. Date. An Introduction to Database Systems. Addison-Wesley, seventh edition, 2000. [5] G. Gardarin. Bases de Données. Objet & Relationnel. Eyrolles, 1999. 105