Année 2015–2016

37
Introduction aux Bases de Données Relationnelles Département Génie Biologique GB 4 – Année 2015–2016 Jean-Paul Comet codeR titre usure date aquis année edition Exemplaire Abonnés matricule nom adresse téléphone date adésion date naissance CSP date dates Livres codeCat titre décrit Mots-Clefs mot_clef codeMot Ecrit produit nomF adresse Editeurs nom Auteurs prénom porte sur Thèmes codetheme intitulé 1-1 demande emprunt 0-N 0-N 0-N 0-N 0-N 0-N 1-N 1-N 0-N Correspond 1-1 1-N 0-N 1-N 1-1 0-N Laboratoire I3S, UMR 7271 CNRS/UNSA Université de Nice-Sophia-Antipolis Ecole Polytech 19 janvier 2016 2

Transcript of Année 2015–2016

Introduction aux Bases de Données Relationnelles

Département Génie Biologique

GB 4 – Année 2015–2016

Jean-Paul Comet

codeRtitreusuredate aquisannée edition

Exemplaire

Abonnésmatriculenomadressetéléphonedate adésiondate naissanceCSP

date

dates

Livres

codeCattitre

décrit

Mots−Clefs

mot_clefcodeMot

Ecrit

produitnomFadresse

Editeurs

nom

Auteurs

prénom

porte sur

Thèmescodethemeintitulé

1−1

demande

emprunt

0−N0−N

0−N

0−N

0−N

0−N1−N

1−N

0−N

Correspond1−1

1−N

0−N

1−N

1−1

0−N

Laboratoire I3S, UMR 7271 CNRS/UNSA Université de Nice-Sophia-AntipolisEcole Polytech

19 janvier 2016

2

TABLE DES MATIÈRES 3

Table des matières

1 Les concepts généraux 91.1 Bases de données biologiques publiques . . . . . . . . . . . . . . . . . . . . . . . . 91.2 Bases de données, banques de données, fichiers . . . . . . . . . . . . . . . . . . . 101.3 introductions aux SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.4 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.5 Indépendance logique / physique . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.6 Cycle de vie d’une BD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.7 Architecture d’un SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2 Notions essentielles pour le modèle relationnel 172.1 Univers & Domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.2 Schéma d’une relation dont le nom est R. . . . . . . . . . . . . . . . . . . . . . . 182.3 n-uplet sur un ensemble E d’attributs. . . . . . . . . . . . . . . . . . . . . . . . . 182.4 Une relation r sur un schéma de relation S . . . . . . . . . . . . . . . . . . . . . . 192.5 Un schéma de base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.6 Base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.7 Les identifiants d’une relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.8 Langage de Description de Données de SQL . . . . . . . . . . . . . . . . . . . . . 21

2.8.1 CREATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.8.2 ALTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.8.3 DROP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Langages de Manipulation relationnels 253.1 L’algèbre Relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.1.1 Les opérateurs unaires (sur une seule opérande) . . . . . . . . . . . . . . . 263.1.1.1 La projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.1.1.2 La sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.1.1.3 Le renommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.1.2 Les opérateurs de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.1.2.1 Le produit cartésien . . . . . . . . . . . . . . . . . . . . . . . . . 273.1.2.2 La jointure naturelle de 2 relations ayant au moins 1 attribut en

commun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.1.2.3 La théta jointure de 2 relations n’ayant aucun attribut commun 28

3.1.3 Les opérateurs ensemblistes : union, différence, intersection . . . . . . . . . 283.1.4 La division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1.5 Liens entre les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.1.6 Complexités des opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.1.6.1 Sélection : σ[p]R . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4 TABLE DES MATIÈRES

3.1.6.2 Projection : π[Ai,Ak...]R . . . . . . . . . . . . . . . . . . . . . . . 313.1.6.3 Jointure naturelle, théta jointure, produit cartésien . . . . . . . . 31

3.1.7 Propriétés des opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.1.8 Ecrire des requêtes compliquées . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2 Le calcul relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.1 Calcul des tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.2 Calcul des domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.3 QBE : Query By Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4 SQL : Standard Query Language 374.1 Format d’une requête simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.1.1 ordre SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.1.2 Valeur NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.1.3 ordonancement des n-uplets . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.2 Requêtes concernant plusieurs relations . . . . . . . . . . . . . . . . . . . . . . . . 384.2.1 Autres opérations de l’algèbre et Sous-requêtes imbriquées . . . . . . . . . 40

4.3 Utilisation des variables n-uplets dans SQL . . . . . . . . . . . . . . . . . . . . . 414.3.1 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.3.2 Quantification sur les variables n-uplets, opérateur ANY ≡ SOME . . . . 424.3.3 Quantification sur les variables n-uplets, opérateur ALL . . . . . . . . . . 42

4.4 Opérations de SQL qui ne sont pas dans l’algèbre . . . . . . . . . . . . . . . . . . 424.4.1 HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.5 Autres ordres SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.1 ALTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.2 DROP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.3 INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.4 UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.5 DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

4.6 Ecrire des requêtes compliquées . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

5 Un modèle conceptuel: le modèle Entité-Association 475.1 Conception des bases de données relationnelles . . . . . . . . . . . . . . . . . . . 475.2 Concepts de base et Diagramme Entité-Association . . . . . . . . . . . . . . . . . 48

5.2.1 Entités, type d’entités et attributs. . . . . . . . . . . . . . . . . . . . . . . 485.2.2 Les associations / relations. . . . . . . . . . . . . . . . . . . . . . . . . . . 485.2.3 Les identifiants des TE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.2.4 Les identifiants des TA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.3 Représentations multiples : la généralisation/spécialisation . . . . . . . . . . . . . 515.4 La spécification des diagrammes EA . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.4.1 Les TE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.4.2 Les TA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.4.3 les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.5 Contraintes d’intégrité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545.5.1 Contraintes d’intégrité sur les attributs . . . . . . . . . . . . . . . . . . . . 555.5.2 Contraintes d’intégrité sur les cardinalités . . . . . . . . . . . . . . . . . . 555.5.3 Contraintes d’intégrité sur les généralisations/spécialisations . . . . . . . . 55

5.6 Conlusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

TABLE DES MATIÈRES 5

6 Normalisation d’une relation 576.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.2 Dépendances fonctionnelles et graphe des dépendances fonctionnelles . . . . . . . 576.3 Couverture minimale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.4 Décomposition d’une relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606.5 1ère et 2ème formes normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616.6 3ème forme normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626.7 Forme normale de Boyce-Codd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

A Installation des packages du type XAMPP 69A. Installation de MAMP/WAMPP/LAMPP . . . . . . . . . . . . . . . . . . . . . . 71B. Lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71C. Sécurisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72D. Mise en place d’un environnement de travail . . . . . . . . . . . . . . . . . . . . . 72E. Installation de EasyPHP sous Windows. . . . . . . . . . . . . . . . . . . . . . . . 73

6 TABLE DES MATIÈRES

TABLE DES MATIÈRES 7

A propos

Ce support de cours, rédigé en 2008 et révisé chaque année, s’adresse à des étudiants de 2èmeannée de cycle d’ingénieurs du département Génie Biologie de l’EPU de Nice-Sophia Antipolis.Bien que cette matière soit complètement nouvelle pour ce public, on considère que les étudiantsont une bonne culture scientifique, et une capacité à raisonner de niveau Master.

Les outils informatiques utilisables pour illustrer ce cours sont les suivants :– MySQL 1 qui peut être installé à travers différents paquets (easyPHP 2 sous Windows,XAMPP 3 sous Linux mais qui n’est pas complètement opérationnel sous MacOS, MAMP 4

pour MacOS).– On peut aussi montrer comment Access met en pratique toutes les notions du cours, et

comment faire des requêtes à travers QBE, et comment faire des formulaires pour remplirla base de données.

– WWW SQL Converter qui permet de convertir un schéma graphique d’une base de donnéesrelationnelle en requêtes SQL qui créent l’ensemble des tables de la base de données.

L’objectif de cet enseignement est de donner les bases nécessaires aux futurs diplomés enbiologie, pour qu’ils puissent interagir de manière constructive avec des spécialistes des basesde données, afin que les applications soient plus proches des besoins des utilisateurs. Pour cetobjectif, il faudra compléter cet enseignement par un projet de conception et implémentationd’une base de données.

1. téléchargeable à l’adresse http://dev.mysql.com/.2. téléchargeable à l’adresse http://www.easyphp.org/.3. téléchargeable à l’adresse http://www.apachefriends.org/fr/xampp.html.4. téléchargeable à l’adresse http://www.mamp.info/.

8 TABLE DES MATIÈRES

9

Chapitre 1

Les concepts généraux

1.1 Bases de données biologiques publiques

Les données manipulées en biologie sont généralement énormes. Elles sont de différents types,allant de données bibliographiques, à des données de transcriptomique, protéomique en passantpar des données de séquences. Sans être exhaustif, on peut citer certaines bases de donnéesaccessibles via internet :

– Données relatives aux séquences :– nucléiques :

– GenBank : maintenue par NCBI (National Center for Biotechnology Informa-tion). Collaboration entre NCBI, le laboratoire de biologie moléculaire européen(EMBL), et la banque de données d’ADN du Japon (DDBJ, Dna DataBank ofJapan). Les séquences proviennent de plus de 300000 organismes, 179 millions deséquences, 185 milliards de paires de bases.EMBL Nucleotide DB, GenBank, DDBJ : les mêmes données.

– Consensus CoDing Sequences (CCDS) : identifier les régions codantes deprotéines de l’homme et la souris. 73 000 séquences pour l’homme et 54000 pourla souris...

– GOLD : Genomes OnLine Database, qui stocke les données provenant différentsprojets “génome” qu’ils soient terminés ou en cours. 19 200 études, 56 000 échan-tillons biologiques, 56 000 projets de séquençage et 39 400 projets d’analyse. 546méta-génomes (ensemble des génomes des populations bactériennes d’un milieudonné).

– Protéiques :– TrEMBL (translated EMBL, annoté automatiquement, 91.000.000 séquences, 28

milliards d’acides aminés, 536257 espèces), SwissProt (annoté par des personnes,548.000 entrées),Protein Information Resource (PIR),...UniProt : TrEMBL et SwissProt

– HIV-1 Protein Interactions : interactions des protéines de HIV-1 avec les pro-téines de l’hote humain. 6,939 interactions, 13707 descriptions, 3378 protéines,3337 gènes, 6145 publications.

– Medline (données bibliographiques, 22 millions d’entrées), PubMed (une base de donnéesde citations et d’abstracts de la litérature biomédicale – plus large que medline). 22 millionsde citations, de 1945 à nos jours.

10 CHAPITRE 1. LES CONCEPTS GÉNÉRAUX

– Structures tridimentionnelles:– PDB : structure 3D Protein Data Bank, 99.000 entrées– MMDB : Molecular Modeling Database – une base de données des structures 3D des

biomolécules dérivées de la christallographie par rayon X et par spectroscopie NMR(105000 entrées).

– Transcriptome (variétés de méthodes – puces à oligo, puces à ADN classique, SAGE –, résultats expérimentaux dépendant des conditions expérimentales – stress, qualité desproduits chimiques...)

– Polymorphisme (Single Nucleotid Polymorphisms): dbSNP– base de données de noms : IPNI (International Plant Names Index), CLEMAM (base de

données des mollusques marins d’europe et zones limitrophes).– PubChem - contient les structures chimiques des petites molécules organiques et des infor-

mations sur leurs activités biologiques.Un certain nombre de bases de données publiques sont stockées dans des fichiers plats (non struc-turés) ou semi-structurés : EMBL Nucleotid DB par exemple. Certaines commencent à être struc-turées : Mouse Genome Informatics (MGI), Thaliana Arabidopsis Information Resource (TAIR).Certaines de ces BD sont thématiques : EcoGene (E. coli), Mouse Genome Informatics (MGI),Saccharomyces Genome Database, AceDB (a c.elegans database) ...

1.2 Bases de données, banques de données, fichiers

Une banque de données est un ensemble de données, propres à une certaine application.Les données sont collectées par les producteurs de données pour ensuite en commercialiser l’usagevers un public plus large. Pas de contraintes fortes de cohérence, de non-redondance. Gros amasde données accessibles en ligne, produites par les institutions.

Une base de données représente un ensemble cohérent, intégré et partagé d’informationsnécessaires au fonctionnement d’une entreprise, ensemble dont la gestion est assurée par unlogiciel appelé Système de gestion de bases de données (SGBD), Data Base ManagmentSystem en anglais (DBMS). Les principaux SGBD sur le marché international sont: Oracle (44%), DB2 (IBM, 21 % du marché), SQL server, Access et Foxpro (Microsoft, 19 %), Sybase (3%).

Lorsque l’ensemble des données est homogène (ensemble des abonnées à une revue, le per-sonnel d’une entreprise, les produits vendus en ligne...) on parle de fichier des abonnées, dupersonnel, des produits. Dans ce cas, on utilisera un système de gestion de fichiers (SGF),beaucoup moins complexe qu’une base de données.

Lorsque les données à gérer sont de diverses natures (étudiants, cours enseignements, filières,ETCS, salles), la seule notion de fichier ne suffit pas, et il convient alors de faire appel à l’approchebases de données. Notons tout de même que le stockage des données d’une base de données surles disques (mémoire secondaire) se fait via la notion de fichiers, mais ces fichiers sont totalementinvisibles à l’utilisateur, ils relèvent de la seule compétence du SGBD.

1.3 introductions aux SGBD

SGBD = Système de Gestion d’une Base de DonnéesDBMS = DataBase Manager System

1.3. INTRODUCTIONS AUX SGBD 11

Quelles sont les spécificités d’un SGBD?

1. Très grande quantité de données à gérer, qui doivent être stockées dans plusieursfichiers, voire plusieurs sites...

2. Besoin d’interroger, mettre à jour souvent, rapidement et efficacement ces don-nées

3. Contrôler la redondance d’informationsLa redondance d’informations coûte cher en temps, en volume et elle pose le problème durisque d’incohérence entre les différentes copies. Un des objectifs des bases de données estde contrôler cette redondance, voire de la supprimer, en offrant une gestion unifiée desinformations complétée par différentes vues pour des classes d’utilisateurs différents.

4. Partage des données / Accès concurrents.Une base de données doit permettre l’accès à la même information par plusieurs utilisateursen même temps.Le SGBD doit inclure un mécanisme de contrôle de la concurrence basé sur des techniquesde verrouillage des données (pour éviter par exemple qu’on puisse lire une informationqu’on est en train de mettre à jour).Le partage des données se fait également par la notion de vue utilisateur, qui permet dedéfinir pour chaque classe d’utilisateurs la portion de la base de données qui l’intéresse (etdans la forme qui l’intéresse).

5. Gérer les autorisations d’accès / Sécurité des donnéesUne base de données étant multi-utilisateurs, se pose le problème de la confidentialitédes données. Des droits doivent être gérés sur les données, droits de lecture, mise à jour,création, ... qui permettent d’affiner la notion de vue utilisateur.

