Beruflich Dokumente
Kultur Dokumente
Premire partie
Introduction
1 Approche par application
On informatise les entreprises, les organisations (lunivers rel) en tant guid par les programmes. Application 1 Application 2
Figure 1 Approche par application Ces approches ont conduit la crise du logiciel . Inconvnients Redondance de donnes : les donnes sont dupliques autant de fois quon en a besoin dans les direntes applications perte de place : dperdition de stockage danger dincohrence des donnes lors des mises jour Dpendance entre donnes et programmes do maintenance accrue Dpendance entre niveaux logique et physique : vision de lutilisateur des donnes et ce qui est eectivement stock sur son disque Dicult de dvelopper de nouvelles applications non prvues (informatique dcisionnelle) Avantage : dmarche relativement facile mettre en uvre et progressive
Figure 2 Approche base de donnes SGBD : Systme de Gestion de Bases de Donnes Avantages limination de la redondance de donnes Indpendance donnes/programmes Indpendance entre niveaux logique et physique Facilit de dvelopper de nouvelles applications non prvues Inconvnients dmarche longue, coteuse, dicile mettre en uvre
Modles de bases de donnes Modle hirarchique (1960) Modle Codasyl (1964) Modle relationnel (1970) Modle orient objet (1990)
Deuxime partie
Le modle relationnel
3
3.1
Introduction
3 composantes
Les concepts relationnels Domaine, relations, tuples, attributs, clef primaire, clef trangre, relation statique, relation dynamique, schma relationnel. Algbre relationnel Projection, slection, jointure, division, union, intersection, dirence. Contraintes dintgrit relationnelle Intgrit de domaine, inligibilit de relation, intgrit de rfrences.
3.2
Rappels mathmatiques
Produit cartsien Soient A et B deux ensembles tels que : A B = {(a, b)/a A, b B } Exemple : A = {1, 2, 3} B = {4, 5} A B = {(1, 4), (1, 5), (2, 4), (2, 5), (3, 4), (3, 5)} Relation binaire Soient A et B deux ensembles et R A B une relation entre les lments de A et de B . R contient les couples de A B . Exemple : R1 = {a1 , b1 } R2 = {(a1 , b1 ), (a2 , b2 )}
4
4.1
Concepts relationnels
Domaine smantique
Un domaine smantique est un ensemble de valeurs atomiques, ou simples. Chaque domaine est caractris par un type de base (numrique : entier, rel ; alphanumrique : string, date,...). Exemple D_NOMAV = Domaine de nom des avions D_NOMPIL = Domaine de nom des pilotes D_NOMAV = {A310,A330,A340,B727,B747} D_NOMPIL = {DUPONT,ROGER} Le domaine smantique a comme objectif de vrier la validit des comparaisons (vite de comparer D_NOMPIL avec D_NOMAV).
4.2
Relations/tuples
Soient D1 , D2 , ..., Dn , n domaines non ncessairement distincts. Une relation R est le sous-ensemble du produit cartsien de ces n domaines : R D1 D2 Dn La relation en base de donnes est une relation n-aire avec des n-uplets comme lments. Exemple AVION D_NUMAV D_NOMAV D_CAP D_VILLE AVIOND_NUMAVD_NOMAVD_CAPD_VILLE Tuple reprsente un avion : (100,A310,250,MARSEILLE) 4.2.1 Reprsentation tabulaire dune relation
AVION={(100,A310,250,MARSEILLE),(200,B747,450,PARIS)} AVION NUMAV 100 200 NOMAV A310 B747 CAP 250 450 VILLE MARSEILLE PARIS
Table 1 Reprsentation tabulaire de la relation AVION Ici, AVION est len-tte NUMAV, NOMAV, CAP, VILLE sont les attributs Le corps est constitu des dirents tuples Les tuples sont les direntes lignes du tableau Le corps est lextension du schma relationnel Len-tte est le schma de la relation/intention
4.3
Attributs
Lattribut est un rle jou par un domaine dans une relation pour liminer les ambiguts (D_VILLED_VILLE). VOLD_NUMVOLD_VILLED_VILLED_HEURED_HEURE Attribut NUMVOL, VILLE_DEP, VILLE_ARR, H_DEP, H_ARR Un attribut joue un rle dans un domaine, un domaine a un type dni. Ainsi, (IT100, PARIS, LONDRES, 18, 20) avec les attributs D_NUMVOL NUMVOL D_VILLE VILLE_DEP D_VILLE VILLE_ARR D_HEURE HEURE_DEP D_HEURE HEURE_ARR Chaque attribut est dni sur un domaine.
4.4
Clef primaire
Une clef primaire est un attribut, ou groupe dattributs, permettant didentier de manire unique les tuples de la relation. 4
Exemple NUMAV ne contient aucun doublon, et est ainsi le domaine de clef primaire de la relation AVION.
4.5
Domaine primaire
Cest le domaine dans lequel est dni un attribut, une clef primaire. Exemple D_NUMAV : domaine primaire NUMAV : clef primaire
4.6
Clef trangre
Cest un attribut, ou groupe dattribut, dni sur un ou plusieurs domaines primaires, qui est clef primaire dans une autre relation. Exemple AVION(NUMAV, NOMAV, CAP, LOC) VOL(NUMVOL, NUMAV#, NUMPIL#, VILLE_DEP, VILLE_ARR, HEURE_DEP, HEURE_ARR) PILOTE(NUMPIL, NOMPIL, ADR, SALAIRE)
4.7
Schma relationnel
Cest le schma de chaque relation, la liste des attributs. La clef trangre sert exprimer des liens smantiques entre les relations du schma relationnel. Cest lensemble du schma de relations lies travers des clefs primaires et trangres. Chaque schma de relation est dcrit par le nom de la relation et la liste de ses attributs : AVION(NUMAV, NOMAV, CAP, LOC).
4.8
Autres concepts
Degr et cardinalit dune relation Le degr dune relation est le nombre dattributs dune relation. La cardinalit dune relation est le nombre de ses tuples. Relations dynamiques et statiques Une relation dynamique est une relation qui contient une clef trangre. Une relation statique est une relation indpendante, qui ne contient pas de clef trangre. Attributs comparables ou compatibles Deux attributs sont comparables ou compatibles sils sont dnis sur le mme domaine.
5
5.1
Ce sont les rgles de cohrence de la base induite par les concepts relationnels. Elles sont invariantes et ne dpendant pas de lapplication. Contrainte de domaine Toute valeur aecte un attribut doit tre dans le domaine de lattribut.
Contrainte de relation Toute valeur aecte la clef primaire doit tre unique et obligatoire (doit exister). Contrainte de rfrence Toute valeur aecte la clef trangre doit exister dans la clef primaire associe.
5.2
Contraintes dynamiques/applicatives
Les rgles de cohrence de la base de donnes dpendent de lapplication. Exemple Pour un vol, on a VILLE_DEP<>VILLE_ARR et HEURE_DEP<>HEURE_ARR. La contrainte statique est vrie automatiquement par le SGBD. Les contraintes dynamiques sont spcies et programmes par ladministrateur de la base de donnes.
6
6.1
Algbre relationnel
Gnralits
Oprateurs relationnels Relation unaire Projection, slction. Relation binaire Jointure, division. Oprateurs ensemblistes Union, qui sapparente un OR Intersection, qui sapparente un AND Dirence, qui sapparente un NOT
6.2
6.2.1
Oprateurs relationnels
Projection
Dnition Soit R(U ) une relation dattributs U telle que U = {A1 , A2 , . . . , An } , X U RS = PROJECTION(R/X ) RS = {t(X )/r R}
PILOTE
Table 2 Reprsentation tabulaire de la relation PILOTE Exemple : quels sont les noms et adresses des pilotes ? RS = PROJECTION(P ILOT E/N OM P IL, ADR) RS NOMPIL Dupont Durand Martin ADR Marseille Marseille Nice
Table 3 Projection de PILOTE sur NOMPIL et ADR RS = PROJECTION(P ILOT E/ADR) RS ADR Marseille Nice
Table 4 Projection de PILOTE sur ADR La projection limine les doublons. Proprits Degr e(RS ) Degr e(R) Cardinalit e(RS ) Cardinalit e(R) 6.2.2 Slection
Soient R(U ) une relation dattributs U = {A1 , A2 , . . . , An } constante et Ai une valeur dans le domaine de A. RS = SELECTION(R/Aiconstante) est lun des oprateurs suivants : =, <, >, <> 1 , , . Exemple : chercher les pilotes habitant Marseille RS = SELECTION(P ILOT E/ADR = MARSEILLE ) RS NUMPIL 100 200 NOMPIL Dupond Durand ADR Marseille Marseille SALAIRE 5000 4000
Proprits Degr e(RS ) = Degr e(R) Cardinalit e(RS ) Cardinalit e(R) On a ainsi les oprateurs suivants : La projection : sert dcouper verticalement une relation La slection : sert dcouper horizontalement une relation Toujours commencer par la slection Exemple : quels sont les noms des pilotes habitant Marseille ? R1 = SELECTION(P ILOT E/ADR = M arseille ) RS = PROJECTION(R1/N OM P IL) RS NOMPIL Dupont Durand
La jointure est un oprateur binaire : elle ncessite deux relations. Soient R(U1 ), S (U2 ) deux relations dattributs U1 = {A1 , A2 , . . . , An } et U2 = {B1 , B2 , . . . , Bn } et Ai U1 , Bj U2 deux attributs compatibles. RS = JOINTURE(R, S/Ai Bj ) RS = {(t, s)/t R, s S, t(Ai )S (Bj )} avec un oprateur de comparaison. Le schma de RS contient tous les attributs de A et tous les attributs de S . R A a1 a2 a3 B b1 b1 b2 C c1 c1 c1 S A a1 a1 a2 a2 D d1 d2 d3 d4 RS A a1 a1 a2 a2 B b1 b1 b1 b1 C c1 c1 c1 c1 A a1 a1 a2 a2 D d1 d2 d3 d4
Table 7 Jointure entre R et S sur A Exemple : quels sont les noms des pilotes en service ? PILOTE NUMPIL 10 20 30 NUMPIL 10 10 30 NOMPIL Dupont Durand Dupont NUMAV 100 100 200 ADR Nice Marseille Marseille VILLE_DEP Marseille Paris Toulous SAL 5000 6000 4000 VILLE_ARR Paris Marseille Paris
VOL
R1 = JOINTURE(P ILOT E, V OL/N U M P IL = N U M P IL) RS = PROJECTION(R1/N OM P IL) R1 NUMPIL 10 10 30 NOMPIL Dupont Dupont Dupont ADR Nice Nice Marseille SAL 5000 5000 4000 RS NUMVOL IT100 IT200 IT300 NOMPIL Dupont Dupont NUMPIL 10 10 30 NUMAV 100 100 200 VILLE_DEP Marseille Paris Toulouse VILLE_ARR Paris Marseille Paris
Table 9 Jointure entre PILOTE et VOL sur NUMPIL Dirents types de jointures quijointure RS = JOINTURE(P ILOT E, V OL/N U M P IL = N U M P IL) Jointure naturelle Enlve la deuxime occurreence dun attribut identique (ici, enlve NUMPIL). RS NUMPIL 10 10 30 NOMPIL Dupont Dupont Dupont ADR Nice Nice Marseille SAL 5000 5000 4000 NUMVOL IT100 IT200 IT300 NUMAV 100 100 200 VILLE_DEP Marseille Paris Toulouse VILLE_ARR Paris Marseille Paris
Table 10 Jointure naturelle entre PILOTE et VOL sur NUMPIL Jointure par <> RS = JOINTURE(P ILOT E, V OL/N U M P IL <> N U M P IL)
RS
NUMPIL 10 20 20 20 30 30
NUMPIL 30 10 10 30 10 10
Table 11 Jointure entre PILOTE et VOL avec NUMPIL<>NUMPIL Autojointure RS = JOINTURE(P ILOT E, P ILOT E/N U M P IL = N U M P IL)
RS
NUMPIL 10 20 30
NUMPIL 10 20 30
Soient R(B, A) et S (A) deux relations respectivement binaire et unaire, avec Ar et As dnis sur le mme domaine. RS = DIVISION(R, S/Ar , As ) Ar et As nont pas forcment le mme nom. RS = {t(B )/t R, s S, (t(B ), S (A)) R} Contraintes R a deux attributs, S un seul. Les attributs de la division doivent tre compatibles. RS = DIVISION(R, S/A, A) R B b1 b1 b2 A a1 a2 a1
A a1 a2
RS
B b1
Table 13 Division de R par S b1 est associ dans R toutes les valeurs de A. B = {b1 , b2 } {(b1 , a1 ), (b1 , a2 )} Or b2 nest pas associ dans R a2 donc il nest pas conserv. Remarques La division exprime tous les , ou bien au moins tous les La jointure exprime un , il existe Exemple : numros des pilotes qui conduisent tous les avions de sa compagnie NUMAV est lattribut de la division. R1 = PROJECTION(AV ION/N U M AV ) R2 = PROJECTION(V OL/N U M AV, N U M P IL) RS = DIVISION(R1, R2/N U M AV, N U M AV ) Les pilotes apparaissant dans le rsultant sont associs tous les avions de la compagnie.
10
6.3
Oprateurs ensemblistes
Figure 3 Oprateurs ensemblistes ROUGE : intersection (R S ; RS = INTERSECTION(R, S ) = {t/t R t S }) VERT : union (R S ; RS = UNION(R, S ) = {t/t R t S }) BLEU : dirence (R S ; RS = DIFFERENCE(R, S ) = {t/t R t / S }) R et S sont uni-compatibles si : Degr e(R) = Degr e(S ) Les attributs de R et S sont dnis sur le mme domaine Exemple Soient R(A, B, C ) et S (D, E, F ) des relations. R et S sont uni-compatibles si A est sur le mme domaine que D B est sur le mme domaine que E C est sur le mme domaine que F Exemple : noms des pilotes habitant Nice et gagnant 5000e R1 = SELECTION(P ILOT E/ADR = N ice ) R2 = SELECTION(P ILOT E/SAL = 5000) R3 = INTERSECTION(R1, R2) RS = PROJECTION(R3/N OM P IL) R1 = SELECTION(P ILOT E/ADR = N ice ) R2 = SELECTION(R1/SALAIRE = 5000) RS = PROJECTION(R2/N OM P IL) Exemple : noms des pilotes qui nont jamais assur de vol R1 = PROJECTION(V OL/N U M P IL) R2 = PROJECTION(P ILOT E/N U M P IL) R3 = DIFFERENCE(R2, R1) R4 = JOINTURE(P ILOT E, R3/N U M P IL = N U M P IL) RS = PROJECTION(R4/N OM P IL)
11
Troisime partie
Dpendances fonctionnelles
7 Dnition
Soient r(R) une relation dattributs R et x, y R. y dpend fonctionnellement de x, ou x dtermine y , ou x implique y , X Y , si et seulement si t, t r. Si t(x) = t (x), alors t(y ) = t (y ), tous les tuples ayant mme valeur sur x ont mme valeur sur y , chaque valeur de x correspond au plus une valeur de y , = |r(x)[ . |r(x, y )|
Cardinalit de r (x,y ) Cardinalit de r (x)
8
8.1
Axiomes dArmstrong
Rexivit
Si y X alors x y (x x).
8.2
Augmentation
Si x y et w z alors x, z y, w (x, z y si w = ).
8.3
Transitivit
Si x y et y z alors x z .
8.4
Pseudo-transitivit
Si x y et y, z t alors x, y t.
8.5
Dcomposition
Si x y, z alors x y et x z .
8.6
Union
Si x y et x z alors x y, z .
Exemple D A est une DF minimale (car A) BD A nest pas une DF minimale (car D A, B nest pas ncessaire)
10
Clef candidate
12
11
X R est une clef candidate minimale si et seulement si X est une clef candidate minimale x X, X x R (tous les attributs de X sont ncessaires pour dterminer R)
12
Clef primaire
X R est une clef primaire si et seulement si X est une clef candidate minimale. Critres de choix dune clef primaire parmi les clefs candidates minimales 1. nombre dattributs (choisir le plus petit) 2. type (les types numriques sont prioritaires)
13
Attributs non-clef
A R est un attribut non-clef si et seulement si A nest pas une clef candidate minimale.
13
Quatrime partie
Thorie de modlisation
14 Objectif
Un bon schma relationnel est un schma relationnel qui prsente le moins de redondance de donnes et le moins danomalies de stockage dans un environnement de mise jour.
14.1
Table 14 Mauvais schma relationnel Ce schma relationnel est mauvais : Redondance de donnes : (Prof,5000) se rpte plusieurs fois Anomalie de stockage lors des oprations de mises jour Ajout dune nouvelle fonction et dun nouveau salaire (exemple : (-,MA,3000)) impossible car la valeur de la clef primaire nest pas dnie Baisser le salaire des professeurs ncessite plusieurs oprations Supprimer lenseignant DUPONT fait perdre de linformation (les assistants gagnent 2000e).
14.2
15
Formes normales
Il y a trois formes normales : 1NF, 2NF et 3NF. Plus le degr de normalit dune relation est important, moins on a de redondances de donnes et danomalie de stockage dans un contexte de mise jour.
15.1
Une relation r(R) est en 1NF si et seulement si tous les attributs de r(R) sont mono-valus (pour tout tuple de r, chaque attribut prend une seule valeur).
14
Table 16 Relation N1NF AUTEUR est un attribut multivalu, LIVRE nest donc pas en 1NF. 15.1.1 Normalisation en 1NF
A4
Table 17 Ajout dattributs Cas 2 : ajout dune relation toute clef AUTEURS LIVRE CODE C1 C2 C3 TITRE T1 T2 T4 CODE C1 C2 C2 C3 C3 C3 AUTEUR A1 A1 A2 A2 A3 A3
15.2
Une relation r(R) est en 2NF si et seulement si : elle est en 1NF il ny a pas de DF entre une partie dune clef candidate minimale et un attribut qui nappartient pas une clef candidate minimale DF problmatique X
une partie dune CCM
A
un attribut qui nappartient pas une CCM
Exemple COMMANDE(NO_PROD, NO_FOURN, NOM_FOURN, QTE_FOURN) avec NO_PROD, NO_FOURN NOM_FOURN, QTE_FOURN NO_PROD NOM_FOURN Fcommande =
une partie dune CCM / CCM
15
Une seule clef candidate minimale : (NO_PROD,NO_FOURN). COMMANDE nest pas en 2NF. 15.2.1 Normalisation en 2NF
Thorme de dcomposition de Casey-Delabel : Soit r(R) une relation, avec x, y R et x y . On a r = JointureNaturelle(r1 , r2 /x = x) avec r1 = Projection(r/x, y ) et r2 = Projection(r/y, x). Ce thorme nous garantit que la dcomposition de r(x, y, z ) en r1 (x, y ) et r2 (x, z ) est rversible (sans perte dinformation). Exemple de normalisation en 2NF COMMANDE(NO_PROD, NO_FOURN, NOM_FOURN, QTE_FOURN) devient : COMMANDE(NO_PROD,NO_FOURN,QTE_FOURN) r1 (NO_FOURN, NOM_FOURN)
FOURNISSEUR
Remarque lorsque les clefs candidates minimales ne comportent quun seul attribut, la relation est automatiquement en 2NF.
15.3
Une relation r(R) est en 3NF si et seulement si : r(R) est en 2NF il ny a pas de DF entre un attribut ou groupe dattributs qui nest pas une clef candidate minimale, et un attribut qui nappartient pas une clef candidate minimale DF problmatique X
nest pas une CCM
A
/ CCM
15.3.1
Normalisation en 3NF
PRODUIT(NO_PROD, LIBELLE, CODE_TVA, TAUX_TVA) avec FPRODUIT = NO_PROD LIBELLE, CODE_TVA, TAUX_TVA CODE_TVA TAUX_TVA
16
Cinquime partie
16
16.1
Concepts de base
Drivabilit des DF
x y)
Soit F un ensemble de DF sur r(R) et x, y R. On dit que x y est drivable partir de F(F si x y peut tre obtenue partir de F en appliquant les axiomes dArmstrong. Exemple F= AB BC
16.2
16.3
Soit F un ensemble de DF. M est une couverture minimale de F si et seulement si : Toutes les DF de M sont de la forme X A (un attribut cible) x A M, x X, MX x A (chaque DF de M est minimale) x A M, M {x A} X A (chaque DF de M est ncessaire) Si ces trois conditions sont vraies alors M est une couverture minimale de F.
16.4
Fermeture dArmstrong
Soit F un ensemble de DF sur r(R) et Z1 , Z2 , . . . , Zn une suite cumulative (Z1 Z2 Z3 . . . Zn ). La + fermeture dArmstrong dun ensemble dattributs selon un ensemble de DF est note (XF ). 16.4.1 Application +
17
17
17.1
Algorithmes de normalisation
Algorithme de calcul dune clef candidate minimale
Entre : F un ensemble de DF sur r(R) Sortie : X R une clef candidate minimale pour r(R) Algorithme X := R Pour tout A R si (X A)+ F = R alors X := X A Renvoyer X
17.2
tapes de calcul 1. Dcomposer les DF (un seul attribut cible par DF) 2. Suppression des attributs de la source de chaque DF 3. Suppression des DF redondantes
17.3
Entre : F un ensemble de DF sur r(R) et X R + Sortie : XF la fermeture de X selon F Algorithme Fermeture:= X Rpter DF:= X Pour tout X A F faire Si x Fermeture et A / Fermeture alors Fermeture:=FermetureA Jusqu DF=Fermeture Renvvoyer Fermeture
18
Sixime partie
18
Schma entit/relation
Dnition Le schma entit/relation est une reprsentation statique. Il a pour but de dcrire simplement les donnes ainsi que les liens pouvant exister.
18.1
Une entit est la reprsentation dun objet (matriel ou immatriel) identiable de lunivers rel. Par exemple, une voiture dont le numro de srie est X123. Comme en programmation oriente objet, o les objets similaires sont regroups en classe, les entits sont regroupes en types dentits. Un type dentit est la description dentits qui possdent les mmes caractristiques. Par abus de langage, il peut arriver dutiliser le mot entit la place de type dentit . Pour parler dentits, prfrer occurrence . Pour parler de type dentit, prfrer TE .
18.2
Les proprits
Une proprit (ou attribut) est une information lmentaire (cest dire non dductible dautres informations) qui prsent un intrt pour le domaine tudi. Lensemble de valeurs permises pour une proprit est son domaine. Il faut tre vigilant en choisissant le nom dune proprit car il ne doit pas tre ambigu.
18.3
Lidentiant dun TE est un ensemble de proprits dont la valeur permet didentier de manire unique une entit (occurrence).
18.4
Une association (ou relation) est un lien smantique entre plusieurs entits (occurrences). Un type dassociation est un ensemble dassociations qui partagent les mmes caractristiques.
20
21
Les cardinalits permettent de caractriser la multiplicit du lien qui existe entre les occurrences et lassociation laquelle elle est relie. La cardinalit dun type dassociation (TA) est le nombre de fois minimal et maximal quune entit peut intervenir dans une association de ce type. Une TA dont lune des cardinalits est (n,1) est dite hirarchique.
22
Figure 14 TA binaire
23
Une association na pas dexistence en dehors des entits lies. On utilise donc pour lidentier la combinaison des clefs des TE lis. La valeur de lidentiant doit tre unique.
19
Drivation relationnelle
La drivation relationnelle est la transformation dun schma Entits/Associations en un schma relationnel normalis (3NF). Pour ce faire, on applique trois rgles simples : 1. Drivation des TE : 1 TE = 1 relation 2. Drivation des TA non-hirarchiques : 1 TA non-hirarchique = 1 relation. La clef primaire de la relation est lidentiant du TA. 3. Drivation des TA hirarchiques : 1 TA hirarchique = 1 clef trangre du ct de la cardinalit (n,1)
24
Figure 16 Drivation relationnelle COMPAGNIE(NumComp, NomComp, AdrComp) AVION(NumAv, TypeAv, NumComp#) AFFRETER(NumComp#, NumAv#)
20
Rgles de conception
1. tout TE doit tre identit (avoir une clef) 2. tout TA non(hirarchique doit tre identi par la combinaison des clefs des TE lis 3. tout TE doit tre normalis (3NF) 4. un TA hirarchique ne doit pas avoir dattribut 5. un TA de degr suprieur 1 ne peut pas tre hirarchique
25
Septime partie
Le langage SQL
SQL (Structured Query Language) prend trois aspects : langage de manipulation de donnes (LMD) : requtes et mises jours des donnes (INSERT,DELETE, UPDATE ) langage de dnition de donnes (LDD) : manipulation de la structure, cration de relations, ajout dattributs,... langage de contrle des donnes (LCD) : intgrit, condentialit SQL est une norme ANSI, mais suivant les SGBD, on a des variantes (dialectes) de SQL comme SQL*Plus dOracle.
21
21.1
Les attributs projets sont mentionns dans la clause SELECT, spars par des virgules. Exemple : numros et noms des pilotes SELECT FROM NumPil, NomPil PILOTE
Quand on doit conserver tous les attributs, on utilise *. En SQL, il ny a pas dlimination automatique des doublons. Cest la charge de lutilisateur grce au mot-clef DISTINCT. Exemple : numros et noms des pilotes SELECT FROM DISTINCT NumPil, NomPil PILOTE
21.2
Les slections sexpriment dans la clause WHERE comme en langage algbrique. Exemple : numros des pilotes habitant Marseille SELECT FROM WHERE NumPil PILOTE ADR=Marseille
On peut combiner des conditions avec AND et OR. Exemple : numros des pilotes nomms Dupont habitant Marseille SELECT FROM WHERE NumPil PILOTE ADR=Marseille AND NOMPIL=Dupont
26
21.2.1
Prdicats de slection
On peut utiliser les prdicats suivants dans la clause WHERE : <attribut> BETWEEN <valeur1> AND <valeur2> <attribut> IN (<valeur1>, <valeur2>,...) <attribut> LIKE valeur_gnrique% (_ = nimporte quel caractre, % = nimporte quel nombre de caractres) <attribut> IS NULL
21.3
Calculs horizontaux
Ces calculs peuvent gurer soit dans la clause SELECT (le rsultat du calcul fait partie de la requte), soit dans la clause WHERE (la condition porte sur le rsultat du calcul). Il est possible dutiliser les oprateurs +, -, *, / sur les nombres, + et - sur les dates, et || (concatnation) sur les chaines ; il est aussi possible dutiliser les fonctions UPPER (passer une chane en majuscules), LOWER (passer une chane en minuscule) et LENGTH (renvoie la taille de la chane).
21.4
Calculs verticaux
Les cinq fonctions classiques sont : SUM (somme) AVG (moyenne) COUNT (comptage) MIN (valeur minimum) MAX (valeur maximum) Un calcul vertical seectue une seule fois pour tous les tuples dune relation. Il est possible de combiner les calculs horizontaux et verticaux. Exemple : donner le total des salaires des pilotes SELECT FROM SUM (SAL) PILOTE
Les valeurs nulles sont ignores. Le seul cas o SUM, AVG, MIN et MAX renvoient NULL est quand toutes les valeurs sont nulles. Pour donner une valeur par dfaut au lieu de NULL, on utilise NVL. Exemple : somme des salaires et primes des pilotes SELECT FROM NVL (SUM (SAL),0) + NVL (SUM (Prime),0) PILOTE
21.5
Jointures prdicatives
Elles sexpriment dans la clause WHERE de la mme faon quen langage algbrique : <attribut1> <attribut2>, o est un oprateur de comparaison. Exemple : numro des avions localiss dans la ville de dpart du vol IT100 SELECT FROM WHERE NUMAV AVION, VOL NUMVOL=IT100 AND LOC=VILLE_DEP
27
Exemple : numro et nom des pilotes faisant au moins un vol au dpart de Nice SELECT FROM WHERE DISTINCT NOMPIL, PILOTE.NUMPIL PILOTE, VOL VILLE_DEP=Nice AND PILOTE.NUMPIL=VOL.NUMPIL
Exemple : auto-jointure, nom des pilotes habitant la mme ville que le pilote 100 SELECT FROM WHERE P.NUMPIL PILOTE P, PILOTE P100 P100.NUMPIL=100 AND P.VILLE=P100.VILLE
21.6
Jointures imbriques
Une jointure imbrique sexprime avec deux blocs : le premier bloc et un bloc imbriqu (ou sous-requte). 21.6.1 La sous-requte renvoie une seule valeur
Exemple : numro des pilotes qui gagnent plus que la moyenne SELECT FROM WHERE NUMPIL PILOTE SAL > ( SELECT FROM
Le bloc imbriqu est excut en premier et une seule fois. 21.6.2 La sous-requte renvoie un seul tuple
Exemple : numro des pilotes ayant la mme adresse et le mme salaire que le pilote 100 SELECT FROM WHERE NUMPIL PILOTE (ADR,SAL)=(SELECT FROM WHERE
21.6.3
La comparaison se fait avec un des rsultats du bloc imbriqu Exemple : numro des vols faits par un Airbus SELECT FROM WHERE NUMVOL VOL NUMAV=ANY (SELECT FROM WHERE
28
Exemple : numro des pilotes ayant le mme salaire et la mme adresse quun Dupont SELECT FROM WHERE NUMPIL PILOTE (SAL,ADR)=ANY (SELECT FROM WHERE
La comparaison se fait avec tous les resultats du bloc imbriqu Exemple : numro des pilotes marseillais gagnant plus que tous les pilotes parisiens SELECT FROM WHERE NUMPIL PILOTE ADR=Marseille AND SAL > ALL (SELECT FROM WHERE
21.7
Oprateurs ensemblistes
Il faut que les clauses SELECT des blocs comportent le mme nombre dattributs, et que ces attributs soient compatibles. Exemple : numro des avions localiss Paris ou faisant un vol au dpart de Paris SELECT FROM WHERE UNION SELECT FROM WHERE NUMAV AVION LOC=Paris NUMAV VOL VILLE_DEP=Paris
Exemple : numro des avions faisant un vol au dpart de leur localisation SELECT NUMAV, LOC FROM AVION INTERSECT SELECT NUMAV, VILLE_DEP FROM VOL
Exemple : numro des avions neectuant aucun vol SELECT FROM MINUS SELECT FROM NUMAV AVION NUMAV VOL
29
21.8
Jointures externes
Une jointure classique entre r1 et r2 parcourt les tuples de r1 et gnre un rsultat pour chaque tuple satisfaisant la condition de jointure. Une jointure externe procde de la mme manire mais conserve les tuples de r1 ne satisfaisant pas la condition de jointure. Exemple : jointure externe entre PILOTE et VOL avec NUMPIL=NUMPIL PILOTE NUMPIL VOL NUMVOL NUMPIL 100 IT100 100 101 IT200 102 102 IT300 100 103 IT400 102 JOINTURE NUMPIL NUMVOL NUMPIL 100 IT100 100 100 IT300 100 101 NULL 101 102 IT200 102 102 IT400 102 103 NULL 103 Table 19 Jointure externe En SQL, la jointure externe est indique par un (+) derrire lattribut de jointure qui pourra prendre des valeurs nulles : SELECT FROM WHERE * PILOTE,VOL PILOTE.NUMPIL=VOL.NUMPIL(+)
21.9
Pour ces requtes, il faut vrier quun tuple appartenant un ensemble E1 nexiste pas dans cet ensemble E2 . Par exemple, les pilotes ne faisant aucun vol. Il y a 5 formulations. 21.9.1 SELECT FROM WHERE Jointure imbrique avec NOT IN NUMPIL PILOTE NUMPIL NOT IN (SELECT FROM
NUMPIL VOL )
Jointure imbrique avec <> ALL NUMPIL PILOTE NUMPIL<>ALL (SELECT FROM
NUMPIL VOL )
30
21.9.5
Devant un bloc imbrique, NOT EXISTS renvoie : vrai si le bloc imbriqu ne rend aucun rsultat faux si le bloc imbriqu rend des rsultats SELECT FROM WHERE NUMPIL PILOTE NOT EXISTS (SELECT * FROM VOL)
Avec NOT EXISTS, il faut une excution corrle des deux blocs : pour chaque tuple dans le premier bloc, il faut excuter le bloc imbriqu. Pour cela, il faut exprimer une jointure entre les relations des deux blocs. Il faut donner un alias la relation du premier bloc et faire la jointure avec cet alias dans le bloc imbriqu. SELECT FROM WHERE NUMPIL PILOTE P NOT EXISTS (SELECT * FROM VOL WHERE VOL.NUMPIL=P.NUMPIL)
21.10
Oprations de partitionnement
Partitionner une relation consiste crer des classes dquivalence (ou sous-ensembles) telles que : leur union soit gale la relation de dpart les classes dquivalence soient disjointes deux deux (pas de tuples en commun) Le ou les critres permettant de crer ces classes sont les attributs de partitionnement. Par exemple, partitionner VOL sur NUMPIL consiste crer trois classes dquivalence (une par pilote). Chaque classe regroupe les vols dun mme pilote. Avec un partitionnement, on peut appliquer les fonctions agrgatives sur les classes dquivalence. En SQL, le partitionnement se fait dans la clause GROUP BY dans laquelle on indique le ou les attributs de partitionnement. Cette clause suit le WHERE.
31
Exemple : donner pour chaque pilote, le nombre de vols SELECT NUMPIL, COUNT (*) FROM VOL GROUP BY NUMPIL
Exemple : donner pour chaque pilote et chaque avion, le nombre de vols SELECT NUMPIL, NUMAV, COUNT (*) FROM VOL GROUP BY NUMPIL, NUMAV
Remarque Avec un GROUP BY, on peut combiner un attribut atomique avec une fonction agrgative condition que ce soit lattribut de partitionnement. Exemple : donner pour chaque pilote, le nombre de villes darrives SELECT NUMPIL, COUNT (DISTINCT VILLE_ARR) FROM VOL GROUP BY NUMPIL
Exemple : donner le salaire moyen et maximum des pilotes par ville de rsidence, sauf Paris SELECT ADR, AVG (SAL), MAX (SAL) FROM PILOTE WHERE ADR<>Paris GROUP BY ADR On peut exprimer des conditions sur des classes dquivalence (conditions utilisant des fonctions agrgatives), on utilise la clause HAVING qui suit le GROUP BY. Exemple : donner pour chaque pilote faisant au moins 5 vols, le nombre de vols SELECT NUMPIL FROM PILOTE GROUP BY NUMPIL HAVING COUNT (*)>=5
Exemple : donner le numero des pilotes faisant autant de vols que le pilote 100 SELECT NUMPIL FROM PILOTE GROUP BY NUMPIL HAVING COUNT (*)>=(SELECT FROM WHERE
Remarque GROUP BY ne sutilise pas avec DISTINCT, et pas sur une clef primaire.
32
21.11
21.11.1
Figure 18 Hirarchie des lieux avec le modle entit/relation Remarque Ce TA est hirarchique. Reprsentation avec le modle relationnel Lieu(IdLieux, Nom, IdLieuPere#)
33
21.11.2
Manipulation de hirarchies
En SQL classique, il faut faire des auto-jointures. Exemple : liste des villes des Bouches-du-Rhne SELECT FROM WHERE LV.NomLieu LIEU LD, LIEU LV LD.NomLieu=Bouches-du-Rhne AND LD.IdLIeu=LV.IdLieuPere
Exemple : liste des villes de PACA SELECT FROM WHERE LV.NomLieu LIEU LR, LIEU LD, LIEU LV LR.NomLieu=PACA AND LR.IdLieu=LD.IdLieuPere AND LD.IdLieu=LV.IdLieuPere
En SQL*Plus dOracle, la clause CONNECT BY permet de parcourir des hirarchies. SELECT <liste_attributs> FROM <relation> -- Une seule relation [WHERE <liste_conditions>] CONNECT BY [PRIOR ] <attribut_fils>=[PRIOR ] <attribut_pere> [AND <condition_hierarchique>] [START WITH <condition_depart>] [ORDER BY LEVEL ] CONNECT BY permet de donner le sens du parcours dans les hirarchies. On met PRIOR devant lattribut ls pour une recherche descendante, ou devant lattribut pre pour une recherche ascendante. Par exemple, CONNECT BY PRIOR IdLieu=IdLieuPere pour descendre dans la hirarchie des lieux. START WITH permet dedonner une condition de dpart pour la recherche. Exemple : donner tous les lieux de la rgion PACA SELECT NomLieu FROM LIEU CONNECT BY PRIOR IdLieu=IdLieuPere START WITH NomLieu=PACA
Remarques si plusieurs tuples satisfont la condition de dpart, la recherche arborescente se fait pour chacun de ces tuples sil ny a pas de START WITH, Oracle part de toutes les racines pour un parcours descendant, ou de toutes les feuilles pour un parcours ascendant on peut mettre des jointures imbriques dans la clause START WITH
34
Exemple : hirarchie des localisations des villes de dpart des vols SELECT NomLieu FROM LIEU CONNECT BY IdLieu=PRIOR IdLieuPere START WITH NomLieu IN (SELECT Ville_Dep FROM VOL ) AND permet dliminer de la recherche une partie de larbre. Si un nud (tuple) ne satisfait pas cette condition, tous ses descendants sont limins (pour un parcours descendant), ou tous ses ascendants sont limins (pour un parcours ascendant). Exemple : hirarchie des lieux, sauf ceux de la rgion PACA SELECT NomLieu FROM LIEU CONNECT BY IdLieu=PRIOR IdLieuPere AND NomLieu<>PACA
Remarque Si on met NomLieu<>PACA dans le WHERE, la rgion PACA est limine du rsultat mais pas ses dpartements ni ses villes.
ORDER BY permet de trier les rsultats. Exemple : liste alphabtique des pilotes SELECT NOMPIL FROM PILOTE ORDER BY NOMPIL ASC On peut utiliser DESC pour un tri inverse. LEVEL correspond au niveau. Le niveau 1 correspond aux premiers tuples slectionns.
21.12
Exemple : donner le numro des pilotes, lcart entre leur salaire et le salaire moyen 21.12.1 Bloc imbriqu dans le SELECT
Il faut que le bloc renvoie au plus un rsultat. SELECT NUMPIL,SAL-(SELECT AVG (SAL) FROM PILOTE ) FROM PILOTE
21.12.2
Le rsultat est une relation temporaire. On peut donc limbriquer dans un FROM. SELECT NUMPIL, SAL-SMOY FROM PILOTE, (SELECT AVG (SAL) SMOY FROM PILOTE )
35
Exemple : donner lcart entre le salaire des pilotes et le salaire moyen de leur ville de rsidence SELECT NUMPIL, SAL-SMOY FROM PILOTE, (SELECT AVG (SAL) SMOY,ADR FROM PILOTE GROUP BY ADR ) PILSAL WHERE PILOTE.ADR=PILSAL.ADR
21.13
Exemple : numro des pilotes qui conduisent tous les avions (pilotes qui conduisent autant davions quil en existe) SELECT NUMPIL FROM VOL GROUP BY NUMPIL HAVING COUNT (DISTINCT NUMAV)=(SELECT COUNT (*) FROM AVION )
Exemple : numro des pilotes qui conduisent tous les types dappareils SELECT NUMPIL FROM VOL, AVION WHERE VOL.NUMAV=AVION.NUMAV GROUP BY NUMPIL HAVING COUNT (DISTINCT NOMAV)=(SELECT COUNT (DISTINCT NOMAV) FROM AVION )
21.13.2
Exemple : numro des pilotes qui conduisent tous les avions (numro des pilotes tels quil nexiste aucun avion qui ne soit pas conduit par ces pilotes) SELECT NUMPIL FROM PILOTE P WHERE NOT EXISTS (SELECT * FROM AVION A WHERE NOT EXISTS (SELECT * FROM VOL WHERE VOL.NUMAV=A.NUMAV AND VOL.NUMPIL=P.NUMPIL))
36
Exemple : numro des pilotes qui conduisent au moins les mmes avions que le pilote 100 (numro des pilotes tels quil nexiste aucun avion non conduit par le pilote 100 qui ne soit pas conduit par eux) SELECT NUMPIL FROM PILOTE P WHERE NOT EXISTS (SELECT * FROM VOL V WHERE NUMPIL=100 AND NOT EXISTS (SELECT * FROM VOL WHERE P.NUMPIL=VOL.NUMPIL AND V.NUMAV=VOL.NUMAV))
22
22.1
UNe vue est une table virtuelle. On peut la voir comme une relation temporaire rsultant dune requte. On cre une vue ainsi : CREATE VIEW <nomvue> AS <requete>. Exemple : vue des pilotes habitant Marseille CREATE SELECT FROM WHERE VIEW PIL_MARSEILLE AS NUMPIL, NOMPIL PILOTE ADR=Marseille
22.2
Les vues permettent de limiter laccs aux donnes certains utilisateurs. Lutilisateur aura accs une vue, mais ne pourra pas voir les attributs et tuples qui ne sont pas dans la vue. Lutilisateur peut manipuler les vues comme des relations.
22.3
CREATE VIEW VOL_HORAIRE AS SELECT NUMPIL, SUM (HEURE_ARR-HEURE_DEP) FROM VOL GROUP BY NUMPIL Pour mettre jour une vue, il ne faut pas mettre de GROUP BY, CONNECT BY, DISTINCT, fonctions agrgatives, oprateurs ensemblistes, dans le premier bloc.
37
Huitime partie
A.1
Cration de relation
<nom_table> (<nom_colonne1> <type1> [DEFAULT <expression1>] [, <nom_colonne2> <type2> [DEFAULT <expression2>]] [, <contrainte1>[, <contrainte2>]])
CREATE TABLE
o : <contraintei> = CONSTRAINT <nom_contrainte> <spec_contrainte> [<etat>] <spec_contrainte> = PRIMARY KEY (<attribut1[, <attribut2>, ...]) | FOREIGN KEY (<attribut1>[, <attribut2>,...]) REFERENCES <nom_relation_associe>(<attribut1>[, <attribut2>,...]) [ON DELETE <CASCADE|SET NULL> ] | CHECK (<nom_attribut | expression> <condition>) <etat> = ENABLE | DISABLE CREATE TABLE <nom_relation> [(liste_attributs>, <liste_contraintes>)] AS <requete>
A.2
ALTER TABLE <nom_table> ADD ([nom_colonne1> <type1>] [DEFAULT <expression1>] [NOT NULL ] [UNIQUE ] [,<nom_colonne2> <type2> [DEFAULT <expression2>] [NOT NULL ] [UNIQUE ]...] [,<contrainte1> ...]) o <contraintei> = CONSTRAINT <nom_contrainte> <spec_contrainte> [<etat>] <spec_contrainte> = PRIMARY KEY (<attribut1[, <attribut2>, ...]) | FOREIGN KEY (<attribut1>[, <attribut2>,...]) REFERENCES <nom_relation_associe>(<attribut1>[, <attribut2>,...]) [ON DELETE <CASCADE|SET NULL> ] | CHECK (<nom_attribut | expression> <condition>) <etat> = ENABLE | DISABLE | VALIDATE | NOVALIDATE | ENABLE VALIDATE | ENABLE NOVALIDATE | DISABLE VALIDATE | DISABLE NOVALIDATE
A.3
ALTER TABLE <nom_table> MODIFY [(]<nom_colonne1> [<nouveau_type1>] [DEFAULT <expression1>] [NOT NULL ] [,<nom_colonne2> [<nouveau_type2>] [DEFAULT <expression2>] [NOT NULL ] ... [)]
38
A.4
A.5
ALTER TABLE <nom_table> DROP CONSTRAINT <nom_contrainte> [CASCADE ] ALTER TABLE <nom_table> DROP UNIQUE (<nom_attribut>) [CASCADE ] ALTER TABLE <nom_table> DROP PRIMARY KEY [CASCADE ]
A.6
ALTER TABLE <nom_table> SET UNUSED COLUMN <nom_attribut> ALTER TABLE <nom_table> SET UNUSED (<nom_attribut1>[, <nom_attribut2> ...]) ALTER TABLE <nom_table> DROP COLUMN <nom_attribut> [CASCADE CONSTRAINTS ] ALTER TABLE <nom_table> DDROP (<nom_attribut1>[, <nom_attribut2>, ...]) [CASCADE CONSTRAINTS ] ALTER TABLE <nom_table> DROP UNUSED COLUMNS
A.7
Suppresion de relation
A.8
CREATE [PUBLIC ] SYNONYM <nom_synonyme> FOR <nom_objet> DROP SYNONYM <nom_synonyme> RENAME <ancien_nom> TO <nouveau_nom>
A.9
Gestion de squences
[START WITH <valeur_initiale>] [INCREMENT BY <valeur_increment>] [MAXVALUE <valeur_maximale> | NOMAXVALUE ] [MINVALUE <valeur_minimale> | NOMINVALUE ] [CYCLE | NOCYCLE ]
[INCREMENT BY <valeur_increment] [MAXVALUE <valeur_maximale> | NOMAXVALUE ] [MINVALUE <valeur_minimale> | NOMINVALUE ] [CYCLE | NOCYCLE ]
39
A.10
CREATE [UNIQUE | BITMAP ] INDEX <nom_index> ON <nom_table> ([<nom_colonne1>[, <nom_colonne2>, ...]) ALTER TABLE <nom_index> RENAME TO <nouveau_nom> DROP INDEX <nom_index>
A.11
Les tables de mme nom prxes par USER_ ont la mme structure hormis lattribut OWNER, et dcrivent seulement les composants du schma de lutilisateur. Pseudo-colonnes <nom_sequence>.CURRVAL , <nom_sequence>.NEXTVAL , LEVEL , ROWID , ROWNUM , USER
B
B.1
<requete> =
o : liste_resultat = [DISTINCT ] <attribut1 | expr1 | requete1> [<alias1>] [,<attribut2 | expr2 | requete2> [<alias2>], ...] liste_relations = <relation1 | vue1 | requete1> [alias1] [, <relation2 | vue 2 | requete2> |alias2]... liste_conditions = [NOT ] <condition1> [AND | OR <condition2> ...] Condition de slection : <condition1> = <attribut [(+)] | expression> <comparateur | predicat_conditionnel> <constante>
40
<predicat_conditionnel> =
IS NULL | IN | BETWEEN ... AND | LIKE | IS NOT NULL | NOT IN | NOT BETWEEN | NOT LIKE
Condition de jointure prdicative : <conditionj> = <attribut1[(+)] | expr1> <comparateur> <attribut2[(+)] | expr2 > Condition de jointure imbrique : <conditionji> = <expression1>[, <expression2>,...] (<requete>) | <expression1>[, <expression2>,...] ANY | IN (<requete>) | <expression1>[, <expression2>,...] ANY (<requete>)
B.2
<nom_fonction> ([DISTINCT ] <nom_colonne>) o : <nom_fonction> = SUM | AVG | COUNT | MAX | MIN | STDDEV | VARIANCE
B.3
ORDER BY <expression1> [ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,<expression2> ...]
B.4
Oprateurs ensemblistes
B.5
SELECT FROM WHERE
B.6
Classications ou partitionnement
<colonne1> [, <colonne2>,...] <liste_conditions_classe>
ORDER BY HAVING
B.7
41
B.8
UPDATE SET [WHERE UPDATE SET
[WHERE
INSERT INTO <nom_table> [(<liste_attributs>)] <requte> DELETE FROM <nom_table> WHERE <condition>
C
C.1
COMMIT, ROLLBACK
C.2
CREATE ROLE <nom_role> [IDENTIFIED BY <mot_de_passe>] ALTER ROLE <nom_role> [IDENTIFIED BY <nouveau_mot_de_passe>] DROP ROLE <nom_role> CREATE USER <nom_utilisateur> [IDENTIFIED BY <mot_de_passe>] DEFAULT TABLESPACE <nom_tablespace> QUOTA <taille> PROFILE <nom_profil> ALTER USER <nom_utilisateur> [IDENTIFIED BY <nouveau_mot_de_passe>] DROP USER <nom_utilisateur>
C.3
GRANT <systeme_privileges | ALL [PRIVILEGES ]> TO <liste_role_utilisateur | PUBLIC > [WITH ADMIN OPTION ] o : <systeme_privilege> = CREATE ROLE | CREATE SEQUENCE | CREATE SESSION | CREATE SYNONYM | CREATE PUBLIC | CREATE TABLE | CREATE USER | CREATE VIEW
42
GRANT <liste_droits> TO <nom_composant> [WITH GRANT OPTION ] o : <liste_droits> = SELECT | INSERT | UPDATE [nom_colonne1,...] | DELETE | ALTER | INDEX | REFERENCES | ALL [PRIVILEGES ]
C.4
Gestion de vues
CREATE [OR REPLACE ] [[NO ] FORCE ] VIEW <nom_vue> [(alias1[,alias2,...])] AS <requete> [WITH CHECK OPTION | WITH READ ONLY ] ALTER VIEW <nom_vue> COMPILE DROP VIEW <nom_vue>
43
Index
Table des matires
I Introduction 1
1 2
II
Le modle relationnel
3
3 3 3 3 3 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 7 8 10 11
3 Introduction 3.1 3 composantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Rappels mathmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Concepts relationnels 4.1 Domaine smantique . . . . . . 4.2 Relations/tuples . . . . . . . . 4.2.1 Reprsentation tabulaire 4.3 Attributs . . . . . . . . . . . . 4.4 Clef primaire . . . . . . . . . . 4.5 Domaine primaire . . . . . . . 4.6 Clef trangre . . . . . . . . . . 4.7 Schma relationnel . . . . . . . 4.8 Autres concepts . . . . . . . . .
. . . . . . . . . . . . . . . . . . dune relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
5 Contraintes dintgrit relationnelles 5.1 Contraintes dintgrit statique/structurelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Contraintes dynamiques/applicatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Algbre relationnel 6.1 Gnralits . . . . . . . 6.2 Oprateurs relationnels 6.2.1 Projection . . . . 6.2.2 Slection . . . . . 6.2.3 Jointure . . . . . 6.2.4 Division . . . . . 6.3 Oprateurs ensemblistes
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
III
Dpendances fonctionnelles
12
12 12 12 12 12 12 12 12
7 Dnition 8 Axiomes dArmstrong 8.1 Rexivit . . . . . . 8.2 Augmentation . . . . 8.3 Transitivit . . . . . 8.4 Pseudo-transitivit . 8.5 Dcomposition . . . 8.6 Union . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
44
9 Dpendance fonctionnelle minimale 10 Clef candidate 11 Clef candidate minimale 12 Clef primaire 13 Attributs non-clef
12 12 13 13 13
IV
Thorie de modlisation
14
14 14 14 14 14 15 15 16 16 16
14 Objectif 14.1 Mauvais schma relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2 Bon schma relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Formes normales 15.1 1NF (1st Normal Form) 15.1.1 Normalisation en 15.2 2NF (2nd Normal Form) 15.2.1 Normalisation en 15.3 3NF (3rd Normal Form) 15.3.1 Normalisation en
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
17
17 17 17 17 17 17 17 18 18 18 18
16 Concepts de base 16.1 Drivabilit des DF . . . . . . . . . . . . . . 16.2 Couverture dun ensemble de DF . . . . . . 16.3 Couverture minimale dun ensemble de DF 16.4 Fermeture dArmstrong . . . . . . . . . . . 16.4.1 Application + . . . . . . . . . . . . . + 16.4.2 Exemple : BDF , la fermeture de BD
17 Algorithmes de normalisation 17.1 Algorithme de calcul dune clef candidate minimale . . . . . . . . . . . . . . . . . . . . . . . . 17.2 Algorithme de calcul dune couverture minimale . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3 Algorithme de calcul de la fermeture dArmstrong . . . . . . . . . . . . . . . . . . . . . . . .
VI
19
19 19 20 20 20 21 22 22 24 24
18 Schma entit/relation 18.1 Les types dentits . . . . . . . . . . . 18.2 Les proprits . . . . . . . . . . . . . . 18.3 Les identiants (ou clefs) . . . . . . . 18.4 Associations et types dassociations . . 18.4.1 Associations . . . . . . . . . . . 18.4.2 Cardinalits . . . . . . . . . . . 18.4.3 Dimension dune TA . . . . . . 18.4.4 Identication dune association 19 Drivation relationnelle
45
20 Rgles de conception
25
VII
Le langage SQL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
26 26 26 27 27 27 27 28 28 28 28 29 30 30 30 30 31 31 31 31 33 33 34 35 35 35 36 36 36 37 37 37 37
21 SQL comme langage de manipulation des donnes (LMD) 21.1 Expression des projections . . . . . . . . . . . . . . . . . . . . 21.2 Expression des slections . . . . . . . . . . . . . . . . . . . . . 21.2.1 Prdicats de slection . . . . . . . . . . . . . . . . . . 21.3 Calculs horizontaux . . . . . . . . . . . . . . . . . . . . . . . 21.4 Calculs verticaux . . . . . . . . . . . . . . . . . . . . . . . . . 21.5 Jointures prdicatives . . . . . . . . . . . . . . . . . . . . . . 21.6 Jointures imbriques . . . . . . . . . . . . . . . . . . . . . . . 21.6.1 La sous-requte renvoie une seule valeur . . . . . . . . 21.6.2 La sous-requte renvoie un seul tuple . . . . . . . . . . 21.6.3 La sous-requte rend un ensemble de rsultats . . . . . 21.7 Oprateurs ensemblistes . . . . . . . . . . . . . . . . . . . . . 21.8 Jointures externes . . . . . . . . . . . . . . . . . . . . . . . . 21.9 Test de non-existence de tuples . . . . . . . . . . . . . . . . . 21.9.1 Jointure imbrique avec NOT IN . . . . . . . . . . . . 21.9.2 Jointure imbrique avec <> ALL . . . . . . . . . . . . 21.9.3 Dirence ensembliste . . . . . . . . . . . . . . . . . . 21.9.4 Jointure externe et prdicat IS NULL . . . . . . . . . 21.9.5 Bloc imbrique et prdicat NOT EXISTS . . . . . . . . 21.10Oprations de partitionnement . . . . . . . . . . . . . . . . . 21.11Recherche dans des arborescences . . . . . . . . . . . . . . . . 21.11.1 Reprsentation des hirarchies . . . . . . . . . . . . . 21.11.2 Manipulation de hirarchies . . . . . . . . . . . . . . . 21.12Calculs imbriques dans le SELECT et le FROM . . . . . . . . . 21.12.1 Bloc imbriqu dans le SELECT . . . . . . . . . . . . . . 21.12.2 Bloc imbriqu dans le FROM . . . . . . . . . . . . . . . 21.13Expression des divisions . . . . . . . . . . . . . . . . . . . . . 21.13.1 Avec GROUP BY et comptage . . . . . . . . . . . . . . . 21.13.2 Avec un double NOT EXISTS . . . . . . . . . . . . . .
22 SQL comme langage de contrle des donnes (LCD) 22.1 Concept de vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 Premier rle des vues : limiter la consultation des donnes . . . . . . . . . . . . . . . . . . . . 22.3 Deuxime rle des vues : crire des requtes complexes . . . . . . . . . . . . . . . . . . . . . .
VIII
38
38 38 38 38 39 39 39 39 39 39 40 40
A SQL comme langage de dnition de donnes (LDD) A.1 Cration de relation . . . . . . . . . . . . . . . . . . . . . A.2 Ajout dattributs et de contraintes dans une relation . . . A.3 Modication de la dnition dun attribut . . . . . . . . . A.4 Modication de ltat dune contrainte . . . . . . . . . . . A.5 Suppression de contrainte dans une relation . . . . . . . . A.6 Suppression dattribut dans une relation . . . . . . . . . . A.7 Suppresion de relation . . . . . . . . . . . . . . . . . . . . A.8 Cration/suppression de synonyme et changement du nom A.9 Gestion de squences . . . . . . . . . . . . . . . . . . . . . A.10 Index sur les relations . . . . . . . . . . . . . . . . . . . . A.11 Principales tables systmes Oracle . . . . . . . . . . . . . 46
B SQL comme langage de manipulation de donnes B.1 Requtes . . . . . . . . . . . . . . . . . . . . . . . . B.2 Calculs verticaux (fonctions aggrgatives) . . . . . B.3 Tri des rsultats . . . . . . . . . . . . . . . . . . . B.4 Oprateurs ensemblistes . . . . . . . . . . . . . . . B.5 Test dabsence ou dexistence de donnes . . . . . . B.6 Classications ou partitionnement . . . . . . . . . B.7 Recherche dans une arborescence . . . . . . . . . . B.8 Mise jour des donnes . . . . . . . . . . . . . . .
(LMD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
40 40 41 41 41 41 41 41 42 42 42 42 42 43
C SQL comme langage de contrle des donnes (LCD) C.1 Gestion des transactions . . . . . . . . . . . . . . . . . C.2 Cration et suppression de roles et dutilisateurs . . . C.3 Attribution ou suppression de privilges . . . . . . . . C.4 Gestion de vues . . . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
47
48
49