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> &Eacute;nigmes </H1> <OL>
<LI> Comment faire entrer quatre
&eacute;l&eacute;phants dans une
fiat panda? </LI> <LI> Comment
un &eacute;l&eacute;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