6. Offrir des interfaces d’accès multiplesUn SGBD doit offrir plusieurs interfaces d’accès, correspondant aux différents types d’utili-sateurs pouvant s’adresser à lui. On trouve des interfaces orientées utilisateur final (lan-gages de requêtes déclaratifs comme SQL avec mise en œuvre graphique, interface de typeformulaire, ...) ou bien orientées programmeurs d’applications (interface avec des langagesde programmation classiques comme par exemple l’approche SQL immergé ou "embeddedSQL".

7. Représenter des relations complexes entre les donnéesUn SGBD doit permettre de représenter des données reliées entre elles de manière complexe(non triviale). Cette facilité s’exprime à travers le modèle de données sous-jacent au SGBD.Chaque modèle de données offre ses propres concepts pour représenter les relations. Onpeut citer les modèles hiérarchique, réseau (première génération de modèles), relationnel(génération actuelle), ou orienté-objet (la génération future?).

8. Vérifier les contraintes d’intégritéUn schéma de base de données comporte aussi un ensemble de contraintes d’intégrité :contraintes structurelles (un employé a un chef et un seul par exemple), contraintes dyna-miques (un salaire ne peut diminuer). Les SGBD commerciaux supportent automatique-ment un certain nombre de contraintes structurelles, mais ne prennent pas en compte lescontraintes dynamiques (elles doivent être codées dans les programmes d’application).

9. Assurer la reprise après panneUne panne ne doit pas pouvoir remettre en cause le fonctionnement de l’entreprise de ma-nière durable. Les SGBD fournissent des mécanismes pour assurer cette sécurité. Le premiermécanisme est celui de transaction : il permet d’assurer un comportement atomique à une

12 CHAPITRE 1. LES CONCEPTS GÉNÉRAUX

séquence d’actions (elle s’effectue complètement avec succès ou elle est annulée). Une tran-saction est une séquence d’opérations qui fait passer la base de données d’un état cohérentà un nouvel état cohérent.En ce qui concerne les risques liés aux pannes disques, les SGBD s’appuie sur un mécanismede journalisation qui permet de regénérer une base de données automatiquement à partird’une version de sauvegarde et du journal des mouvements.

1.4 Historique

Base de données hierarchiques. Les bases de données modélisent des informations du monderéel, qui nous apparaissent souvent au travers de hiérarchies. Par exemple un producteur de vinpourra produire plusieurs crus, qui auront chacun plusieurs milésimes et plusieurs commandes.

– Modèle ancien, qui est implémenté par une hiérarchie de fichiers.– Inconvénients : pour ne pas perdre d’information, certaines doivent être dupliquées. De plus

il est difficile de décrire des relation du type n-n : un médecin a plusieurs patients mais unpatient peut avoir plusieurs médecins.

– pas de vraie indépendance logique/physique

Base de données réseaux. Ce modèle est arrivé au début des années 70. Il avait pour butd’améliorer le modèle hiérarchique. Les relations du type n-n ne sont plus limitatives. Par contre,pour la recherche d’une information, on doit connaître le chemin d’accès, ce qui fait dépendre lesprogrammes de la structure des données.

Base de données relationnelles. Edgar Franck Codd a proposé ce modèle dès 1970. Tablesou relations pour stocker des données reliées entre elles. C’est en fait l’inventeur de l’algèbrerelationnelle

– vraie indépendance logique/physique– Premier SGBD Relationnel : IBM vers 1980– 1987 : SQL = Standard Query Language. Langage basé sur des opérations comme l’union,

l’intersection, la jointure, la projection...– bref, basé sur la théorie des ensembles.

Base de données Déductives. organisation de données sous forme de table et exploitationà l’aide d’un langage logique (à la prolog).Exemple : Pascale; Laurent; Louise;apourpere(Pascale, Louis); apourpère(Louis,Romuald);Quelles sont les ancètres de Pascale?

Base de données orientées Objets. Le modèle relationnel n’est pas très adapté pour lesdonnées structurées commes les données multimédia, graphiques, géographiques... Caractéris-tiques de ces données : plus structurées, transactions plus longues, opérations non standard quidépendent du domaine d’application. Les SGBD orienté objet essayent de répondre à ces nou-veaux besoins.

Dans ce cours, nous ne verrons que le modèle relationnel.

1.5. INDÉPENDANCE LOGIQUE / PHYSIQUE 13

1.5 Indépendance logique / physique

L’indépendance du niveau logique (vision conceptuelle des données) par rapport au niveauphysique (l’implémentation) est TRES importante car :

– l’utilisateur d’une BD n’est pas forcément un spécialiste de l’implémentation. Il doit justecomprendre comment les données sont logiquement organisées

– l’implémentation peut changer pour améliorer les performances. Ce changement ne doit pasinfluencer l’organisation logique des données. Dans le cas contraire, on aurait à reformulerà chaque changement de l’organisation physique, tous les programmes d’interrogation /mise à jours des données !

– Le modèle logique est plus clair, car indépendant des questions d’implémentation.– possibilité d’un langage de requête clair– si le modèle physique change, on n’est pas obligé de recoder les programmes de requêtes

/ mise à jours

1.6 Cycle de vie d’une BD

1- Conception d’une base de données : c’est la phase d’analyse qui aboutit à déterminerle futur contenu de la base de données. Cette phase doit entre autre répondre aux questionssuivantes :

– Quelles sont les informations à mettre dans la bases de données?– Sous quel format? Il faut se mettre d’accord sur la nature et les caractéristiques des in-

formations que la BD contiendra. (travail à faire avec les futurs utilisateurs de la base dedonnées, pour savoir quels types d’interrogations seront à implémenter).

2- Implantation de la base de données. Il est ensuite nécessaire de transmettre le résultatde la première phase au SGBD choisi. Cela se fait grace à une Langage de description dedonnées (LDD). Une fois que la description de la structure est donnée au SGBD, on pourraconstituer la version initiale de la base de données en entrant les premières données.

3- Utilisation de la base de données. Le langage de manipulation des données (LMD)permet d’exprimer aussi bien des requêtes d’interrogation que des requêtes de mise à jour (ajoutd’information, suppression, modification).

1.7 Architecture d’un SGBD

Un SGBD peut être vu comme une boîte noire assurant la gestion de la base de données.Les utilisateurs interrogent la base de données via l’interface utilisateur, et le SGBD utilisel’interface d’accès physique pour accéder à la base de données (sur le support, c’est à dire lesdisques).

SGBD

Utilisateurs

BD

Inte

rfac

eU

tilis

ateu

r

d’ac

cès

phys

ique

inte

rfac

e

– L’interface utilisateur permet de définir le contenu de la base de données (LDD), soit

14 CHAPITRE 1. LES CONCEPTS GÉNÉRAUX

de l’interroger (LMD) soit de modifier son contenu. Cet interface doit gérer les questionssuivantes : compréhension, analyse et vérification des requêtes. Il faut que cette interfaceassure une certaine convivialité, et propose des LDD et LMD puissants.

– L’interface d’accès physique cherche à optimiser le stockage des données (espace occupésur le support), l’accès aux données (optimisation du temps de réponse). L’espace doit êtreminimal ainsi que le temps de réponse.

Attention les différentes classes d’utilisateurs peuvent ne pas voir les données de la mêmemanière. C’est ce qu’on appelle des vues.

Cette architechture est fondamentale pour pouvoir proposer l’indépendance programme/données. Il faut pouvoir proposer aux utilisateurs de modifier leurs vues de la base de donnéeset leurs traitements sans se soucier des choix qui ont été fait pour organiser le niveau interne(fichiers). D’autre part, il faut pouvoir proposer à l’administrateur de la base de données depouvoir modifier ces choix, afin d’améliorer les performances sans pour autant que cela ait unimpact sur les utilisateurs (leurs requêtes ou programmes qui communiquent avec la base dedonnées).

Pour pouvoir assurer les accès multiples, le SGBD doit gérer plusieurs problèmes de coordi-nations de ses actions, de cohérence et de contrôle du bon déroulement de ses actions. Pour cela,la vision simpliste de son architecture doit être affinée. Trois couches constituent le SGBD.

BD

Schémas externesla BD est vue par les utilisateurs

Schéma interneSchéma logiquela BD vue globalement la BD vue au niveau fichier

1. le niveau externe prend en charge le problème du dialogue avec les utilisateurs (analyse desdemandes, contrôle des droits d’accès, présentation des résultats)

2. le niveau interne s’occupe du stockage des données dans les supports physiques, de lagestion des structures de mémorisation (fichiers), et s’occupe des accès (gestion des index,des clès...)

3. le niveau intermédiaire assure les fonctions de contrôle global:

– optimisation des requêtes,

– gestion des conflits d’accès simultanés,

– contrôle général de la cohérence globale,

– coordination et suivi des processus en cours,

– garantie du bon déroulement des actions entreprises,

– ...

Cette couche est appelée niveau logique: on cherche à ne dépendre ni des exigences desutilisateurs, ni des structures physiques choisies.

1.7. ARCHITECTURE D’UN SGBD 15

BD

Utilisateurs

couche couche coucheexterne logique interne

stockagedialoguecontrole

SGBD

schémalogique

schémainterne

schémasexternes

d’ac

cès

phys

ique

inte

rfac

e

Inte

rfac

eU

tilis

ateu

r

Décrivons maintenant le déroulement d’une transaction à l’aide de cette architecture :1. Une requête, exprimée par l’utilisateur dans un langage accepté par le système (LMD) est

d’abord analysée du point de vue syntaxique (conformité à la grammaire du langage), puisdu point de vue sémantique (les objets cités doivent être connus dans le schéma externe del’utilisateur).

2. après validation de la requête (faite dans la couche externe), la requête est traduite, pourson passage à la couche logique: les références aux objets du schéma externe sont remplacéspar des références aux objets correspondants dans le schéma logique. Cette traduction estfaite grace à la description des règles de correspondance entre schéma logique et externe(règles définies au moment de la définition des schémas externes).

3. Au niveau logique, on effectue les contrôles de confidentialité, sur la concurrence,... Si larequête est acceptée, elle est optimisée et découpée en sous-requêtes qui sont transféréesau niveau interne, sinon elle est soit refusée soit mise en attente.

4. Au niveau interne, chaque sous-requête est traduite en une ou plusieurs requêtes physiquescorrespondantes (en fonction du schéma interne). S’il s’agit d’une requête d’interrogation,les données extraites sont passées à la couche logique, puis à la couche externe (elles sontréorganisées selon le schéma externe de l’utilisateur).

16 CHAPITRE 1. LES CONCEPTS GÉNÉRAUX

17

Chapitre 2

Notions essentielles pour le modèlerelationnel

Le modèle relationnel est basé sur une organisation des données sous forme de tables (tableauxde valeurs). La manipulation des données se fait selon le concept mathématique de relation dela théorie des ensembles, c’est-à-dire l’algèbre relationnelle. L’algèbre relationnelle a été inventéeen 1970 par E.F. Codd, le directeur de recherche du centre IBM de San José. Elle est constituéed’un ensemble d’opérations formelles sur les relations. Les opérations relationnelles permettentde créer une nouvelle relation (table) à partir d’opérations élémentaires sur d’autres tables (parexemple l’union, l’intersection, ou encore la différence).

De manière informelle, une relation dans un ensemble ( on dit aussi « sur un ensemble » ) estune proposition qui lie un certain nombre d’éléments. Sur un ensemble constitué de personnes,par exemple, on pourrait définir une relation « est_marié_avec ». Ce concept peut être généraliséen établissant des liens entre des éléments d’ensembles distincts.

– La relation « est_marié_avec » relie deux personnes

– La relation entre la commande et le client est une relation binaire ou de dimension 2.

– Une location de voiture représente une relation entre un véhicule, une personne et une date.

De manière générale, une relation peut être caractérisée par n dimensions. La correspondanceest alors dite relation d’arité n ou relation n-aire.

Les mots-clefs du modèle relationnel.

– Univers U : un ensemble d’Attributs.

– Domaine : le domaine Dom(A) d’un attribut A est l’ensemble des valeurs que cet attributpeut prendre.

– Schéma d’une relation R : c’est l’ensemble des attributs de R munis de leurs domaines.

– n-uplet sur un ensemble E d’attributs : la donnée de n valeurs d’attributs, chacune appar-tenant au domaine de l’un des attributs de E.

– Relation (ou table) sur un schéma de relation : ensemble de n-uplets.

– Schéma d’une BD : ensemble de schémas de relations.

– Base de données sur un schéma de base de données : ensemble de relations, chacune étantune relation sur un schéma de relation.

18 CHAPITRE 2. NOTIONS ESSENTIELLES POUR LE MODÈLE RELATIONNEL

2.1 Univers & Domaines

Un univers est un ensemble fini et non vide de noms, appelés attributs.

Exemple : Si on cherche à représenter les horaires des projections des films actuellement àl’affiche, on pose U = {nomFilm,realisateur,acteur,producteur,nomCinema,horaire}Dom(nomFilm) = chaînes de caractèresDom(realisateur) = chaînes de caractèresDom(acteur) = chaînes de caractèresDom(producteur) = chaînes de caractèresDom(nomCinema) = chaînes de caractèresDom(horaire) = {h : m|h ∈ [1,...,23],m ∈ [0,...,59]}

2.2 Schéma d’une relation dont le nom est R.

Un schéma d’une relation dont le nom est R est un sous ensemble non vide de l’univers U.

Exemple :

– Schéma de la relation Film = {nomFilm,realisateur,acteur,producteur}– Schéma de la relation Projection = {nomFilm,nomCinema,horaire}

Intuition : on décrit deux tables dont les colonnes vont décrire les attributs de certains objets,et les lignes ces objets.

Film =nomFilm realisateur acteur producteur

......

......

Projection =nomFilm nomCinema horaire

......

...

2.3 n-uplet sur un ensemble E d’attributs.

Soit E = {A1,A2,...,An} le schéma d’une relation. Un n-uplet est une fonction n : E →Dom(A1) ∪ ... ∪Dom(An) telle que ∀Ai ∈ E,n(Ai) ∈ Dom(Ai)Si E ⊂ E′, la restriction de n à E′ se note n(E′).

Exemple.

– un n-uplet sur la relation Film : (“star wars 7, le reveil de la force”,”J.J. Abrams”,”DaisyRidley”, “Bryan Burk” )

– un n-uplet sur la relation Projection:(“Les 8 salopards”,”Cap Cinema”,13:35)

– sa restriction à (nomCinema, nomFilm) est: (“Les 8 salopards”,”Cap Cinema”)

Pourquoi avoir défini un n-uplet comme une fonction? La définition habituelle des n-uplets donneun ordre aux attributs de la table. Ici, les attributs ne sont pas ordonnés.

2.4. UNE RELATION R SUR UN SCHÉMA DE RELATION S 19

2.4 Une relation r sur un schéma de relation S

Une relation r sur un schéma de relation S est un ensemble de n-uplets sur S. On dit aussique S est le schéma de r.

Film =

nomFilm realisateur acteur producteurnf1 r1 a1 p1nf1 r1 a2 p1nf2 r2 a1 p2nf3 r2 a1 p2

Projection =

nomFilm nomCinema horairenf1 nc1 h1nf1 nc1 h2nf1 nc1 h3nf1 nc2 h4nf2 nc1 h5nf3 nc2 h1

2.5 Un schéma de base de données

Un schéma d’une base de données sur un univers U est un ensemble non vide d’expressionsde la forme N(S) où

– S est un schéma de relation et– N est un nom de relation.

Exemple :– U = {nomFilm,realisateur,acteur,producteur,nomCinema,horaire}

– S =

{Film(nomFilm,realisateur,acteur,producteur),P rojection(nomFilm,nomCinema,horaire)

}

Intuition : Le schéma de la base est la donnée du format des schémas des différentes tables dela base.

2.6 Base de données

– Une base de données B sur un schéma de base S (avec univers U) est un ensemble derelations finies r1,...,rn où

– ri est associée à un nom de relation Ni et– ri est telle que si Ni(S) ∈ S, alors ri a S comme schéma.

– On peut aussi imposer des contraintes sur les données.

– Par exemple, l’un des attributs d’une table doit être une clef de cette table (il n’existepas deux n-uplets de cette relation qui ont la même valeur pour cet attribut).

– Autre contrainte plus générale : pour une même classe de personnel, le salaire le plushaut ne doit pas dépasser de plus de 20% le salaire le plus bas.

Ces contraintes sont appelées contraintes d’intégrité, elles font aussi partie de la spécifica-tion du format des données de la base.

20 CHAPITRE 2. NOTIONS ESSENTIELLES POUR LE MODÈLE RELATIONNEL

2.7 Les identifiants d’une relation

Un identifiant (ou clé, clé primaire) d’une relation est un ensemble minimum d’attributsde la relation tel qu’il ne peut pas exister deux n-uplets (tuples en anglais) ayant même valeurpour cet identifiant.

Une relation peut avoir plusieurs identifiants. Un identifiant peut être composé de plusieursattributs. On souligne les identifiants (attention à ne pas confondre l’existence de deux identifiantssimples avec l’existence d’un identifiant composé de deux attributs).

Règle : Les champs associés aux attributs des identifiants sont toujours remplis. On dit queles attributs des identifiants sont obligatoires. Pourquoi?

Pour favoriser la compréhension du schéma de la relation, on définira une relation par :– son nom,– une liste de couples (nom d’attribut, domaine),– ses identifiants, c’est à dire les différents sous ensembles d’attributs qui permettent d’iden-

tifier un n-uplet de la relation– sa définition en français.

Les identifiants externes / clés externes / clés étrangères. Les identifiants externesou clés externes ou encore clés étrangères sont des attributs ou des ensembles d’attributsdont la valeur est toujours égale à un identifiant d’une autre relation (voire de la même).

Exemple.– la relation Etudiants avec les attributs nom, prénom, numEtudiant et age– la relation Cours avec les attributs nomC, horaire, enseignant– la relation suit avec les attributs numEtudiant et nomC.

Dans la relation suit, chacun des attributs nomC et numEtudiant est une clef externe : nomCréférence un cours et numEtudiant référence un étudiant.

La définition d’un schéma d’une relation comprend donc aussi la définition des identifiantsexternes sous la forme suivante :

Suit(numEtudiant: Integer, nomC: chaîne de caractères)identifiants externes :numEtudiant référence un EtudiantnomC référence un Cours

Si la relation référencée a plusieurs identifiants, il faut alors préciser lequel est utilisé comme clefexterne : nomC référence un Cours.nomC.

A tout instant, les valeurs d’une clef externe doivent appartenir à l’ensemble des valeurs pourla clef primaire de la relation référencée. Cette intégrité de référence est assurée par le SGBD :ce dernier vérifie qu’une insertion ou modification d’un tuple avec clef externe est compatible avecun tuple de la relation référencée, qu’une suppression d’un tuple de la table référencée n’entraînepas des incohérences dans certains tuples de la table avec clef externe.

Exercice. Comment représenter un attribut multi-valué, c’est à dire une colonne de la tabledans laquelle on aimerait mettre plusieurs valeurs. Par exemple, les étudiants peuvent avoir

2.8. LANGAGE DE DESCRIPTION DE DONNÉES DE SQL 21

plusieurs prénoms, mais le nombre de prénoms n’est pas connu à l’avance.– Considerer 3 attributs (prenom1, prenom2, prenom3).

Combien d’attributs a-t-on besoin? Comment poser une question sur l’un des prénoms?Inconvénients : on réserve de la place en trop pour les étudiants qui n’ont qu’un seul prénom.

– Dupliquer les lignes autant de fois qu’il y a de prénoms. inconvénients : duplication desdonnées (problématique si changement de l’adresse par exemple), occupation mémoire.

– On suprime de la relation Etudiants l’attribut prénom et on crée une autre relationEtudPrenoms dont les attributs sont numEtudiant et prenom. Par contre on ne connaîtplus l’odre des prénoms! Il faut alors rajouter un attribut à la relation EtudPrenoms :numeroPrenom.

2.8 Langage de Description de Données de SQL

Comme on l’a déjà dit dans le premier chapitre, le langage de description de données (LDD)permet de décrire la structure logique de la base de données, de manière à ce que le SGBD puissela créer. Pour le modèle relationnel, SQL (Standard Query Language) est devenu la norme. Enfait, SQL est à la fois un langage de description de données et un langage de manipulation dedonnées. Dans ce chapitre, nous n’abordons que l’aspect description des données.

2.8.1 CREATE

CREATE TABLE nom_table(nom_col1 type_col1 [DEFAULT valeur1] [contrainte_col1],nom_col2 type_col2 [DEFAULT valeur2] [contrainte_col2],...[CONSTRAINT [contrainte_table1]],[CONSTRAINT [contrainte_table2]],...)

Remarques importantes :1. Le nom de la table doit être choisi avec soin : il doit faciliter la compréhension du schéma

par les utilisateurs. Notez que les caractères accentués, les caractères spéciaux sont à éviter,ainsi que des noms trop longs ou trop courts.

2. Chaque colonne porte un nom, unique dans la table. Mais 2 tables différentes peuventavoir des colonnes de même nom. Ceci est à proscrire lorsque la sémantique des colonnesest différente, mais ceci est conseillé lorsque la sémantique des 2 colonnes est la même.

3. type_col représente les types de données :– types numériques :

– types numériques exacts (NUMERIC≡ DECIMAL≡ DEC, INTEGER≡ INT, et SMALLINT),NUMERIC(5,2) ≡ DEC(5,2)

– types approchés (REAL, FLOAT et DOUBLE PRECISION) : représentation binaire– types chaînes de caractères : CHAR(30), VARCHAR(50) Quand une valeur CHAR est

enregistrée, elle est complété à droite avec des espaces jusqu’à atteindre la valeurfixée.

22 CHAPITRE 2. NOTIONS ESSENTIELLES POUR LE MODÈLE RELATIONNEL

– type BLOB, pour Binary Long Object (TINYBLOB, BLOB, MEDIUMBLOB, et LONGBLOB ):ce type permet de stocker un objet binaire de grande taille, qui peut contenir unequantité variable de données. Type pas normalisé.

– Les quatre types TEXT (TINYTEXT, TEXT, MEDIUMTEXT, et LONGTEXT) correspondent auxtypes BLOB équivalents, (insensible à la casse contrairement aux BLOB).

– Une énumération ENUM est une chaîne dont la valeur est choisie parmi une liste devaleurs autorisées lors de la création de la table. ENUM("un", "deux", "trois")

– Les types dates et heures sont DATE, TIME, TIMESTAMP (composé de DATE et TIME,parfois noté DATETIME), et YEAR. (mysql ne vérifie pas qu’il s’agit d’une bonne date,on peut écrire le 31/04/2008 par exemple).

4. DEFAULT : permet de spécifier une valeur par défaut. Cette valeur par défaut peut êtrenumérique, une chaîne de caractères, ou bien un mot clef comme NULL, USER, CURRENT_DATE,CURRENT_TIME...

5. contraintes de colonne :

– contrainte d’obligation : NOT NULL– contrainte d’unicité : UNIQUE / NOT UNIQUE– contrainte de clé primaire : PRIMARY KEY (identique à UNIQUE mais ne peut apparaître

qu’une seule fois par table). C’est la colonne privilégiée pour les contraintes référen-tielles.

– contrainte d’intégrité référentielle : REFERENCES nom_table(col)– contrainte dite sémantique : CHECK suivi d’une contrainte. Exemple : Age INTEGER,CHECK (Age < 100)

6. contraintes de tables :

– contrainte d’unicité : UNIQUE. Exemple : UNIQUE (code_rayon,date_emprunt)– contrainte dite sémantique : CHECK. Exemple : CHECK ((salaire <= 20000 AND age< 30) OR (salaire>30000))

Il est possible de donner un nom à une contrainte grâce au mot clé CONSTRAINT suividu nom que l’on donne à la contrainte, de telle manière à ce que le nom donné s’affiche encas de non respect de l’intégrité, c’est-à-dire lorsque la clause que l’on a spécifiée n’est pasvalidée.

Remarque 1. Il faut faire vraiment attention aux définitions des contraintes d’intégrité. Eneffet, il est aussi possible de définir les comportements du SGBD en cas de modifications desdonnées de la table référencée. Par exemple, que doit-on faire lorsque l’identifiant d’un n-upletest mis à jour ou même lorsqu’il est supprimé?

reference_definition:REFERENCES tbl_name [(index_col_name,...)]

[ON DELETE reference_option][ON UPDATE reference_option]

reference_option:CASCADE | RESTRICT | NO ACTION | SET NULL | SET DEFAULT

– CASCADE indique la suppression/modification en cascade des lignes de la table étrangèredont les clés étrangères correspondent aux clés primaires des lignes effacées.

2.8. LANGAGE DE DESCRIPTION DE DONNÉES DE SQL 23

– RESTRICT indique une erreur en cas d’effacement d’une valeur correspondant à la clé.RESTRICT permet d’interdire la suppression d’un enregistrement référencé par un enre-gistrement d’une autre relation. On trouve également l’expression NO ACTION à la place dumot clé RESTRICT dans certains SGBD.

– SET NULL place la valeur NULL dans la ligne de la table étrangère en cas d’effacement d’unevaleur correspondant à la clé.

– SET DEFAULT place la valeur par défaut (qui suit ce paramètre) dans la ligne de la tableétrangère en cas d’effacement d’une valeur correspondant à la clé.

Remarque 2.1. Lorsque l’identifiant est composé de plusieurs attributs, la clé primaire se définit grâce

à la clause PRIMARY KEY suivie de la liste de colonnes, séparées par des virgules, entreparenthèses. Ces colonnes ne peuvent alors plus prendre la valeur NULL et doivent êtretelles que deux lignes ne puissent avoir simultanément la même combinaison de valeurspour ces colonnes. Exemple : PRIMARY KEY (colonne1, colonne2, ...)

2. Lorsqu’une liste de colonnes de la table en cours de définition permet de définir la cléprimaire d’une table étrangère, on parle alors de clé étrangère, et on utilise la clause FOREIGNKEY suivie de la liste de colonnes de la table en cours de définition, séparées par des virgules,entre parenthèses, puis de la clause REFERENCES suivie du nom de la table étrangère et dela liste de ses colonnes correspondantes, séparées par des virgules, entre parenthèses.FOREIGN KEY (colonne1, colonne2, ...)REFERENCES Nom_de_la_table_etrangere(colonne1,colonne2,...)

2.8.2 ALTER

ALTER TABLE nom_table alter_specification [, alter_specification] ...

alter_specification:ADD [COLUMN] column_definition [FIRST | AFTER col_name ]

| ADD [COLUMN] (column_definition,...)| ADD [CONSTRAINT [symbol]]

PRIMARY KEY (index_col_name,...)| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}| CHANGE [COLUMN] old_col_name column_definition| MODIFY [COLUMN] column_definition| DROP col_name| DROP PRIMARY KEY| RENAME [TO] new_tbl_name

2.8.3 DROP

DROP TABLE tbl_name [, tbl_name] ...

24 CHAPITRE 2. NOTIONS ESSENTIELLES POUR LE MODÈLE RELATIONNEL

25

Chapitre 3

Langages de Manipulation relationnels

Le modèle relationnel repose sur la notion de relation assimilable d’un point de vue logique àun tableau. Du coup, les langages classiques qui permettent de manipuler des tableaux, pourraientbien pouvoir servir à rechercher les informations dans ce genre de structures de données. Pourquoialors avoir introduit des langages de manipulation de données relationnelles?

La réponse est simple. Pour qu’un programmeur puisse effectuer une recherche à l’aide d’unlangage classique impératif, il est nécessaire qu’il connaisse la structure de la relation. Cela estcontraire au principe de séparation des programmes et des données. Les utilisateurs doiventconnaître l’organisation des données (tri, existence d’index, ...) pour que leurs requêtes soientefficaces. Du coup, si la structure change, les programmes doivent aussi changer...

Les Langages de Manipulation de données doivent donc être le plus proche du modèleconceptuel (ne porter que sur les concepts du schéma: relation, attributs, domaines) et doiventignorer complètement l’organisation interne des relations.

Le modèle relationnel a été proposé avec deux LMD de base : l’algèbre relationnel et lecalcul relationnel, équivalents en puissance. D’autres LMD ont pu être ensuite proposés.

3.1 L’algèbre Relationnelle

L’algèbre relationnelle repose sur un ensemble d’opérateurs qui, à partir d’une ou deux re-lations existantes, créent une nouvelle relation temporaire. Le resultat est effectivement unerelation avec les mêmes caractéristiques qu’une relation de la base de données et peut donc aussiêtre utilisée avec de nouveaux opérateurs.

Il y a 5 opérateurs de base (sélection, projection, union, différence et produit), un opérateursyntaxique (renommer) qui modifie le schéma mais pas les tuples de la relation.

A partir de ces opérateurs, d’autres opérateurs ont été introduits mais qui ne sont que lacomposée de plusieurs opérateurs de base : ils ne sont que des raccourcis. Les plus fréquentssont : intersection, jointure naturelle, théta jointure et division.

Une autre classification des opérateurs peut être faite. La première classe est celle des opé-rateurs basés sur la théorie des ensembles (union, intersection, différence, produit), alors que laseconde est celle des opérateurs construits spécifiquement pour les BD relationnelles (sélection,projection, jointure, division et renommage).

26 CHAPITRE 3. LANGAGES DE MANIPULATION RELATIONNELS

3.1.1 Les opérateurs unaires (sur une seule opérande)

3.1.1.1 La projection

Cet opérateur construit une relation dans laquelle n’apparaissent que certains attributs de larelation opérande (on extrait uniquement des colonnes du tableau).

Définition 1 Soit R(A1,A2,...,An) une relation et soient {Ai1 ,Ai2 ,...Aij} un sous ensemble deses attributs. La projection de R sur {Ai1 ,Ai2 ,...Aij}, notée π[Ai1 ,Ai2 ,...Aij ]R (π comme pro-jection) est une nouvelle relation, temporaire, de schéma (Ai1 ,Ai2 ,...Aij ) et de population égaleà

{ t | ∃r : (r ∈ R) ∧ (t.Ai1 = r.Ai1) ∧ . . . (t.Aij = r.Aij ) ) }

Remarque. Il s’agit d’une opération ensembliste. Donc si l’opération crée des doublons, ilssont automatiquement éliminés.

Exemple.Soit la relation Personne suivante :

nom prénom jour mois année sexeJean Thierry 29 02 1960 MTalon Achille 20 11 1978 MRochat Dominique 07 12 1956 MMartin Joëlle 01 05 1968 FMartin Jules 03 03 1984 MRochat Dominique 17 02 1976 F

Les projections sur (nom,prénom) et sur(nom,année) sont :

nom prénomJean ThierryTalon AchilleRochat DominiqueMartin JoëlleMartin Jules

et

nom annéeJean 1960Talon 1978Rochat 1956Martin 1968Martin 1984Rochat 1976

3.1.1.2 La sélection

Cet opérateur construit une relation dans laquelle seuls certains tuples apparaissent. Onsélectionne les tuples qui satisfont une certaine propriété, appelé prédicat de sélection.

Définition 2 Soit R(A1,A2,...,An) une relation la sélection selon un prédicat p, notée σ[p]R (σcomme sélection) est une nouvelle relation, temporaire, de schéma identique à celui de R et depopulation égale à l’ensemble des tuples de R pour lesquels le prédicat p est vrai.

Exemple. A partir de la relation Personne de l’exemple précédent, on peut créer la relationFemme:= σ[sexe =′ F ′]Personne

nom prénom jour mois année sexeMartin Joëlle 01 05 1968 FRochat Dominique 17 02 1976 F

Syntaxe du prédicat.<p> ::= <condition> | <p> <opérateur logique><p> | ¬ <p> | “(“ <p> “)”<opérateur logique> ::= ∨ | ∧<condition> ::= Attr <opérateur comp> valeur | Attr <opérateur comp> Attr<opérateur comp> ::= = | 6= | ≤ | < | > | ≥

3.1. L’ALGÈBRE RELATIONNELLE 27

Remarque.1. Les opérateurs de comparaisons ≤ , < , > , ≥ ne peuvent s’appliquer que sur des attributs

dont le domaine est muni d’un ordre : valeurs numériques, dates, chaînes de caractères(ordre alphabétique), chaînes de caractères alphanumériques (ordre alphabétique en utili-sant les codes numériques des caractères). Pour les domaines sans ordre, on ne peut utiliserque les opérateurs = et 6=.

2. Lorsque l’on compare deux attributs, il faut s’assurer que les deux attributs aient mêmedomaine.

Exercice. Trouver la liste des noms et prénoms de tous les hommes nés avant 1975.H := π[nom, prénom]σ[sexe=’M’ ∧ année < 1975]Personne.

nom prénomJean Thierry

Rochat Dominique

3.1.1.3 Le renommage

L’opérateur de renommage α permet de changer le nom d’un ou plusieurs attribut(s) d’unerelation R. α[nomAttr1 : newNameForAttr1,...]R

Remarque. Cet opérateur est utile lorsqu’il y a un problème d’homonymie ou de synonymie,ou alors avant des opérations ensemblistes (union, différence, intersection) qui nécessite que lesattributs correspondants aient le même nom.

3.1.2 Les opérateurs de jointure

Exemple. Pour illustrer les jointures, considérons la base de données relationnelle InstitutFormationdont le schéma est le suivant :

personne(numPers,nom,adresse)personnePrenom(numPers,numPrenom,prenom)etudiant(numPers,numEtud,dateN)etudiantEtude(numEtud,annee,diplome)enseignant(numPers,tel,status,numEns,banque,agence,compte)cours(nomC,cycle,numEns)obtenu(numEtud,nomC,note)inscrit(numEtud,nomC)prérequis(nomC,nomCpre)

3.1.2.1 Le produit cartésien

Définition 3 Soient 2 relations R(A1,A2, . . . ,An) et S(B1,B2, . . . ,Bp) n’ayant aucun attribut encommun. Le produit cartésien, noté R×S est la relation temporaire de schéma (A1,A2, . . . ,An,B1,B2, . . . ,Bp)dont la population est l’ensemble des tuples de R et de S concaténés.

Exemple.– Existe-t-il des personnes dont le nom est identique au nom d’un cours? Donner leurs noms.

π[nom]σ[nom = nomC](personne× Cours)

28 CHAPITRE 3. LANGAGES DE MANIPULATION RELATIONNELS

On verra plus tard que l’on peut écrire cette requête avec une théta-jointure :

π[nom](personne on [nom = nomC]Cours)

3.1.2.2 La jointure naturelle de 2 relations ayant au moins 1 attribut en commun

Définition 4 La jointure de deux relations R(X,Y ) et S(Y,Z) où X, Y , Z représentent soit desattributs soit des ensembles d’attributs et où Y n’est pas vide, est la relation notée R on S, deschéma (X,Y,Z) dont la population est l’ensemble des tuples <x,y,z> obtenus par compositiond’un tuple <x,y> de R et d’un tuple <y,z> de S tels que les valeurs pour Y sont égales.

Remarque. La population de R on S contient n tuples avec n ∈ [0 : |R| × |S|] . La populationest vide ssi il n’y a pas de tuple de R et S qui ont même valeur pour Y. Il y a |R| × |S| tuplesdans la jointure lorsque les tuples de R et de S ont tous la même valeur pour Y.

Exemple.– Donner tous les renseignements sur les étudiants (nom, adresse, date de naissance, numE-

tud, numPers)Etudiant on Personne

– Donner les noms des étudiants ayant réussi le cours d’algoritmique.π[nom](σ[nomC = ’algorithmique’](Etudiant on Personne on Obtenu))π[nom](Etudiant on Personne on (σ[nomC = ’algorithmique’]Obtenu))

3.1.2.3 La théta jointure de 2 relations n’ayant aucun attribut commun

Définition 5 Soient 2 relations R(A1,A2, . . . ,An) et S(B1,B2, . . . ,Bp) n’ayant aucun attributen commun. La théta jointure selon le prédicat p, noté R on [p]S est la relation temporaire deschéma (A1,A2, . . . ,An,B1,B2, . . . ,Bp) dont la population est l’ensemble des tuples de R et de Sconcaténés qui satisfont le prédicat p.

Syntaxe du prédicat. Elle reste la même sauf pour la condition :<condition> ::= nomAttrdeR <opérateur comp> nomAttrdeS

Exemple.– liste des couples des numéros d’étudiants nés le même joursπ[numEtud,numEtud1](Etudiant on [(numEtud < numEtud1)∧(dateN = dateN1)]α[numEtud :numEtud1,dateN : dateN1]π[numEtud,dateN]Etudiant)

Remarque. Le produit est une théta jointure dont le prédicat serait toujours vrai.

3.1.3 Les opérateurs ensemblistes : union, différence, intersection

Définition 6 Soient deux relations de même schéma R(A1,A2, . . . ,An) et S(A1,A2, . . . ,An).Union : R∪S est la relation temporaire de même schéma et de population égale à l’ensembledes tuples de R et de ceux de S (avec élimination des doublons éventuels).Différence : R − S est la relation temporaire de même schéma et de population égale àl’ensemble des tuples de R moins ceux de S, c’est à dire à l’ensemble des tuples qui setrouvent dans R mais pas dans S.

3.1. L’ALGÈBRE RELATIONNELLE 29

Intersection : R ∩ S est la relation temporaire de même schéma et de population égale àl’ensemble des tuples qui sont présents à la fois dans R et dans S.

Exemple.– Donnez la liste composée d’une part de la liste des numéros des enseignants en BD et

d’autre part de la liste des numéros des étudiants inscrits en cours de BD.

H =

α[numEns : num](π[numEns]σ[nomC = BD]Cours)∪

α[numEtud : num](π[numEtud]σ[nomC = BD]inscrit)

– Donnez la liste des numéros d’étudiants qui ne sont pas inscrits au cours de BD.

π[numEtud]Etudiant− π[numEtud]σ[nomC = BD]inscrit

– Donnez la liste des numéros des personnes qui sont à la fois enseignants et étudiants.

π[numPers]Enseignant ∩ π[numPers]Etudiant

3.1.4 La division

Définition 7 Soient 2 relations R(A1,A2, . . . ,An) et V (A1,A2, . . . ,Af ) avec f < n telles quetous les attributs de V soient attributs de R. La division, noté R/V est la relation temporairede schéma (Af+1,Af+2, . . . ,An) dont la population est l’ensemble des tuples de R tronqués à(Af+1,Af+2, . . . ,An) tels que, si on les complète par n’importe quel tuple de V, le tuple obtenuest dans R.

{< af+1,af+2, . . . ,an > |∀ < a1,a2, . . . ,af >∈ V, < a1,a2, . . . ,af ,af+1,af+2, . . . ,an >∈ R}

Illustration. Soit la relation R suivante donnant pour chaque client la liste des grands crusdéjà achetés.

R =

nom cru annéeDupont St Emilion 2001Dupont Nuit St Georges 2000Dupont Nuit St Georges 2001Dupont Aligoté 2000Durant St Emilion 2001Durant Aligoté 2003Martin St Emilion 2001Martin Nuit St Georges 2001Martin Nuit St Georges 2000

On peut alors se poser plusieurs questions :1. Quels sont les clients qui ont déjà acheté à la fois du St Emilion 2001 et du Nuit St georges

2000?

Soit la relation V =

cru annéeSt Emilion 2001

Nuit St Georges 2000, la réponse est donnée par :R/V =

nomDupontMartin

30 CHAPITRE 3. LANGAGES DE MANIPULATION RELATIONNELS

2. Quels sont les clients qui ont déjà acheté du St Emilion 2001?

Soit la relation V ′ =cru année

St Emilion 2001, la réponse est donnée par : R/V ′ =

nomDupontDurantMartin

3. Quels sont les clients qui ont déjà acheté de l’Aligoté de 2005?

Soit la relation V ′′ =cru année

Aligoté 2005, la réponse est donnée par : R/V ′′ =

nom

Exemple.– Donnez la liste des étudiants qui peuvent s’inscrire au cours de système (un étudiant peut

s’inscrire à un cours s’il a validé les cours prérequis).– Dans un premier temps, on recherche tous les prérequis pour le cours de système :

H1 = α[nomCpre:nomC]π[nomCpre]σ[nomC=”système”]Prérequis

– Dans un deuxième temps, on calcule la liste des étudiants qui peuvent s’inscrire aucours de système

(π[numEtud,nomC]Obtenus/H1)

3.1.5 Liens entre les opérateurs

– Intersection :

R ∩ S = R− (R− S) = S − (S −R) ou alorsR ∩ S = (R ∪ S)− ((R− S) ∪ (S −R))

R S

R−S S−R

– Jointure naturelle :Soient R(X,Y ) et S(Y,Z).

R on S = π[X,Y,Z]σ[Y = Y ′](R× α[Y : Y ′]S)

– Théta Jointure :Soient R(X,Y ) et S(U,V ).

R on [p]S = σ[p](R× V )

– Division : Soient R(X,Y ) et S(Y ).

R/S = π[X]R− π[X](((π[X]R)× S)−R)

Explication :– π[X]R : toutes les valeurs de X dans R– (π[X]R)× S) : une valeur de X (présente dans R) suivie d’un tuple de S– (π[X]R) × S) − R) : les tuples (X,Y) n’appartenant pas à R avec une valeur de X

présente dans R– π[X](((π[X]R)×S)−R) : les valeurs de X (présentes dans R) pour lesquelles il existe

un tuple de S tel que (X,Y) n’appartient pas à R.

3.1. L’ALGÈBRE RELATIONNELLE 31

3.1.6 Complexités des opérateurs

Rappel : la complexité est l’ordre de grandeur du nombre d’instructions à exécuter pour avoirle résultat. Cette complexité s’exprime en fonction de la taille des données en entrée.

3.1.6.1 Sélection : σ[p]R

Dans le pire des cas, c’est à dire lorsqu’il n’y a pas de chemin d’accès aux données quis’exprime facilement en fonction de la condition, on doit balayer tous les tuples de la relation.Autrement dit, la complexité est en O(|R|). La taille de la relation résultat est donc compriseentre 0 et |R|.

3.1.6.2 Projection : π[Ai,Ak...]R

Si on veut juste faire une projection, il faut là aussi parcourir toute la table, et la com-plexité est en O(|R|). S’il y a une autre opération à faire simultanément, comme par exempleπ[nom]σ[p]Personne, alors la projection est faite en même temps que la sélection.Attention, la projection peut nécessiter de supprimer des doublons, par exemple par un tri.Suivant les cas, on considèrera que la complexité d’une projection est en 0(1) ou est celle d’untri.

3.1.6.3 Jointure naturelle, théta jointure, produit cartésien

Dans le pire des cas, il faut parcourir tous les couples de n-uplets : la complexité est doncen O(|R| × |S|) dans le pire des cas. Dans le cas du produit cartésien, la taille du résultat estexactement |R| × |S|.

Du coup, on a intérêt à faire des jointures sur des petites relations. Pour optimiser le temps deréponse à une requête, il vaut mieux faire d’abord des sélections (diminuer la taille des relations)avant de faire des jointures.

Exemple. Quels sont les cours assurés par Muller?

σ[nom = Muller](Personne on [numPers = numEns]Cours)

(σ[nom = Muller]Personne) on [numPers = numEns]Cours

3.1.7 Propriétés des opérateurs

1. Cascades de projections.Si {Ai1 ,Ai2 ,...,Aij} ⊆ {Ak1 ,Ak2 ,...,Akl} alors

π[Ai1 ,Ai2 ,...,Aij ](π[Ak1 ,Ak2 ,...,Akl ]R) = π[Ai1 ,Ai2 ,...,Aij ]R

2. Cascades de sélections.

σ[p1](σ[p2]R) = σ[p2](σ[p1]R) = π[p1 ∧ p2]R3. Propriétés des jointures et produits.

– Commutativité

R on S = S on R

R on [p]S = S on [p]R

R× S = S ×R

32 CHAPITRE 3. LANGAGES DE MANIPULATION RELATIONNELS

– Associativité– Jointure naturelle. Si R et S ont au moins un attribut en commun et si S et T

ont au moins un attribut en commun:

(R on S) on T = R on (S on T )

– Théta Jointure. si les relations R, S et T n’ont aucun attribut en commun :

(R on [p1]S) on [p2]T = R on [p1](S on [p2]T )

– Produit cartésien. si les relations R, S et T n’ont aucun attribut en commun :

(R× S)× T = R× (S × T )

4. Propriétés des opérateurs ensemblistes. Les opérateurs union et intersection sont commu-tatifs et associatifs. La différence n’est ni commutative ni associative.

————————————————

3.1.8 Ecrire des requêtes compliquées

On considère ici la base de dennées InstitutFormation présentée dans ce chapitre. Desrequêtes similaires peuvent être formulées sur d’autres bases de données, voir par exemple lasection 4.6. Supposons que l’on souhaite les noms des étudiants qui suivent des cours de l’ensei-gnant n. 123. Cette requête n’est pas très facile à transcrire directement en algèbre relationnelle.Comment s’y prend-on?

1. Identification des relations utiles pour exprimer la requête. Pour l’exemple proposé, il faudrales relations Personne (pour le nom de l’étudiant), Cours (pour les cours de l’enseignant123), Etudiant, et inscrit (pour faire le lien entre les deux relations précédentes).

2. recopier les schéma de ces relations et indiquer dans ces schémas– les attributs qui font partie du résultat de la requête (nom de l’étudiant),– les conditions portant sur les attributs (numEns=123)– les liens entre les relation: numPers de Personne = numPers de Etudiant; numEtud de

Etudiant = numEtud de Inscrit; nomC de Inscrit = nomC de Cours.

Personne (numPers, nom, adress)

Etudiant (numPers, numEtud, dateN)

?

Inscrit( numEtud, nomC)

cours( nomC, cycle, numEns)

=1233. traduire cette figure en expression algébrique :

– faire les sélections avec les conditions sur les attributs– faire les jointures (naturelle ou theta) selon les liens entre relation (une jointure par

lien)

3.2. LE CALCUL RELATIONNEL 33

– projeter sur les attributs recherchés.

π[nom](Personne on Etudiant on Inscrit on (σ[numEns = 123]Cours)

Exemple plus compliqué. Liste des noms des étudiants qui habitent dans la même ville quel’étudiant Jean Dupont (y compris Jean Dupont).

=Jean Dupond

Personne (numPers, nom, adresse)

Etudiant (numPers, numEtud, dateN)

Personne (numPers, nom, adresse)

Etudiant (numPers, numEtud, dateN)

?la tabledes étudiants

la tabledes étudiantsde nom"Jean Dupond"

π[nom]

(Etudiant on Personne)on [adresse = adresse1](α[adresse : adresse1]Π[adresse]Etudiant on σ[nom = JeanDupond]Personne)

Remarque. les requêtes qui contiennent un “pour tout” ou “aucun” ne se représentent que mald’une manière graphique.

3.2 Le calcul relationnel

L’objectif des langages prédicatifs ou langages de type calcul, inspiré du calcul des prédicatsde la logique du 1er ordre, est d’exprimer une requête par la définition du résultat en faisantabstraction du mécanisme nécessaire à l’obtention du résultat. Ce sont des langages déclaratifs.

Il en existe deux : le calcul des tuples (les variables du langage représentent des tuples) et lecalcul des domaines (les variables du langage représentent des valeurs dasn un domaine).

3.2.1 Calcul des tuples

Une requête est définie par une partie déclarative et par une expression du calcul.

– la partie déclarative associe des variables aux relations de la BD : x ∈ R, x ∈ R∪S (il fautque les schémas de R et S comportent des attributs de même nom et de même domaine).

– l’expression a la forme : {a.A,y.B, . . . z.D|fx,y,...z,t,...w} où x,y, . . . z,t, . . . w sont des variablesdont la portée a été déclarée avant, A,B, . . .D sont des attributs des relations correspon-dantes, et fx,y,...z,t,...w est une formule valide ayant pour variables libres x,y, . . . z,t, . . . w,et pour variables liées t, . . . w.La sémantique de cette expression est la projection sur les attributs A,B, . . .D du produitcartésien des relations associées aux variables x,y, . . . z réduit aux tuples de ce produit pourlesquels la formule fx,y,...z,t,...w est vraie.

34 CHAPITRE 3. LANGAGES DE MANIPULATION RELATIONNELS

Premiers exemples. Soit une BD comportant les relations suivantes : Etudiant(nom, prémon,anneeN,numEtud), Inscription(numEtud,nomC, note1, note2), Enseignant(nom,prénom,statut).

1. nom et prénom des étidiants nés après 1979.

e ∈ Etudiant; {e.nom,e.prénom|e.anneeN > 1979}2. Numéro, prénom et notes des étudiants de nom DUPONT inscript au cours de BD.

e ∈ Etudiant,i ∈ Inscription;{i.numEtud,e.nom,i.note1,i.note2|e.nom =′′ DUPOND′′∧e.numEtud = i.numEtud ∧ i.nomC =′′ BD′′}

Les formules valides. Une formule est dite liée (quantifiée) si elle est associée au quantifica-teur existentiel ou universel. Elle est dite libre sinon.

L’ensemble des formules valide est défini de manière inducive :– x.A ∼ a et x.A ∼ y.B sont des formules valides (∼∈ {= , 6= , < , ≤ , > , ≥} et a est une

constante)– si f1 et f2 sont des formules logiques alors f1 ∧ f2, f1 ∨ f2, ¬f1 le sont aussi– si fx est une formule logique où x est une variable libre, alors ∃x(fx) et ∀x(fx) sont des

formules valides.

Exercice.1. Ecrire des formules valides.2. noms et prénoms des étudiants dont les deux notes au cours de BD ont été 10.3. noms et prénoms des étudiants qui ont des notes supérieures à 10 à tous les cours

e ∈ Etudiant,i ∈ Inscription;{e.nom,e.prénom|∀i(e.numEtud = i.numEtud =⇒ i.note1 ≥ 10 ∧ i.note2 ≥ 10) ∧ ∃i(e.numEtud = i.numEtud)}

4. noms et prénoms des étudiants ayant eu au moins une note égale à 10.

e ∈ Etudiant,i ∈ Inscription;{e.nom,e.prénom|∃i(e.numEtud = i.numEtud ∧ (i.note1 ≥ 10 ∨ i.note2 ≥ 10)}

Rappel sur la logique du 1er ordre1. Toute formule peut se mettre sous la forme prénexe dans laquelle les quantificateurs sont

en préfixe, et la formule en suffixe ne contient aucun quantificateur.2. l’ensemble des connecteurs {¬, ∧ ,∨} est redondant : (f1 ∧ f2) ≡ ¬(¬f1 ∨ ¬f2)3. On peut aussi se passer du quantificateur ∀. En effet on a : ∀x(fx) ≡ ¬∃x(¬fx)

4. la sémantique des formules avec quantificateur portant sur des ensembles vide est la sui-vante :

∀x(fx) vraie∃x(fx) fausse

On peut montrer que le calcul des tuples peut exprimer tous les opérateurs de l’algèbre etvice versa (à faire soit en TD soit en travail personnel, une partien de cette question peut êtreposée à l’examen).

Le langage QUEL (défini dès 1975 pour le système INGRES) est une implémentation du calculdes tuples. Attention dans QUL, il n’y a pas directement le quantificateur ∀. Pour l’utiliser onecrit ∀x(fx) par COUNT (x.A WHERE fx) = 0.

3.2. LE CALCUL RELATIONNEL 35

3.2.2 Calcul des domaines

Les varianbles portent sur les valeurs des attributs et non plus sur des les valeurs des tuplesd’une relation.

– la partie déclarative a maintenant la forme suivante : x ∈ R.A, x ∈ R.A ∪ S.B...– l’expression a la forme {x,y, . . . ,z|fx,y,...,z} où fx,y,...,z est une formule valide dont les seules

variables libres sont x,y, . . . ,zLes formules valides sont défines de manière inductive :

– x1 ∼ a et x1 ∼ x2 sont des formules valides (∼∈ {= , 6= , < , ≤ , > , ≥} et a est uneconstante)

– formules d’appartenance : R(A : v1,B : v2, . . .) où A,B, . . . sont des attributs de la relationR, v1,v2, . . . sont soit des constantes soit des variables.Une condition d’appartenance R(A : v1,B : v2, . . .) est vraie si dans la relation R il existeau moins un tuple ayant v1 comme valeur pour attribut A, v2 comme valeur pour l’attributB...

– si f1 et f2 sont des formules logiques alors f1 ∧ f2, f1 ∨ f2, ¬f1 le sont aussi– si fx est une formule logique où x est une variable libre, alors ∃x(fx) et ∀x(fx) sont des

formules valides.

Exemples.1. noms et prénoms des étudiants né après 1968.

n ∈ Etudiant.nom,p ∈ Etudiant.prnom,a ∈ Etudiant.anneN ;{n,p|∃a(Etudiant(nom : n,prnom : prnom; anneN : a) ∧ a > 1969}

2. numéros, prénoms et notes en BD des étudiants de nom DUPOND.

no ∈ Etudiant.numEtud ∪ Inscription.numEtud,p ∈ Etudiant.prnom,n1 ∈ Inscription.note1,n2 ∈ Inscription.note2;{no,p,n1,n2|Etudiant(nom :′′ DUPOND′′,prenom : p,numEtud : no)∧Inscription(numEtud : no,nomC :′′ BD′′,note1 : n1,note2 : n2)}

3. noms et prénoms des étudiants ayant réussi un cours avec 2 notes égales à 10.

n ∈ Etudiant.nom,p ∈ Etudiant.prnom,no ∈ Etudiant.numEtud ∪ Inscription.numEtud;{n,p|∃no(Etudiant(nom : n,prenom : p,numEtud : no)∧Inscription(numEtud : no,note1 : 10,note2 : 10))}

4. noms et prénoms des étudiants ayant réussi tous les cours.

n ∈ Etudiant.nom,p ∈ Etudiant.prnom,no ∈ Etudiant.numEtud ∪ Inscription.numEtud,nc ∈ Inscription.nomC;{n,p|∃no(Etudiant(nom : n,prenom : p,numEtud : no)∧∀nc(Inscription(numEtud : no,nomC : nc,note1 : n1,note2 : n2) =⇒ (n1 > 10 ∧ n2 > 10))∧∃nc(Inscription(numEtud : no,nomC : nc))}

3.2.3 QBE : Query By Exemple

Il s’agit d’un langage visuel, défini dès 1977, et basé sur le calcul de domaines.

36 CHAPITRE 3. LANGAGES DE MANIPULATION RELATIONNELS

37

Chapitre 4

SQL : Standard Query Language

Le chapitre précédent expose comment les requêtes peuvent être exprimées dans un cadrethéorique qui relève de la théorie des ensembles. SQL, le language le plus utilisé pour les SGBDrelationnels, implémente les relations non pas comme des ensembles mais comme des multi-ensembles. Du coup, il peut y avoir redondance. Ce choix a été fait pour des questions d’effica-cité.

4.1 Format d’une requête simple

4.1.1 ordre SELECT

SELECT A1,...,AN FROM R WHERE C;

– A1,...,AN : attributs– R : nom d’une relation– C : condition de sélection sur les n-uplets de R, par exemple comme la selection de l’algèbre

relationnelle.

Le SELECT fait une projection (opération algébrique) du résultat de la sélection sur lesattributs A1,...,AN.

Exemple. soit le schéma de base de données suivant.

S =

Film(Titre,date,longueur,couleur,nomStudio,IdProd),Joue(NomFilm,F ilmDate,nomActeur,Paye),Acteur(nom,adresse,genre,dateNaissance),

Studio(Nom,Adresse),P roducteur(Nom,adresse,Id)

1. Quels sont les titre et longueur des films produits par le studio Disney en 1999?SELECT Titre, Longueur FROM Film WHERE nomStudio=’Disney’ and Date=1999;La réponse est naturellement une table.

2. On peut remplacer la suite exhaustives des attributs d’une table par le symbole * :SELECT * FROM Film WHERE nomStudio=’Disney’ and Date=1999;

3. Utilisation des ALIAS :SELECT Titre AS Nom, longueur AS Durée FROM FilmWHERE nomStudio=’Disney’ and Date=1999;

38 CHAPITRE 4. SQL : STANDARD QUERY LANGUAGE

Attention, ici, les colonnes de la relation résultats ont changé de noms.4. on peut un peu compliquer la sélection :

SELECT Titre FROM Film WHEREnomStudio=’Disney’ and (Date>1999 OR Longueur <90) AND NOT couleur;

4.1.2 Valeur NULL

1. la valeur NULL code l’absence de valeur2. NULL op v est évalué à NULL si op est un opérateur arithmétique et v une valeur.3. NULL = v est évalué à UNKNOWN (de même pour NULL > v). En particulier, cette expression

n’est pas élavuée à vraie.4. Faire donc attention lorsqu’on manipule l’absence de valeur NULL.

SELECT * FROM Film WHERE Date>=1970 OR Date<1970;

renvoie la table Film privée des n-uplets pour lesquels la valeur Date est null.Si on recherche dans une table les n-uplets pour lesquels une colonne n’a pas de valeur, on ne

peut pas utiliser une expression de la forme expr = NULL. La requête suivante ne renvoie aucunenregistrement car l’expression n’est jamais évaluée à vrai.SELECT * FROM my_table WHERE phone = NULL;Pour chercher les valeurs NULL, on doit utiliser l’expression IS NULL:SELECT * FROM my_table WHERE phone IS NULL;SELECT * FROM my_table WHERE phone = ’’;

4.1.3 ordonancement des n-uplets

Soient {B1,...,Bk} ⊂ {A1,...,An}.SELECT A1,...,AN FROM R WHERE CORDER BY B1,...Bk;Supposons que k = 2Si n(B1) < n′(B1) alors n avant n′.Si n(B1) = n′(B1) alors n avant n′ ssi n(B2) < n′(B2)

SELECT * FROM Film WHERE nomStudio=’Disney’ and Date=’1999’ORDER BY Longueur,Titre;

4.2 Requêtes concernant plusieurs relations

Différents types de jointures :1. CROSS JOIN ... ≡ , : produit cartésien

Soient R1,...,Rk des relations.SELECT A1,...,ANFROM R1, R2, ..., RkWHERE C;

Ici la relation dans laquelle on recherche les tuples est le produit cartésien des relationsnommées R1,...,Rk.

4.2. REQUÊTES CONCERNANT PLUSIEURS RELATIONS 39

Exemple : Quel est le nom du producteur de “stars war” ?SELECT nomFROM Film, ProducteurWHERE Titre=’’star war’’ AND IdProducteur=ID’’En algèbre, le produit cartésien requiert que les schémas des arguments soient disjoints.Que se passe-t-il si les 2 schémas ont des attributs en commun?

Exemple : les schémas Acteur et Producteur partage l’attribut Nom. Quels acteurs etquels producteurs ont la même adresse?SELECT Acteur.nom, Producteur.nomFROM Acteur, ProducteurWHERE Acteur.adresse= Producteur.adresse;La réponse de SQL sera une table dont les colonnes s’appellent Acteur.nom et Producteur.nom.Il y a eu un renommage des attributs.

2. [INNER] JOIN ... ON ... : jointure par défaut de MySQL.Ne sont incluses dans le résultat final que les lignes qui se correspondent dans les deuxtables.SELECT * FROM t1 JOIN t2 ON condition1 WHERE condition2

– La condition ON est de la même forme qu’une condition pouvant être utilisée dans laclause WHERE. Cette syntaxe permet de faire la distinction de prime abord entre cequi relève du filtrage et ce qui relève de la jointure.

– La lisibilité des requêtes est plus grande en utilisant la syntaxe à base de JOIN, enisolant ce qui est du filtrage et de la jointure, mais aussi en isolant avec clarté chaquecondition de jointure entre chaque couple de table.

– L’optimisation d’exécution de la requête est souvent plus pointue du fait de l’utilisa-tion du JOIN.

– Lorsque l’on utilise l’ancienne syntaxe et que l’on supprime la clause WHERE à desfins de tests, le moteur SQL réalise le produit cartésiens des tables ce qui revient laplupart du temps à mettre à genoux le serveur !

3. [NATURAL] JOIN ... [USING ...] : jointure naturelle en spécifiant éventuellement les listesde colonnes qui doivent exister dans les deux tables.SELECT * FROM t1 JOIN t2 USING (c1,c2,c3)La clause USING (columnlist) recense la liste des colonnes qui doivent exister dans les deuxtables. Les 2 jointures suivantes donnent le même résultat :a JOIN b USING (c1,c2,c3)a JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3Le terme NATURAL permet d’éviter de préciser les colonnes concernées par la jointure.Lorsqu’on a plusieurs tables à joindre :SELECT * FROM a JOIN b ON a.x=b.y JOIN c ON b.z=c.t ...

4. LEFT/RIGHT/FULL [OUTER] JOIN ... : jointures externes.Supposons que l’on ait 2 table dept(numdept,nomdept) et employeur(numdept,nom,adresse...).Dans la table dept il y a des lignes avec un numéro de département qui ne correspondentà aucune ligne de employeur.Ces lignes sont à l’extérieur de la jointure entre les deux tables.

40 CHAPITRE 4. SQL : STANDARD QUERY LANGUAGE

Si on souhaite, malgré tout, obtenir dans le résultat de la jointure ces lignes extérieures,on utilise un LEFT JOIN qui a la même syntaxe que le [INNER] JOIN.Qu’est-ce que cela va changer? On se souvient que pour une jointure interne on ne prendque les enregistrements de chaque table qu’on peut relier par la condition de jointure. Avecun LEFT JOIN on prendra en plus les enregistrements de la table écrite à gauche (car LEFT)de l’expression LEFT JOIN et qui ne sont reliés à aucun enregistrement de celle de droite. Ilest donc possible d’utiliser une jointure externe pour trouver les enregistrements dans unetable qui n’ont pas de correspondances dans une autre.Les mots clefs LEFT, RIGHT et FULL indiquent la manière dont le moteur de requête doiteffectuer la jointure externe. Il font référence à la table située à gauche (LEFT) du motclef JOIN ou à la table située à droite (RIGHT) de ce même mot clef. Le mot FULL indiqueque la jointure externe est bilatérale (le FULL n’est pas implémenté dans MySQL, mais estcalculable par une union d’une jointure droite et d’une jointure gauche).Les jointures externes sont extrêmement pratiques pour rapatrier le maximum d’informa-tion disponible, même si des lignes de table ne sont pas renseignées entre les différentestables jointes.Exemple d’utilisation. Soient les tables Disque(Id,Nom_Disque,Commentaires,IdPays)et Pays(Id,NPays). Imaginons que pour certains Disque, le code du pays n’a pas été pré-cisé. Maintenant, on souhaite lister tous les disques avec le nom du pays s’il existe. Si onutilise la requête suivante :SELECT * FROM Disque, Pays WHERE IdPays=pId;on ne va afficher que les disques pour lesquels le pays a été saisie.Donc, pour résoudre ce problème, il est nécessaire d’utiliser les jointures externes. Voici unexemple de jointure externe à utiliser :SELECT * FROM Disque LEFT OUTER JOIN Pays ON IdPays=pId;Ainsi, en utilisant cette jointure, on précise que la table Disque et la table Pays sont liéespar le champs IdPays.Et voilà !Autre exemple d’utilisation de la jointure externe :SELECT table1.* FROM table1

LEFT JOIN table2 ON table1.id=table2.idWHERE table2.id IS NULL;

Cet exemple retourne toutes les lignes trouvées dans table1 avec une valeur de id qui n’estpas présente dans table2 (autrement dit, toutes les lignes de table1 sans correspondancedans la table table2). Cela demande que table2.id soit déclaré NOT NULL, bien sûr.

4.2.1 Autres opérations de l’algèbre et Sous-requêtes imbriquées

– Opérateurs ensemblistes.– syntaxe SQL : UNION, INTERSECTION, EXCEPT.

Seul UNION est implémenté en MySQL.– Exemples :

(SELECT nom,adresse FROM Acteur)EXCEPT(SELECT nom,adresse FROM Producteur)

4.3. UTILISATION DES VARIABLES N -UPLETS DANS SQL 41

Πnom,adresse(Acteur) \Πnom,adresse(Producteur)

– Opérateur IN.Quels sont les numéros de téléphone des enseignants qui enseignent dans un cours validépar un étudiant dont le nom est Gautier?

SELECT tel FROM enseignantWHERE numEns IN

(SELECT numEns FROM coursWHERE nomC IN

(SELECT nomC FROM obtenuWHERE numEtud IN

(SELECT numEtud FROM EtudiantsWHERE numPers IN

(SELECT numPers FROM personneWHERE nom = ’Gautier’)

))

)

Quels sont les noms des producteurs de films dans lesquels joue Brad Pitt qui sont sortisavant 2006?

SELECT nom FROM ProducteurWHERE Id IN

(SELECT IdProducteur FROM FilmWHERE (Titre,Date) IN

(SELECT NomFilm,FilmDate FROM JOUEWHERE NomActeur = ’Brad Pitt’ and Date<=2006)

)

Quels sont les numéros des personnes qui sont enseignants mais pas étudiants?

SELECT numPers FROM enseignantWHERE numPers NOT IN

(SELECT numPers FROM enseignant)

4.3 Utilisation des variables n-uplets dans SQL

Les variables vont être utiles lorsque l’on cherche à raisonner sur plusieurs n-uplets d’unemême relation, à les comparer.

4.3.1 Exemple

Quels acteurs ont la même adresse?SELECT Star1.Nom, Star2.Nom

42 CHAPITRE 4. SQL : STANDARD QUERY LANGUAGE

FROM Acteur Star1, Acteur Star2WHERE Star1.adresse = Star2.adresse AND Star1.nom < Star2.nom;Ici Star1 et Star2 sont des variables pour les n-uplets. On aurait pu nommé ces variablesdifférement par exemple t1 et t2.

1. Que se passe-t-il si on ne met pas la condition Star1.nom < Star2.nom? (on obtient descouples dont les deux valeurs sont identiques)

2. Que se passe-t-il si on met la condition Star1.nom <> Star2.nom? (on a les couples endouble).

4.3.2 Quantification sur les variables n-uplets, opérateur ANY ≡ SOME

Quels sont les titres et dates des films dont le titre a été réutilisés par la suite pour au moinsun autre film?SELECT titre,dateFROM film t1WHERE date < ANY (SELECT date FROM film WHERE titre=t1.titre)

4.3.3 Quantification sur les variables n-uplets, opérateur ALL

Quels acteurs n’ont joué dans aucun film paru avant 2000?SELECT nomacteurFROM joue t1WHERE t1.nomacteur <> ALL

(SELECT nomacteur FROM joue WHERE FilmDate<=2000)

4.4 Opérations de SQL qui ne sont pas dans l’algèbre

1. Elimination des répétitions dans un multi-ensemble : DISTINCTExemple. Quel est l’ensemble des producteurs de films dans lesquels Brad Pitt joue?

SELECT DISTINCT nom FROM producteur, film,joueWHERE IdProd = Id AND titre= nomFilm and date=filmDateAND nomActeur=’’Brad Pitt’’;

2. Les opérateurs d’aggrégation SUM et AVG : calcul d’une somme et d’une moyenne.Exemple. A combien s’élèvent les gains de Brad Pitt?

SELECT SUM(Paye) FROM Joue WHERE nomActeur=’’Brad Pitt’’;

Exemple. Quel est la moyenne des cachets de Brad Pitt?

SELECT AVG(Paye) FROM Joue WHERE nomActeur=’’Brad Pitt’’;

3. Comportement identique pour les opérateurs MIN et MAX.4. L’opérateur d’aggrégation COUNT permet de compter le nombre de valeurs que peut prendre

un attribut.Exemple.

// nb de valeurs non nulles dans une colonne :

4.4. OPÉRATIONS DE SQL QUI NE SONT PAS DANS L’ALGÈBRE 43

SELECT COUNT(nomActeur) FROM joue;// nb de valeurs distinctes non nulles

SELECT COUNT(DISTINCT nomActeur) FROM joue;// nb total de lignes (même s’il y a des valeurs nulles

SELECT COUNT(*) FROM joue;

5. Regroupement l’opérateur GROUP BY.Après la partie WHERE, l’opérateur GROUP BY appliqué à un attribut A permet de partitionnerles n-uplets selon la valeur de l’attribut A.Exemple. On veut, film par film, la liste des acteurs.

SELECT nomFilm, nomActeur FROM Joue GROUP BY nomFilm;

Exercice. On veut, acteur par acteur, la somme total des cachets obtenus.

SELECT SUM(Paye) FROM Joue GROUP BY nomActeur;

Exercice 1. Quels sont les acteurs qui jouent dans le plus de films? Le résultat sera triépar nombre de films décroissant.

SELECT nomActeur, COUNT(*) AS nbFilms FROM joue GROUP BY nomActeurORDER BY nbFilms DESC;

Exercice 2. Quels sont les acteurs qui ont gagné le plus? Le résultat sera trié par totaldes cachets décroissant.

SELECT nomActeur, SUM(paye) AS total FROM joue GROUP BY nomActeurORDER BY total DESC;

Exercice 3. Trier les films selon la somme des cachets par ordre décroissant.SELECT nomFilm, SUM( PAYE ) AS cachets FROM joueGROUP BY nomFilmORDER BY cachets DESC;

4.4.1 HAVING

la clause HAVING condition permet de selectionner les groupes qui satisfont une condition.Cette condition porte non pas sur un tuple mais sur l’ensemble des tuples d’un groupe.

La condition du HAVING compare le résultat d’une fonction d’agrégation portant sur un at-tribut qui ne fait pas partie de la clause GROUP BY:

Exemple. Quels sont les films pour lesquels la somme des cachets dépassent 3000000?

SELECT nomFilm FROM joueGROUP BY nomFilmHAVING SUM( PAYE ) >=3000000ORDER BY SUM( PAYE ) DESC

Exercice. Quels sont les films dans lesquels Brad Pitt joue et pour lesquels la somme descachets dépassent 3000000?

SELECT nomFilm FROM joueWHERE nomFilm IN

(SELECT DISTINCT nomFilm FROM joue WHERE nomActeur=’’Brad Pitt’’)GROUP BY nomFilmHAVING SUM( PAYE ) >=3000000ORDER BY SUM( PAYE ) DESC

44 CHAPITRE 4. SQL : STANDARD QUERY LANGUAGE

4.5 Autres ordres SQL

4.5.1 ALTER

ALTER TABLE nom_table alter_specification [, alter_specification] ...

alter_specification:ADD [COLUMN] column_definition [FIRST | AFTER col_name ]

| ADD [COLUMN] (column_definition,...)| ADD [CONSTRAINT [symbol]]

PRIMARY KEY (index_col_name,...)| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}| CHANGE [COLUMN] old_col_name column_definition| MODIFY [COLUMN] column_definition| DROP col_name| DROP PRIMARY KEY| RENAME [TO] new_tbl_name

4.5.2 DROP

DROP TABLE tbl_name [, tbl_name] ...

4.5.3 INSERT

INSERT INTO tbl_name [(nomCol1 [, nomCol2]..)]VALUES (valeur1[,valeur2]...);

– Si on ne précise pas les noms des colonnes, les valeurs seront insérées dans les colonnescorrespondnat à l’ordre de leur création dans la table.

– A l’inverse, si la liste des colonnes est incomplète, les autres colonnes seront remplies avecla valeur NULL.

4.5.4 UPDATE

UPDATE nomTableSET nomCol1=expression1 [,nomCol2=expression2]...WHERE condition;

On ne peut modifier qu’une seule table à la fois. Cependant, la condition WHERE peut faireréférence à d’autres tables.UPDATE joue SET paye=paye*1.1WHERE nomActeur IN (SELECT nom FROM acteur WHERE genre=’F’)

4.5.5 DELETE

DELETE FROM nomTable WHERE condition;

L’instruction DELETE ne touche pas à la structure de la table. Si la condition est omise, tous lestuples sont effacés. La condition WHERE peut faire référence à plusieurs tables.

4.6. ECRIRE DES REQUÊTES COMPLIQUÉES 45

4.6 Ecrire des requêtes compliquées

Quels est la liste des noms des producteurs de films dans lesquels joue au moins un acteurqui habite Beverly Hill? Cette requête n’est pas très facile à transcrire directement en algèbrerelationnelle ou directement en SQL. Comment s’y prend-on?

1. Identification des relations utiles pour exprimer la requête. Pour l’exemple proposé, il faudrales relations Producteur (pour le nom des producteurs), Acteurs (pour les acteurs quihabitent Beverly Hill), Joue et Film (pour faire le lien entre les deux relations précédentes).

2. recopier les schémas de ces relations et indiquer dans ces schémas– les attributs qui font partie du résultat de la requête (nom des producteurs),– les conditions portant sur les attributs (adresse=Beverly Hill)– les liens entre les relations: idProd de Film = id de Producteur; nomActeur de Joue

= nomActeur de Acteur; nomFilm de Joue = Titre de Film.

Producteur (id, nom, adresse)

Acteur( nom, adresse, genre, ...)

Film (idProd, titre, date, longueur, couleur, nomstudio)

Joue( nomFilm, date, nomActeur, paye)

=Beverly

?

3. traduire cette figure en expression algébrique :– faire les sélections avec les conditions sur les attributs– faire les jointures (naturelle ou theta) selon les liens entre relations (une jointure par

lien)– projeter sur les attributs recherchés.

π[nom]

Producteur on[

id=

idProd

]Film on[film.date = joue.date

∧titre = nomFilm

] Joue on[nomActeur

=acteur.nom

]

(σ[

adresse=

Beverly

]Acteur

)

Exemple plus compliqué. Quelle est la liste des acteurs– qui habitent au même endroit qu’un acteur ayant joué dans Avatar et– qui a touché au moins un cachet de plus de 500000 euros?

Joue (nomFilm, FilmDate, nomActeur, paye)

Acteur (nom, adresse, genre, dateN)

Acteur (nom, adresse, genre, dateN)?

Joue (nomFilm, FilmDate, nomActeur, paye)

>500000

ont joué dans Avatar

un cachet > 500000qui ont touchédes acteurs

=Avatar

Les adresses

des acteurs quiLes adresses

46 CHAPITRE 4. SQL : STANDARD QUERY LANGUAGE

Ce qui donne en algèbre relationnelle :

π[nom]

(Acteur on

[nom=

nomActeur

]σ[paye > 500keuros]Joue

)

on [adr = adresse](α[adresse : adr]Π[adresse]

(Acteur on

[nom=

nomActeur

]σ[

nomFilm=

Avatar

]Joue

))

Remarque. les requêtes qui contiennent un “pour tout” ou “aucun” ne se représentent que mald’une manière graphique.

47

Chapitre 5

Un modèle conceptuel: le modèleEntité-Association

5.1 Conception des bases de données relationnelles

Les bases de données constituent le cœur du système d’information. La conception de cesbases est la tâche la plus ardue du processus de développement du système d’information. Si laphase de conception est bien gérée, le développement sera facile. Réciproquement, si la phasede conception n’a pas révélé certaines difficultés, la phase de développement sera obligée dereprendre des points non éclaircis de la conception. De nombreux bugs verront le jour.

Pour assister la démarche de conception, les méthodes de conception préconisent une dé-marche en étapes. Elles font appel à des modèles pour représenter, d’une part, les objets quicomposent les systèmes d’information, d’autre part, les relations existantes entre ces objets, etenfin, les attributs qui caractérisent ces objets et ces relations.

On peut distinguer, dans le processus de la conception, trois étapes principales qui corres-pondent à trois niveaux d’abstraction différents :

Universd’application

Elaboration du modèle EA Niveau conceptuel

Niveaux d’abstraction?

Implémentation sur le SGBD−R

Passage au modèle relationnel (ou organisationnel)Niveau logique

Niveau Physique

analyse

modélise

48 CHAPITRE 5. UN MODÈLE CONCEPTUEL: LE MODÈLE ENTITÉ-ASSOCIATION

5.2 Concepts de base et Diagramme Entité-Association

Le modèle entité-association (EA), aussi appelé entité-relation (ER) est un modèle dedonnées de type conceptuel. Il permet d’exprimer une partie du monde réel indépendamment detoute contingence informatique. Ce modèle est utilisé dans diverses méthodes et outils d’aide àla conception des bases de données (Merise, par exemple). Ce modèle se limite à une descriptionstatique : son but est d’aider à la conception des structures de données d’une application.

L’idée fondamentale du modèle EA repose sur la représentation des entités du monde réelque l’observateur peut identifier de manière distincte. On disctingue alors

– les entités (personne, voitures, contracts, accidents...),– les propriétés observables de ces entités, appelées attributs (taille, couleur, date de signa-

ture, lieu de l’accident...),– et les associations qui relient les entités (une personne conduit une voiture).

5.2.1 Entités, type d’entités et attributs.

Les entités servent à représenter des objets du monde réel, qu’ils soient concrets ou abstraits,perçus par le concepteur comme ayant une existance propre, et à propos duquel on cherche àenregistrer des informations.

Les types d’entité représentent les ensembles d’entités perçues comme similaires et ayantdes caractéristiques qui peuvent être comparées. Les objets du même type (deux voitures parexemple) seront bien évidement représentés par des instances différentes du même type d’entité.

Clients Véhicules Contrats Accidents

Num ClientNomAdresse

Num VMarqueModèleAnnée

Num accdatelieu

Num Contrat

dateType

On parlera alors d’occurrence d’un type d’entités pour désigner une instance, et de popu-lation d’un type d’entités, l’ensemble des occurrences d’un type d’entité.

Une occurence d’un type d’entité est vue par l’utilisateur comme un ensemble de valeurs :une valeur est associée à chacun des attributs du type d’entité (l’absence de valeur est considéréecomme une valeur pour l’attribut considéré – NULL).

Les attributs permettent de représenter des propriétés associées à un type d’entité. L’en-semble des attributs d’un type d’entité représente l’ensemble des informations inhérentes quel’on souhaite concerver sur les entités.

On parle d’attribut composé lorsque un attribut est décomposé en attributs plus simples.Exemple : un attribut date peut être décomposé en jour, mois et année qui sont donc lesattributs composants de l’attribut date.

5.2.2 Les associations / relations.

Les associations représentent les liens existants entre les entités. Les associations sont ca-ractérisées, comme les entités, par un nom et éventuellement des attributs.

On définit les types d’association comme étant les ensembles d’associations perçues commesimilaires et ayant des caractéristiques qui peuvent être comparées. Occurrence d’un type d’as-sociations et population d’un type d’associations sont les instance et ensemble d’occurrencesd’un type d’associations.

5.2. CONCEPTS DE BASE ET DIAGRAMME ENTITÉ-ASSOCIATION 49

Cardinalité : la description complète d’une relation nécessite la définition précise de la parti-cipation des entités. La cardinalité est le nombre de participation d’une entité à une relation.

– Cardinalité un à un : un employé ne peut être directeur que dans un seul départementet un département n’a qu’un seul employé comme directeur.

département

nom

adresse

employés

num_Emplnomadresse

date_entréefonction

directeur1 1

départements employés

– Cardinalité un à plusieurs : un département emploie plusieurs personnes (employés) quiréalisent différentes fonctions mais chaque employé ne fait partie que d’un seul département.

département

nom

adresse

employés

num_Emplnomadresse

date_entréefonction

affectationN 1

départements employés

– Cardinalité plusieurs à plusieurs : un type de produit peut être fabriqué dans plusieursusines et une usine donnée peut fabriquer plusieurs types de produits.

nom

adresse

Usines

libellécatégoriedosage

Médicaments

num_prod

produireN N

Usines Médicaments

Les cardinalités présentées ci-dessus sont appelées cardinalités maximales dans la mesureoù elles représentent le nombre maximum de participations d’une entité à une association. Enrevanche, la cardinalité minimale est le nombre minimal de participations d’une entité à uneassociation. La cardinalité minimale peut être 0 ou 1. Les cardinalités maximales et minimalestraduisent les contraintes propres aux entités et associations. Dans un schéma conceptuel, ellessont représentées comme suit :

0-1 aucune ou une seule1-1 une et une seule0-N aucune ou plusieurs1-N une ou plusieurs

Exercice à faire en cours : Faire le schéma Entité-Association correspondant aux entitésVéhicules, clients, Contrats, accidents.

Clients

Num Client

Nom

Adresse

couvert

appartient Signe

Véhicules

Marque

Num V

Modèle

Année

Contrats

Num Contrat

Type

date

concerne

Accidents

Num acc

date

lieu

1−N0−N

1−1

1−1 0−1

0−N0−N

1−1

50 CHAPITRE 5. UN MODÈLE CONCEPTUEL: LE MODÈLE ENTITÉ-ASSOCIATION

Notion de rôles. Une association permet de lier plusieurs entités entre elles. Chaque entité vadonc jouer un rôle vis à vis de la sémantique de l’association considérée. Si un type d’associationest relié à un même type d’entité par plusieurs liens différents, le rôle de chacun des types d’entitésest primordial (indispensable), car c’est lui qui va distinguer les différents cas possibles.Exemple : lorsqu’on modélise les liens hierarchiques dans une entreprise, on peut créer un typed’entité employé et une association est_le_supérieur_de. Cette association est reliée à l’entitéemployé par deux liens : un lien pour exprimer le ou les subordonnés, et un autre pour exprimerle chef. Les cardinalités seront 0-N pour le rôle “chef”, et 0:1 pour le rôle “subordonné”

Une occurrence d’un type d’association est vue par l’utilisateur comme un ensemble devaleurs et un ensemble d’occurrences de types d’entité : une valeur pour chaque attribut du typed’association (s’il en existe), et pour chaque rôle associé au type d’association, une occurrencedu type d’entité qui joue ce rôle.

5.2.3 Les identifiants des TE.

Parmi tous les attributs d’une entité, l’identifiant est un attribut ou un ensemble d’attributspermettant de déterminer une et une seule entité à l’intérieur de la population. On représentegraphiquement les identifiants en les soulignant.

Plus généralement, un identifiant est un ensemble minimum d’attributs tel qu’il n’existepas deux occurrences du TE qui ont la même valeur pour ces attributs.

Du coup lorsqu’il y a un identifiant composé d’au moins 2 attributs, il faut faire bien attentiondans la représentation graphique à bien le distinguer de deux identifiants simples.

Prenons un exemple. Dans une bibliothèque, on distingue le livre (œuvre protégée) del’exemplaire de cet œuvre (exemplaire numéro 1, 2 ...).

ISBN

Livres 1−N

numExemplétat

Exemplaires

titre

Correspond1−1

Dans ce cas-là, on dit que le TE exemplaire est faible. Un TE est dit faible lorsqu’aucunsous-ensemble de ses attributs constitue un identifiant, et qu’un identifiant peut être défini enintégrant un identifiant d’un autre TE’ qui lui est lié par un TA binaire de cardinalité (1,1) pourTE. On dit dans ce cas que TE dépend de TE’.Dans cet exemple le TE Exemplaires dépend du TE Livres, car tout exemplaire est rattachéà un livre. L’identifiant du TE Exemplaires (qui est le même que celui du TA), est constituéde l’identifiant du TE dont il dépend et d’un attribut (au moins) du TE faible. Dans ce cas,l’identifiant est (Livres.ISBN,numExempl).

5.2.4 Les identifiants des TA.

La définition des identifiants est la même que pour les types d’entités.

Prenons un exemple.

Personnes

numPnomsexeétat_civil

Mariage

époux

épousedate

0−1

0−1

Personnes

numPnomsexeétat_civil

0−1

0−1

suppléant

titulairetype−election

Suppléance

5.3. REPRÉSENTATIONS MULTIPLES : LA GÉNÉRALISATION/SPÉCIALISATION 51

Une occurrence du TA Suppléance est un triplet. Comme l’attribut numP est un identifiantde Personnes, et que la cardinalité des deux rôles est 0-1, Suppléance possède 2 identifiants :(suppléant.numP, type_election) et (titulaire.numP,type_election).

Ce raisonnement est bon uniquement si la base de données ne contient que les Suppléancesd’en cours. Si on mémorisait toutes les suppléances, les cardinalités des rôles suppléant ettitulaire seraient 0-N, et les identifiants de Suppléance seraient :(suppléant.numP, type_election,date) et (titulaire.numP,type_election,date).

Exercice : Donner les identifiants des types d’associations suivants.Etudiants

numEnom

état_civilprénoms

Controle

notesmoyenne

Matières

numMatcoeftitre

0−N 0−N

Cie assurance

nomAnumEnom

état_civilprénoms

immatriculationmarque

Personnes

Assure0−N 1−1

Voitures

numVoiture1−N

numProdclassetaille

Produits Clients0−NCommande

numClientnomadresse

0−N

numComdatequantité

Dans le 1er cas, l’identifiant est (Etudiant.numE,Matière.numMat).Dans le second, l’identifiant est Voitures.numV.Dans le troisième, l’identifiant est (Produit.numProd,numCom,Client.numClient).

Règle 1. Lorsqu’un type association est lié à un TE par un lien de cardinalité maximum égaleà 1, alors tout identifiant de ce TE fait partie de l’identifiant du TA considéré.

Règle 2. Lorsque plusieurs occurrences d’un TA peuvent lier les mêmes occurrences des TE,alors l’identifiant du TA contient au moins un attribut du TA.

5.3 Représentations multiples : la généralisation/spécialisation

Un type d’entité représente une classe d’objets du monde réel perçus comme similaires etayant les mêmes caractéristiques. Mais il peut arriver que ce même ensemble puisse être perçud’un autre point de vue comme plusieurs classes.

Par exemple, pour les articles d’un supermarché, pour certains, tous les articles ont le mêmestatut, alors que pour d’autres, il faut distinguer les articles d’alimentation des articles d’habille-ment : les traitements ne seront pas les mêmes (retrait des articles d’alimentation dès que la datede péremption est dépassée...)

On cherche donc à définir un TE générique Article, et des TE spécialisés représentant des sous-classes spécialisées. Notons cependant qu’un objet peut alors être représenté par deux entités, uneentité du type d’entité générique, et une entité du type d’entités spécialisé. Les classes d’objetsne sont donc plus distinctes.

On introduit donc le concept de généralisation/spécialisation. Les types d’entités spé-cialisés (ou spécifiques) et génériques sont représentés, et ils sont directement liés par uneflèche du TE spécialisé vers le TE générique. La sémantique de ce lien est la suivante : à touteentité d’un TE spécialisé correspond une et une seule entité du TE générique (à toute entité duTE générique correspond au plus une entité d’un TE spécialisé). Ces liens sont parfois appelésdes liens “est un” (IS A): un article d’habillement est un article. le TE spécialisé est appelé sous-type du TE générique, qui lui est appelé un sur-type du TE spécialisé. Lorsqu’il y a plusieursniveaux de sur et sous types, on parle de hiérarchie de généralisations.

52 CHAPITRE 5. UN MODÈLE CONCEPTUEL: LE MODÈLE ENTITÉ-ASSOCIATION

Par convention, les attributs qui sont communs à tous les sous-types, sont rattachés au typed’entités générique : les sous-types héritent de ces attributs (ainsi que des rôles d’associations).En plus des attributs du TE générique, les TE spécialisés peuvent avoir leurs propres attributs.

serviceAprès−vente

réparation

nomAtype

Articles

Livraison

Vente

0−Nquantitédate

quantité0−N

ArticlesArticlesHi−Fihabillement

date_lim_vente

Articlesalimentaires

taillecouleurs

puissance

0−N 0−N

Il n’est pas nécessaire que l’ensemble des sous-types constituent une partition du sur-type :certains articles peuvent n’appartenir à aucun sous-type du type d’entités Article. De même, lesTE spécifiques peuvent représenter des populations qui ne sont pas disjointes (voir par exemplel’exemple suivant dans lequel, la populations des étudiants n’est pas disjointe de la populationdes employés).

On parle de généralisation multiple lorsqu’un TE spécialisé est sous-type de plusieursautres TE. Exemple: un étudiant en thèse qui donne des cours est à la fois un employé del’université et un étudiant : il hérite à la fois des attributs des employés et de ceux des étudiants.

Identifiant d’un TE sous-type. Soit E un TE sous-type d’un TE E’. Tout identifiant de E’est aussi identifiant de E. E n’a pas nécessairement d’identifiant qui lui soit propre.

Exercice : Décrire par un diagramme EA l’ensemble des personnes travaillant dans une univer-sité. Chaque individu est une personne, la population des personnes est partagée en étudiants etemployés. Parmi les étudiants, on particularise la sous-population des doctorants, parmi lesquelscertains sont moniteurs, c’est-à-dire héritent de la population des enseignants. La population despersonnels est quant à elle découpée en trois : les enseignants (maîtres de conférences, professeurset autres), les techniciens et les administratifs.

Les attributs associés aux personnes sont : numero d’identifiant, nom, prénom. L’étudiant acomme attribut le département, le doctorant a un sujet de thèse, et l’employé a pour attribut saclasse (A,B,C).

identifiant

Personnes

nomprénom

Etudiants

dépt

Employés

classeTr

Doctorants

sujet

Enseignants Techniciens Administratifs

autres

statut

MCf

Professeurs

moniteurs

généralisation multiple

5.4. LA SPÉCIFICATION DES DIAGRAMMES EA 53

La généralisation multiple pose des problèmes liés à l’héritage : les sous-types peuvent hériterdeux fois d’un ancêtre commun (moniteurs dans l’exemple précédent), il peut y avoir conflitd’héritage lorsqu’un sous-type hérite de 2 TE ayant un nom d’attribut en commun. Ces problèmespeuvent être résolus par le concepteur en spécifiant une préférence d’héritage, sinon le systèmeapplique une règle implicite déterministe.

5.4 La spécification des diagrammes EA

5.4.1 Les TE

Un TE est décrit par les spécifications suivantes :– nom du type,– nom des sur-types s’il en existe,– la définition libre (commentaire) précisant la sémantique du type d’entité,– la description des attributs,– les identifiants.

Deux TE différents ne peuvent pas avoir le même nom.

5.4.2 Les TA

Un TA est écrit par les spécifications suivantes :– nom du type,– la définition libre (commentaire) précisant la sémantique du type d’association,– le nom des TE avec le nom du rôle les associant au TA (en pratique, ce n’est nécessaire

que pour les associations cycliques.),– pour chacun des rôles, ses cardinalités; si la cardinalité max est supérieure à 1, on précise

si les rôles liant une entité constitue une liste ou un ensemble (valeur par défaut),– la description des attributs,– la composition des identifiants, s’il en existe. voir plus loin pour plus de détail.

5.4.3 les attributs

Un attribut est décrit par les spécifications suivantes :– nom de l’attribut– définition libre– cardinalité (min:max) spécifiant combien de valeurs de cet attribut sont autorisées

– dans une occurrence du TE (resp. TA) si l’attribut est directement rattaché au TE(resp. TA)

– dans une occurrence de l’attribut composé dans le cas d’un attribut composé.

Si la cardinalité est supérieure à 1, on précise si les valeurs de l’attribut constituent uneliste ou une ensemble (valeur par défaut).

– si l’attribut n’est pas composé d’autres attributs : domaine de valeurs définissant les valeurspossibles

– si l’attribut est composé d’autres attributs : description des attributs composants.

54 CHAPITRE 5. UN MODÈLE CONCEPTUEL: LE MODÈLE ENTITÉ-ASSOCIATION

On distingue habituellement les attributs simples (attributs non composés), les attributscomplexes (attributs composés), les attributs monovalués (cardinalité max=1), les attri-buts multivalués (cardinalité max>1), les attributs obligatoires (cardinalité min=1), lesattributs facultatifs (cardinalité min=0).

Exemple :employés

identifiantE

cardinalité type d’attribut

1:1

1:1Nom

prénoms

formationValidée

diplome

année

poste

intitule

date−debut

date_fin

salaire

montant

date

année

mois

simple, monovalué, obligatoire

simple, monovalué, obligatoire

simple, multivalué, obligatoire1:N

complexe, multivalué, facultatif

complexe, multivalué, obligatoire

0:N

1:N

1:1

1:1

1:1

1:1

1:1

1:N

1:1

1:1

1:1

1:1

5.5 Contraintes d’intégrité

Il y a des propriétés des occurrences des TE et TA qui ne peuvent pas s’exprimer à l’aide deséléments que l’on vient de voir.

– Par exemple, pour le type d’association Mariages et le type d’entité Personnes, on saitque si une personne participe à une association du type Mariages, alors son état civil doitêtre marié. Exprimons cette règle à l’aide d’une logique du 1er ordre :

∀x,y ∈ Personnes,(x,y) ∈ Mariages =⇒ x.état = “Marié” ∧ y.état = “Marié”

– Une autre règle s’applique à cette exemple : si l’état civil d’une personne est “Marié”, il nepeut être changé en “Célibataire”

∀x ∈ Personnes,∀t1,t2 ∈ Temps,t1 < t2∧x(t1).état = “Marié” =⇒ x(t2).état 6= “Célibataire”

Prennons un autre exemple, celui d’un tournois de doubles mixtes.– seuls les hommes participent à l’association Equipe dans le rôle d’homme

∀x,y ∈ Personnes,(homme : x,y) ∈ Equipe =⇒ x.sexe = “M”

– seules les femmes participent à l’association Equipe dans le rôle d’femme

∀x,y ∈ Personnes,(femme : x,y) ∈ Equipe =⇒ x.sexe = “F”

De telles règles sur les états de la base de données (ou sur les transitions d’états de la basede données) ne peuvent pas être décrites à l’aide des concepts des modèles. Elles sont décritesà l’aide de règles d’intégrité. Si ces règles d’intégrité ne sont pas satisfaites par la base dedonnées, il y a une erreur et on dit que la base est incohérente.

L’implémentation de telles contraintes se fait par des prédicats de contraintes (CHECK deSQL), par des procédures déclanchées automatiquement (voir les TRIGGERS de SQL) ou pardes procédures associées aux schémas (voir les stored procedure de SQL).

5.6. CONLUSION 55

5.5.1 Contraintes d’intégrité sur les attributs

Les contraintes les plus fréquentes cherchent à réduire les valeurs possibles d’un attribut àcertaines valeurs du domaine sous-jacent. Par exemple, un mois dans une date sera un entiercompris entre 1 et 12: mois∈ [1 : 12].

Ces contraintes peuvent aussi dépendre d’un contexte :– si mois∈ {4,6,9,11} alors jour∈ [1 : 30], sinon si mois= 2 alors jour∈ [1 : 29], sinonjour∈ [1 : 31].

– si une personne participe à l’association Mariages, alors son état civil est marié.

5.5.2 Contraintes d’intégrité sur les cardinalités

Prenons l’exemple d’un TA “est_parent_de” et que le TE Parents comprend l’attribut“nb_enfants”. Alors on a la contrainte d’intégrité suivante : le “nb_enfants” d’un parent estégal au nombre d’occurrences dans le TA “est_parent_de” qui lie ce parent.

5.5.3 Contraintes d’intégrité sur les généralisations/spécialisations

5.6 Conlusion

Un schéma conceptuel entité-association est un ensemble de descriptions de types d’entité etde types d’associations (attributs, liens de généralisations...) et de contraintes d’intégrités.

56 CHAPITRE 5. UN MODÈLE CONCEPTUEL: LE MODÈLE ENTITÉ-ASSOCIATION

57

Chapitre 6

Normalisation d’une relation

6.1 Introduction

La normalisation des relations a pour but d’aider la conception de schémas relationnels.A travers cette normalisation, on va pouvoir améliorer, selon certains critères, la qualité d’unschéma relationnel.

Exemple. Lequel de ces deux schémas relationnels et le meilleur? pourquoi?

Produit(NP,NomP,Couleur,Poids)Fournisseur(NF,NomF,Adr,Tel)Livraison(NP,NF,Date,Qté)

Produit(NP,NomP,Couleur,Poids)Fournisseur(NF,NomF,Adr)Livraison(NP,NF,Date,TelF,Qté)

C’est évidement le premier schéma le meilleur. Le second exemple soulève les problèmes suivants :

– Si un fournisseur ne livre plus, on perd le numero de téléphone du fournisseur.– Si un fournisseur livre beaucoup, on duplique l’information du numéro de téléphone.– Pour enregistrer une nouvelle livraison, il faut recopier le numéro de téléphone.– Si un fournisseur change de numéro de téléphone, il faut propager la modification sur toutes

les livraisons de ce fournisseur.

La qualité de la relation peut être évaluée par son degré de normalisation : une relationpeut être en 1ère, 2ème, 3ème forme normale, en forme normale de Boyce-Codd ou en 4èmeforme normale. Plus le degré de normalisation d’une relation est élevé, plus la relation aura de« bonnes » propriétés.

6.2 Dépendances fonctionnelles et graphe des dépendances fonc-tionnelles

Définition 1 Etant donné une relation R(X,Y,Z), il existe une dépendance fonctionnelle,ou DF, de Y vers Z, (Y et Z étant soit des attributs soit des ensembles d’attributs) souvent notéeY → Z, si : pour tout couple envisageable de tuples de R, s’ils ont même valeurs pour l’attributY , ils ont aussi même valeur pour Z.On appelle Y la source de la dépendance fonctionnelle et Z la cible.

58 CHAPITRE 6. NORMALISATION D’UNE RELATION

Exemple. Pour la relation Produit(NP,NomP,Couleur,Poids), les dépendances sont les sui-vantes, si on considère que deux produits ne peuvent pas avoir même nom :

– NP → NomP, NP → Poids, NP → Couleur,– NomP → NP, NomP → Couleur, NomP → Poids,– NP → (NomP,Poids, Couleur)– (NP,NomP) → Poids, (NP,NomP) → Couleur,– ...

Définition 2 Une dépendance fonctionnelle X → B est élémentaire (on dit parfois com-plète, pleine) si, X et B étant resp. un groupe d’attributs et un attribut d’une même relation, Bn’est pas fonctionnellement dépendant d’un sous-ensemble de X.

Exemple. Dans la relation précédente, les dépendances NP → (Poids, Couleur), (NP,NomP)→ Poids ne sont pas élémentaires. La dépendance fonctionnelle (NP,NF,date) → Qté de larelation Livraison est élémentaire.

Chaque DF exprime un fait du monde réel. Les DFs élémentaires expriment des faits élémen-taires. Par exemple la DF NP→ Couleur exprime que chaque produit, identifié par un numéro, aune couleur bien caractérisée. (NP,NF,date) → Qté signifie qu’un fournisseur ne peut pas livréle même jour le même produit avec des quantités différentes.

Propriétés:– Si pour une relation donnée, on a les dépendances fonctionnelles X → Y et Y → Z, alors

on a aussi la dépendance fonctionnelle X → Z qui est dite déduite des deux autres.

Définition 3 Etant donnés une relation et un ensemble F de DF portant sur les attributs decette relation, on appelle graphe minimum des DF de la relation, tout graphe (S,A) dont S estl’ensemble des attributs de la relation et A est un sous-ensemble de F de DF élémentaires nondéduites, à partir duquel toute dépendance de F peut être déduite.

Il est facile de savoir si une DF est déduite des autres ou non. On construit le graphe detoutes les dépendances fonctionnelles. Une DF X → Y est déduite s’il existe un autre cheminallant de X à Y .

Remarques.1. Une clé est un sous-ensemble d’attributs respectant les 2 contraintes suivantes :

– Unicité : 2 n-uplets distincts ne peuvent avoir la même valeur pour ces attributs– Irréductibilité : il n’existe pas de sous-ensemble strict de la clé garantissant la règle

d’unicité.2. Tout graphe de dépendances fonctionnelles (minimum ou non) peut être utilisé pour la

recherche des identifiants de la relation. En effet, les identifiants correspondent aux en-sembles minimaux d’attributs X pour lesquels les chemins, partant d’un de ces attributs,atteignent tous les autres attributs du graphe.

3. Concept de sur-clé :une surclé est un sous-ensemble d’attributs de la relation, respectant uniquement la règled’unicité : 2 n-uplets distincts ne peuvent avoir la même valeur pour ces attributs

6.3. COUVERTURE MINIMALE 59

6.3 Couverture minimale

– Couverture minimale d’un ensemble de DF est un sous ensemble minimum de dépendancesfonctionnelles élémentaires (DFE) qui permettent de générer toutes les autres.

– Tout ensemble de dépendances fonctionnelles possède une couverture minimale (pas force-ment unique) composée de dépendances fonctionnelles dont les parties droites contiennent1 seul attribut.

– Notion très importante pour la décomposition des relations.

1er Algorithme de calcul de couverture minimale1. Décomposer chaque DF pour avoir un seul attribut à droite (règle de décomposition)2. Supprimer les attributs en surnombre à gauche : Pour tout X → Y , s’il existe un Z ∈ X

tel que Z → Y alors remplacer X → Y par Z → Y

3. Supprimer les DF redondantes (qu’on peut obtenir par transitivité ou qui sont triviales)

Considérons l’ensemble suivant : A→ B | B,C → D | A,C → B,D,E | D → E

1. Etape 1: décomposition A→ B | B,C → D | A,C → B | A,C → D | A,C → E | D → E

2. Etape 2: Suppression des attributs en surnombre à gauche A→ B | B,C → D | A,C → D| A,C → E | D → E

3. Etape 3: Supprimer la redondance La DF (A,C → D) est conséquence de (A → B) (car(A,C → B,C)) et de (B,C → D), donc elle est redondante.De même (A,C → E) est redondante car elle se déduit de (A → B), (B,C → D) et(D → E).Donc la couverture minimale est: A→ B | B,C → D | D → E

2ème Algorithme de calcul de couverture minimaleSoit F un ensemble de DF associé à R. G est la couverture minimale

1. Décomposer chaque DF de F pour avoir un seul attribut à droite (règle de décomposition)2. Supprimer les DF redondantes : Une DF peut être supprimée de F s’il en résulte une

transformation de F en G telle que G+ = F+, avec G = F \ {DF}3. Supprimer les attributs en surnombre à gauche appartenant à F : la partie gauche doit être

élémentaire. Aucun attribut ne peut être éliminé de la source de la DF s’il en résulte unetransformation de F en G telle que G+ 6= F+. Inversement, si l’élimination d’un attributde la source de la DF (voire plusieurs) donne lieu à une transformation de F en G telle queG+ = F+ alors la DF peut être supprimée

Exemple. Considérons les DF suivantes : A→ B | B,C → D | A,C → B,D,E | D → E

1. Etape 1: décompositionF = {A→ B; (B,C)→ D; (A,C)→ B; (A,C)→ D; (A,C)→ E;D → E}

2. Etape 2: Suppression des DF redondantes– cas de A→ B :F = {A→ B;B,C → D;A,C → B;A,C → D;A,C → E;D → E}G = {B,C → D;A,C → B;A,C → D;A,C → E;D → E}{A}+ par rapport à F : {A}+ = {A,B}{A}+ par rapport à G : {A}+ = {A} (sachant que G ne comporte pas A→ B)Les fermetures sont différentes donc A→ B fait partie de la couverture.

60 CHAPITRE 6. NORMALISATION D’UNE RELATION

– cas de B,C → D :F = {A→ B;A,C → B;B,C → D;A,C → D;A,C → E;D → E}G = {A→ B;A,C → B;A,C → D;A,C → E;D → E}{B,C}+ par rapport à F : {B,C}+ = {B,C,D,E} {B,C}+ par rapport àG : {B,C}+ ={B,C} (sachant que G ne comporte pas B,C → D)Les fermetures sont différentes donc B,C → D fait partie de la couverture.

– cas de (A,C)→ B :{AC}+ par rapport à F : {AC}+ = {A,C,B,D,E}{AC}+ par rapport à G : {AC}+ = {A,C,E,B,D} (sachant que G ne comporte pasA,C → B){AC}+ par rapport à F est égale à {AC}+ par rapport à G donc A,C → B doitdisparaître.

– cas de (A,C)→ D :{AC}+ par rapport à F : {AC}+ = {A,C,B,D,E}{AC}+ par rapport à G : {AC}+ = {A,C,E,B,D} (sachant que G ne comporte pasA,C → D){AC}+ par rapport à F est égale à {AC}+ par rapport à G donc A,C → D doitdisparaître.

– cas de (A,C)→ E :sera également supprimé

– cas de D → E :est une dépendance élémentaire

A l’issue de l’étape 2, on obtient le nouvel ensemble F = {A→ B;B,C → D;D → E}3. Etape 3:Réduction de la source de chaque DF

– cas de B,C → D : pezut-on réduire à B → D?F = {A→ B;B,C → D;D → E}G = {A→ B;B → D;D → E}

Calculons {B}+ par rapport à F : {B}+ = {B}Calculons {B}+ par rapport à G : {B}+ = {B,D,E}

Les fermetures sont différentes donc on ne peut pas remplacer F par G.La couverture minimale est : {A→ B;B,C → D;D → E}

Exercice : Soit la relation R(A, B, C, D, E) avec les DF F = {A → C,D;C → B,D,E;D →C,E}. Donner une couverture minimale de F .

6.4 Décomposition d’une relation

La décomposition d’une relation a pour but d’aider à la modification d’une relation pourlaquelle il y avait soit des redondances soit des problèmes lors des insertions / modifications /insertions de tuples. Il s’agit de transformer la relation en un ensemble de relations satisfaisantesqui contiennent les mêmes informations.

On peut décomposer une relation en un ensemble de relations projetées, si à partir desrelations projetées, on peut par jointure retrouver la relation initiale.

Définition 4 Une décomposition d’une relation R(X,Y,Z) en deux relations R1 = π[X,Y ]R et

6.5. 1ÈRE ET 2ÈME FORMES NORMALES 61

R2 = π[X,Z]R est dite sans perte d’information si R = R1 on R2

Exemple. Soit la relation personne(numPers,nom,adresse).– La décomposition de la relation personne en deux relations Π[numPers,nom]personne et

Π[numPers,adresse]personne, est sans perte d’information car la jointure naturelle de cesdeux relations redonne la relation initiale.

– Par contre la décomposition de la relation personne en deux relations Π[numPers,nom]personneet Π[nom,adresse]personne, est avec perte d’information. Il est facile de voir que lorsqu’ily a deux noms identiques, la jointure va introduire de nouveau tuples n’apparaissant pasdans la relation initiale.

Remarque. Lorsque la décomposition est avec perte d’information, la relation obtenue parjointure naturelle est composée de plus de tuples : il n’est pas possible d’extraire de la jointureles tuples qui sont dans la table initiale.

Théorème 1 de Heath. Toute relation R(X,Y,Z) est décomposable sans perte d’information enR1 = π[X,Y ]R et R2 = π[X,Z]R, s’il y a dans R une dépendance fonctionnelle de X vers Y

Idée de preuve.– R1 on R2 contient au moins tous les tuples de R, puisque tout tuple xyz de R crée un

tuple xy dans R1 et un tuple xz dans R2. Ces deux tuples sont ensuite concaténées dansla jointure naturelle en xyz.

– R1 on R2 ne peut pas contenir de tuples en plus de ceux de R. Démonstration par l’absurde :soit xyz un tuple de R1 on R2 qui n’appartient pas à R. xyz provient de deux tuples xyz’et xy’z. Etant donné que xyz n’appartient pas à R, on a z′ 6= z et y′ 6= y ce qui contreditla dépendance fonctionnelle X → Y

6.5 1ère et 2ème formes normales

Définition 5 Une relation est en première forme normale si chaque valeur de chaque attributde chaque tuple est une valeur simple (tous les attributs sont simples et monovalués).

Définition 6 Une relation est en deuxième forme normale si elle est en première formenormale et si chaque attribut qui ne fait partie d’aucun identifiant, dépend de tout identifiantentier (autrement dit, si toutes les dépendances fonctionnelles entre la clé et les autres attributssont élémentaires). Tout l’identifiant est utile.

La méthode à suivre pour normaliser une relation est la suivante :– vérifier que la relation est en première forme normale,– établir un graphe minimum de dépendances fonctionnelles,– déterminer tous ses identifiants,– déterminer à l’aide du graphe sa forme normale,– si la relation n’est pas normalisée, décomposer à l’aide du graphe la relation en relations

mieux normalisées.

62 CHAPITRE 6. NORMALISATION D’UNE RELATION

Exemple. Soit la relation suivante qui est en première forme normale mais pas en deuxièmeforme normale. Fournisseur1(NF,NomProduit,Adr,Tel,Prix)Construire le graphe des dépendances fonctionnelles. Les dépendances sont les suivantes :(nomProd,NF) −→ prix,NF −→Adr etNF −→Tel.

NF

Adr Tel Prix

NomProduit

– S’il existe 100 produits pour un fournisseur, on répétera 100 fois le nom, l’adresse et letéléphone du fournisseur.

– Quand on rajoute un produit, il faut rentrer de nouveau les coordonnées du fournisseur.Si on supprime momentanément tous les produits d’un fournisseur, on supprime aussi lescoordonnées du fournisseur.

– Si un fournisseur change d’adresse, il faut changer l’adresse pour tous ses produits.

Ces problèmes sont dus au fait que la relation n’est pas en deuxième forme normale. On décom-pose alors Fournisseur1 en deux relations de la manière suivante :

– il existe 2 dépendances dont l’une a pour source un sous-ensemble de la source de l’autre.En effet, on a : (nomProd,NF) −→prix et NF −→Adr.

– Pour chacune de ces deux sources de DF, on crée une relation ayant pour attributs lasource et tous les attributs en dépendance fonctionnelle directe de cette source, en s’assurantqu’une (au moins) de ces deux sources est entièrement contenue dans les attributs communsaux deux relations ainsi créées (cf théorème de Heath)

On obtient ainsi : Fournisseur(NF,Adr,Tel) et Catalogue(NF,NomProduit,Prix). On vérifieque cette décomposition est sans perte d’information, et sans perte de dépendances fonctionnelles(toutes les DF de la relation initiale se retrouvent, éventuellemnt pas transitivité, à partir desDF des 2 relations créées).

Autre exemple. Soit la relation joueur(personne, sport, taille) avec comme identifiant(personne, sport). La dépendance personne−→taille fait que la relation n’est pas en secondeforme normale. Il y a en effet redondance, car si la personne fait plusieurs sport, on recopiesa taille. On décompose la relation en pratique(personne, sport) et en hauteur(personne,taille). La relation joueur est alors retrouvée par une jointure naturelle.

6.6 3ème forme normale

Le passage à la FN3 permet d’éliminer les dépendances fonctionnelles transitives en plaçantcertains attributs dans une autre relation.

Définition 7 Une relation est en troisième forme normale si elle est en deuxième formenormale et si chaque attribut qui ne fait partie d’aucun identifiant, dépend uniquement et direc-tement de sur-clés entières. (chaque attribut ne dépend pas que d’attributs n’appartenant pas àune clé, la dépendance est directe: elle n’est pas dû à la transitivité des DF).

Exemple. Soit la relation Fournisseur2(NF,Pays, Ville). Elle est en deuxième forme nor-male mais pas en troisième forme normale. Si l’on suppose qu’il n’y a pas deux villes homonymes,les DF sont les suivantes : NF → Ville et Ville → Pays.La DF NF → Pays est déduite car une ville ne peut pas être dans deux pays différents.Le graphe minimum des DF de Fournisseur2 est donc : NF → Ville → Pays.

6.6. 3ÈME FORME NORMALE 63

Dans Fournisseur2, il y a redondance, le pays d’une ville est répété, ce qui pose des problèmede mise à jours. On décompose donc en : Fourn(NF,Ville) et Geo(Ville,Pays).Cette décomposition est sans perte d’information (Ville est identifiant pour Géo), et sans pertede dépendances fonctionnelles (toutes les DF de la relation initiale se retrouvent à partir des DFdes deux relations créées).

Exemple. La relation Voiture(Imm, Marque, Type, Puissance, Couleur) n’est pas en troi-sième forme normale. En effet, l’attribut Type (non clé) détermine les attributs Marque etPuissance. Il faut décomposer la relation de la manière suivante :

Voiture (Imm, Type, Couleur) et Modèle (Type, Marque, Puissance)

Remarque. On peut toujours décomposer une relation en un ensemble de relations qui sontchacune en troisième forme normale. Ce n’est pas le cas pour les formes normales suivantes. D’oùl’intérêt de cette troisième forme normale.

Algorithme de décomposition 3NF (SPI et préservant les DF) Soit un schéma derelation R, et une couverture minimale F ′ de dépendances fonctionnelles s’appliquant sur R.Une décomposition SPI et SPD de R, qu’on appellera D, est construite de la façon suivante :

1. pour chaque dépendance fonctionnelle X → A, on crée une relation Ri (X, A),2. si on a plusieurs dépendances fonctionnelles telles que X → A1, X → A2, ..., X → An,

alors on regroupe tous ces attributs dans une même relation Rj (X, A1, A2, ..., An),3. pour avoir une décomposition SPI, il faut s’assurer qu’il y ait au-moins une clé de R dans

au moins une des relations de décomposition. Si ce n’est pas le cas, il faut soit ajouterune relation contenant une clé de R, soit ajouter des attributs dans une des relations dedécomposition afin de satisfaire cette contrainte.

Exemple. Soit la relation Location(numFilm, numClient, date, titre, année, nom) dontles dépendances fonctionnelles sont : numFilm−→titre, numFilm−→année, et numClient−→nom.L’étape 2 donne 2 tables : R1(numFilm, titre, année) et R2(numClient, nom). L’étape 3donne une table supplémentaire : R2(numClient, numFilm, date).

Le graphe de dépendances fonctionnelles : Nom année Titre

numClient numFilm

date

Remarques.1. S’il y a dans R des attributs n’intervenant dans aucune dépendance fonctionnelle, alors

ces attributs font partie de l’identifiant, c’est le cas de date dans l’exemple précédent. Ilsseront donc intégrés dans la table créée à l’étape 3.

2. Le dernier point est important pour pouvoir éliminer les tuples excédentaires lors de lajointure pour reconstituer la relation initiale. Par exemple considérons les DF suivantesa −→ b et (b,c) −→ d. L’identifiant est (a,b,c). La décomposition mêne à deux relations(a,b) et (b,c,d) Si on n’a pas de relation contenant simultanément (a,b,c), alors la jointurenaturelle fera apparaître des tuples n’existant pas dans la relation initiale.

3. Cette méthode de décomposition a l’inconvénient de générer parfois des décompositionsredondantes. Exemple soit la relation enseignement(numEtud,matière,prof) où chaqueprofesseur n’enseigne qu’une seule matière. Les dépendances sont (numEtud,matiere)−→

64 CHAPITRE 6. NORMALISATION D’UNE RELATION

prof et prof −→ matiere. Cette relation est déjà en 3ème forme normale (les identifiantssont (numEtud,matiere) et (numEtud,prof)), mais si on applique l’algorithme proposé, ladécomposition mène à (numEtud,matière,prof) et (prof,matière). La deuxième relationest redondante car elle est incluse dans (cad égale à une projection d’) une autre relation.Il faut donc ensuite supprimer du résultat les relations qui sont incluses dans d’autres.

Dans certains cas, la recherche d’un graphe de DF minimum n’est pas une tâche facile, etl’algorithme précédent n’est pas applicable tant qu’on n’a pas de graphe de DF minimum. Il y aun autre algorithme qui permet d’obtenir une décomposition 3NF:

1. Repérer dans la relation R une DF L−→A qui ne satisfait pas aux contraintes de la 3èmeforme normale: A/∈L, et ni A ni L ne sont des identifiants.

2. On projette alors la relation R en 2 tables :– une sur les attribut de R privé de A– l’autre sur les attribut {L,A}. Pour cette table, L est identifiant.

3. On réitère ce processus (en sachant que toute table binaire est en 3NF).

6.7 Forme normale de Boyce-Codd

Définition 8 Une relation est en forme normale de Boyce-Codd si elle est en troisièmeforme normale et si toute source de DF élémentaire est une sur-clé,autrement dit,une relation est en BCNF si et seulement si les seules dépendances fonctionnelles élémentairessont celles dans lesquelles une clé (ou sur-clé) détermine un attribut.

Exemple. Soit la relation suivante qui est en troisième forme normale mais pas en forme nor-male de Boyce-Codd (on suppose qu’il n’y a pas d’homonyme chez les fournisseurs).Catalogue3(NF,NomF,NomProduit,Prix)Les identifiants sont :(NF,NomProduit) et (NomF,NomProduit)

Le graphe de dépendances fonctionnelles :

NomF

NF

NomProduit Prix

Il y a donc deux graphes de dépendances fonctionnelles minimum :

NF ↔ NomF,(NomProduit,NF )→ Prix

ou alorsNF ↔ NomF,(NomProduit,NomF )→ Prix

La relation Catalogue3 n’est pas sous forme normale de Boyce-Codd car l’attribut NF estsource complète de DF. Par contre, cette relation est en 3NF.

Dans la relation Catalogue3, il y a redondance entre NF et NomF ce qui génère des pro-blèmes lors de la mise à jours : si un fournisseur change de nom, il faut le mettre à jourspour tous les produits qu’il a. On décompose donc en : Catalogue((NF,NomProduit,Prix) etFournisseur(NF,NomF)

6.7. FORME NORMALE DE BOYCE-CODD 65

Autres exemples.1. Considérons la relation Collège(élève, matière, enseignant, note) avec les dépen-

dances fonctionnelles suivantes :– (élève, matière) → enseignant, note et– enseignant → matière.

Les identifiants sont (élève, matière) et (élève, enseignant). Cette relation est bienen troisième forme normale car aucun attribut n’appartenant à aucun identifiant, ne dépendd’une partie de la clé (2NF) ou d’un attribut non clé (3NF). En effet, le seul attributn’appartenant pas à un identifiant estnote: cet attribut dépend directement de la clé entière.Cependant, on y trouve de nombreuses redondances.

Le graphe de dépendances fonctionnelles est le suivant :matière

élèveenseignantnote

La relation collège pourra être d’abord décomposée en deux relations :notes(élève, matière, note) et Enseignement (élève, enseignant, Matière).Cette dernière relation n’est pas FNBC car on a la DF enseignant → matière. On peutla décomposer, on obteint alors: notes(élève, matière, note),Enseignant (enseignant, Matière) et Enseignement (élève, enseignant).La dépendance fonctionnelle (élève, matière) → enseignant est perdue.

2. [OPTIONNEL] Considérons la relation Vins(Cru, Pays, Région) avec les dépendancesfonctionnelles supposées : Region→ Pays et (Cru,Pays)→ Region

Cette relation est bien en troisième forme normale car aucun attribut n’appartenant à aucunidentifiant, ne dépend d’une partie de la clé (2NF) ou d’un attribut non clé (3NF). En effet,tous les attributs appartiennent à un identifiant. Cependant, on y trouve de nombreusesredondances. La relation Vins pourra être décomposée en deux relations : Crus (Cru,Région) et Régions (Région, Pays).

Le graphe de dépendances fonctionnelles est le suivant :pays

cru

région

La dépendance fonctionnelle (Cru,Pays)→ Region est perdue.3. Considérons la relation R1(A, B, C) avec les dépendances fonctionnelles supposées : A→B,C et (A,B)→ C.La DF A→ C est déduite de A→ B et de (A,B)→ C.L’identifiant est A. Les DF élémentaires ont dont toutes pour source une sur-clé (une clépour A→ B, une sur-clé strict pour (A,B)→ C). R1 est donc en FNBC.

Théorème 2 Théorème de décomposition en BCNF : Toute relation admet au moins une dé-composition en BCNF qui est sans perte d’informations; cependant, une telle décomposition nepréserve généralement pas les dépendances fonctionnelles.

Exemple ne préservant pas les DF.Soit la relation Enseignement(numEtudiant, matière, professeur)dont le graphe de dépendances fonctionnelles est donné à droite.

numEtudiant

matière

professeur

Si on décompose en Enseigne(professeur, matière) et suit(numEtudiant, professeur), onne préserve pas la DF (numEtudiant, matière) → professeur. En effet, on peut dire qu’unétudiant suit 2 cours sur la même matière avec 2 professeurs différents. Cela n’était pas possibledans le schéma initial.

66 CHAPITRE 6. NORMALISATION D’UNE RELATION

Algorithme de décomposition FNBC (SPI) Soit un schéma de relation R, et un ensembleF de dépendances fonctionnelles s’appliquant sur R. Une décomposition SPI de R, qu’on appel-lera D, est construite de manière itérative :

1. D est initialisée à R,2. Soit T une relation de D qui ne soit pas FNBC. Cela signifie qu’il y a une dépendance

fonctionnelle X → A s’appliquant sur T qui n’est pas de la forme clef−→attribut. Ondécompose alors T en T1 contenant A et les attributs de X, et T2 contenant tous lesattributs de T sauf A,

3. D est réinitialisée avec T1 et T2, et on boucle sur 2 jusqu’à ce que toutes les relationssoient FNBC.

Conclusion1. Cet algorithme permet de trouver une décomposition sans perte d’information qui soit

BCNF.2. Il en existe généralement plusieurs et le résultat de l’algorithme dépend de l’ordre que

l’on choisit pour traiter les dépendances fonctionnelles ne satisfaisant pas la propriété deBoyce-Codd.

3. La décomposition ne préserve pas nécessairement les dépendances fonctionnelles.

Exemple. On considère la relation et les dépendances fonctionnelles suivantes :T(numClient, nomClient, numAppart, adrAppart, dateDeb, dateFin, loyer, numProp, nomProp)

1. numClient→nomClient ;2. (numClient, numAppart)→ dateDeb, dateFin ;3. numAppart→adrAppart, loyer, numProp, nomProp ;4. numProp→nomProp

Le graphe de DF :numClient nomClient

numAppart dateDebut

dateFin

adressAppart

loyer

numProp nomProp

Il n’y a qu’un seul identifiant : (numClient, numAppart) qui peut être déduit du graphe des DF.Les DFs 1, 3 et 4 ne satisfont pas la propriété voulue.

– 1ère étape : selon la DF 1. On obtientR1(numClient, nomClient) etT′(numClient, numAppart, adrAppart, dateDeb, dateFin, loyer, numProp, nomProp)

– 2ème étape : selon la DF 4. On obtientR1(numClient, nomClient),R2(numProp, nomProp) etT′′(numClient, numAppart, adrAppart, dateDeb, dateFin, loyer, numProp)

– 3ème étape : selon la DF 3. On obtientR1(numClient, nomClient),R2(numProp, nomProp),R3(numAppart, adrAppart, loyer, numProp) etT′′′(numClient, numAppart, dateDeb, dateFin)

ANNEXES

69

Annexe A

Installation des packages du typeXAMPP

LAMP est un acronyme désignant un ensemble de logiciels libres permettant de construiredes serveurs de sites Web. L’acronyme original se réfère aux logiciels suivants :

– « Linux », le système d’exploitation ;– « Apache », le serveur Web ;– « MySQL », le serveur de base de données ;– « PHP » à l’origine, puis « Perl » ou « Python », les langages de script.

Même si les auteurs de chacun de ces programmes ne se sont pas coordonnés pour construiredes plateformes LAMP, cette combinaison de logiciels s’est popularisée du fait du faible coût del’ensemble et de la présence de tous ces composants dans la plupart des distributions Linux.

Cet acronyme a été inventé par Michael Kunze qui l’a utilisé pour la première fois en 1998dans un magazine allemand. L’article en question voulait démontrer qu’un ensemble de logicielslibres pouvait concurrencer les offres commerciales disponibles.

Variantes. De même que Python ou Perl peuvent remplacer PHP puisqu’ils commencent parla même lettre, certaines combinaisons utilisent le P pour PostgreSQL (qui remplace MySQL)et font désigner les composants mod_perl ou mod_python par le M. D’autres acronymes sontapparus pour nommer des plateformes de serveurs internet :

– LAMA : Linux Apache MySQL ASP,– WAMP : Windows Apache MySQL PHP,– MAMP : Macintosh Apache MySQL PHP,– SAMP : Solaris Apache MySQL PHP,– LAPP : Linux Apache PostgresSQL PHP.– WASP : Windows Apache SQLServer PHP.– XAMPP : X Apache MySQL PHP Perl

1. Apache : serveur web. Apache HTTP Server, souvent appelé Apache, est un logiciel deserveur HTTP (Hyper Text Transfert Protocol) produit par l’Apache Software Foundation.C’est le serveur HTTP le plus populaire du Web. C’est un logiciel libre avec un typespécifique de licence, nommée licence Apache.

70 ANNEXE A. INSTALLATION DES PACKAGES DU TYPE XAMPP

Client-serveur. L’architecture client/serveur désigne un mode de communication entreplusieurs ordinateurs d’un réseau qui distingue un ou plusieurs postes clients du serveur :chaque logiciel client peut envoyer des requêtes à un serveur. Un serveur peut être spécialiséen serveur d’applications, de fichiers, de terminaux, ou encore de messagerie électronique.Caractéristiques d’un serveur :

– il est initialement passif (ou esclave, en attente d’une requête) ;– il est à l’écoute, prêt à répondre aux requêtes envoyées par des clients ;– dès qu’une requête lui parvient, il la traite et envoie une réponse.

Caractéristiques d’un client :– il est actif le premier (ou maître) ;– il envoie des requêtes au serveur ;– il attend et reçoit les réponses du serveur.

Le client et le serveur doivent bien sûr utiliser le même protocole de communication. Unserveur est généralement capable de servir plusieurs clients simultanément.Un autre type d’architecture réseau est le poste à poste (ou peer-to-peer en anglais), danslequel chaque ordinateur ou logiciel est à la fois client et serveur.

Exemples :(a) La consultation de pages sur un site web fonctionne sur une architecture client/serveur.

Un internaute connecté au réseau via son ordinateur et un navigateur web est leclient, le serveur est constitué par le ou les ordinateur(s) contenant les applicationsqui délivrent les pages demandées. Dans ce cas, c’est le protocole de communicationHTTP qui est utilisé.

(b) Les courriels sont envoyés et reçus par des clients et gérés par un serveur de messagerie.Les protocoles utilisés sont le SMTP (Simple Mail Transfer Protocol, envoi), et le POP(POP3, ou Post Office Protocol Version 3, réception) ou l’IMAP (Internet MessageAccess Protocol, réception).

(c) La gestion d’une base de données centralisée sur un serveur peut se faire à partir deplusieurs postes clients qui permettent de visualiser et saisir des données.

2. MySQL. Il s’agit d’un système de gestion de base de données (SGBD).3. PHP : PHP est essentiellement un pré-processeur d’Hypertext.

PHP est principalement utilisé pour produire des pages web dynamiques via un serveurHTTP, mais peut également fonctionner comme n’importe quel langage interprété de façonlocale, en exécutant les programmes en ligne de commande. PHP est un langage impératifdisposant depuis la version 5 de fonctionnalités de modèle objet complètes. En raison dela richesse de sa bibliothèque, on désigne parfois PHP comme une plate-forme plus qu’unsimple langage.Le langage PHP est utilisé principalement en tant que langage de script côté serveur, cequi veut dire que c’est le serveur (la machine qui héberge la page web en question) qui vainterpréter le code PHP et générer du code qui pourra être interprété par un navig Il y aune sage femme qui vient à la maison deux fois par semaine, donc au moins je suis biensuivie et si la situation empire on devrait le voir sans tarder.Sinon, vendredi je vais voir David, il m’a dit qu’il a des questions à me poser.A bientôt et passe le bonjour à Caroline, Elisabettaateur.le PHP peut être intégré dans du code HTML.

A.. INSTALLATION DE MAMP/WAMPP/LAMPP 71

Dans une utilisation Web, l’exécution du code PHP se déroule ainsi : lorsqu’un visiteurdemande à consulter une page web, son navigateur envoie une requête au serveur HTTPcorrespondant. Si la page est identifiée comme un script PHP (généralement grâce à l’ex-tension .php), le serveur appelle l’interprète PHP qui va traiter et générer le code final dela page (constitué généralement d’HTML ou de XHTML, mais aussi souvent de CSS et deJS). Ce contenu est renvoyé au serveur HTTP, qui l’envoie finalement au client.Une étape supplémentaire est souvent ajoutée : celle du dialogue entre PHP et la base dedonnées. Classiquement, PHP ouvre une connexion au serveur de SGBD voulu, lui transmetdes requêtes et en récupère le résultat, avant de fermer la connexion.

4. Perl.Perl est né du besoin de disposer d’un langage optimisé pour l’extraction d’informations defichiers textes et la génération de rapports. "Practical Extraction and Report Language"

A. Installation de MAMP/WAMPP/LAMPP

Installation de XAMPP sous Windows1. Rechercher sur votre moteur de recherche préféré les termes "xampp Windows".2. Télécharger le fichier xampp-win32-5.6.3-0-VC11-installer.exe (151 Mo) à partir de www.apachefriends.org.3. Installer en répondant attentivement aux différentes questions.Installation de XAMPP sous MacOS1. Rechercher sur votre moteur de recherche préféré les termes "xampp Mac".2. Télécharger le fichier xampp-osx-5.6.3-0-installer.dmg (126 Mo) à partir de www.apachefriends.org.3. Installer en répondant attentivement aux différentes questions. XAMPP est maintenant

installé dans le répertoire /Applications/XAMPP.Installation de XAMPP sous Linux1. Rechercher sur votre moteur de recherche préféré les termes "xampp Linux".2. Télécharger le fichier XAMPP Linux 5.6.3 (129 Mo) à partir de www.apachefriends.org.3. Pour installer XAMPP, il faut se mettre en mode commande (shell) et se connecter en tant

qu’administrateur système (root) : su. Tapez ensuite les 2 commandes suivantes :chmod 755 xampp-linux-x64-5.6.3-0-installer.run./xampp-linux-5.6.3-0-installer.run

Cette commande va écraser la version de XAMPP existante. XAMPP est maintenant ins-tallé sous le répertoire /opt/lampp.

4. remarque : un autre moyen pour lancer XAMPP est d’utiliser l’interface graphique /opt/lampp/manager-linux.run.

B. Lancement

Lancement de XAMPP sous Windows1. Lancer le «XAMPP control panel» présent dans le répertoire d’installation de XAMPP.2. Lancer les serveurs Apache et MySql et le service Filezilla.Lancement de XAMPP sous MacOS1. Lancer le «manager-osx» présent dans le répertoire d’installation de XAMPP.2. Lancer les serveurs Apache et MySql et le service ProFTPD.Lancement de XAMPP sous Linux1. Lancer /opt/lampp/lampp start (pour lancer cet commande, il faut être su)

72 ANNEXE A. INSTALLATION DES PACKAGES DU TYPE XAMPP

2. On peut aussi lancer /opt/lampp/manager-linux.run, puis activer les serveurs Apache,MySql et ProFTPD.

Dans un navigateur web, aller sur localhost ou taper l’adresse IP 127.0.0.1.On est alors en tant que root sur le serveur local (login: root, sans mot de passe).

C. Sécurisation

Sous Windows :1. Sur localhost, aller sur sécurité2. Cliquer sur http://localhost/security/xamppsecurity.php

– choisir un mot de passe pour mysql root : rootmysql– choisir de sauvegarder le mot de passe dans un fichier ...xampp/security/mysqlrootpasswd.txt– sélectionner pour PhpMyAdmin authentification : cookie puis exécuter

3. Arreter puis redémarrer MySQL4. Cliquer sur http://localhost/security/xamppsecurity.php

– dans la section «Xampp directory protection» choisir un login (wampp par exemple)et un mot de passe (xampp par exemple)

– choisir de sauvegarder le mot de passe dans un fichierSous MacOS : Utiliser sudo /Applications/XAMPP/xamppfiles/xampp securitySous Linux : Utiliser /opt/lampp/lampp security

D. Mise en place d’un environnement de travail

Création d’une base de données1. Cliquer sur PhpMyAdmin (en bas de la colonne de gauche)2. Se connecter à la BD en tant que root

(a) créer une base de données en lui donnant un nom.(b) revenir à la page d’accueil de l’utilisateur root.

3. Si phpMyAdmin dit que l’installation n’est pas complète, suivre les instructions de créationde tables (importer le fichier create_tables.sql) puis changer le fichier config.inc.php.

Création d’un nouvel utilisateur1. Se connecter à la BD en tant que root.

(a) aller sur la page utilisateurs, cliquer sur Ajouter un utilisateur(b) sélectionner client local puis exécuter

2. Changer les droits de l’utilisateur sur la BD créée(a) revenir à la page utilisateurs, éditer l’utilisateur créé(b) sélectionner la base de données créée(c) sélectionner tous les privilèges sauf grant.(d) exécuter

3. Se déconnecter4. Se connecter sur la BD avec le nom du nouvel utilisateur. On ne voit alors que la BD créée.5. En se reconnectant en tant que root, on peut rajouter un autre utilisateur, changer son

mot de passe, ...

E.. INSTALLATION DE EASYPHP SOUS WINDOWS. 73

Quelques problèmes connus.1. Sous windows, le port 80 peut être occupé.

– Générallement il est occupé par IIS (Microsoft Information Serveur), dont le nom estinetinfo.exe. Exécuter sous "services.msc" ou directement "iisreset /stop"

– pour chercher le logiciel qui occupe le port 80 : CMD : "netstat -ano | find "80" "– trouver son nom : CMD : "tasklist | find "numero"– Pour arreter IIS: Démarer/Panneau de Config/Programmes/Programmes & Fonc-

tionnalité puis cliquer sur "activer ou désactiver des fonctionnalités windows", puisdécocher "Services Internet (IIS)"

2. éventuellement, il faut aller modifier le fichier:– .../xamp/phpMyAdmin/config.inc.php

(sous un Mac: /Application/Mamp/bin/phpMyAdmin/config.inc.php):$cfg[’blowfish_secret’] = ’...’ (mettre quelque chose)$cfg[’servers][$i][’aut_type’]=’cookie’ (dupliquer la ligne existante, en modi-fiant la 2ème.

3. S’il y a un problème d’écriture, il faut changer le répertoire des fichiers temporaires :emacs /opt/lampp/etc/php.ini &et supprimer le ; sur la ligne session.save_path = "/tmp"Il faut alors relancer xampp.

4. Si installation incomplète (encadré rose au login de phpMyAdmin), suivre les instruc-tions de création de tables (importer le fichier create_tables.sql) puis changer le fichierconfig.inc.php.$cfg[’Servers’][$i][’favorite’] = ’pma__favorite’;$cfg[’Servers’][$i][’users’] = ’pma__users’;$cfg[’Servers’][$i][’usergroups’] = ’pma__usergroups’;$cfg[’Servers’][$i][’navigationhiding’] = ’pma__navigationhiding’;$cfg[’Servers’][$i][’savedsearches’] = ’pma__savedsearches’;

E. Installation de EasyPHP sous Windows.

EasyPHP est un package WAMP, une plateforme de développement Web, permettant defaire fonctionner localement (sans se connecter à un serveur externe) des scripts PHP. EasyPHPn’est pas en soi un logiciel, mais un environnement comprenant deux serveurs (un serveur webApache et un serveur de bases de données MySQL), un interpréteur de script (PHP), ainsi qu’uneadministration SQL PhpMyAdmin.

1. aller sur www.easyphp.org2. télécharger le fichier easyPHP-3.0-setup.exe3. executer