Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
d'accs
Couche logique : contrle global et structure globale des donnes
Voyons maintenant brivement le fonctionnement du SGBD (un exemple avec le parcours d'une requte) :
Analyse syntaxique et smantique d'une requte
traduction au niveau logique
contrle de confidentialit, concurrence
si la requte est accepte, optimisation et dcoupe en sous-requtes lmentaires transfres au niveau interne
au niveau interne, traduction des sous-requtes en requtes physiques correspontes.
Le cycle de vie d'une base de donnes se dfini en 4 phases :
Conception de la base (schma conceptuel)
Implantation des donnes (schma logique)
Utilisation (interrogation, mises jour)
Maintenance (correction, volution)
Le niveau conceptuel permet de passer de la description des besoins au modle conceptuel (indpendant de la solution
informatique et dfinissant la partie statique structure des donnes et la partie dynamique rgles et oprations). Les
contraintes d'intgrits sont inhrentes aux donnes et traduisent les rgles des applications utilisant la base.
L'exemple ci-dessus montre un schma conceptuel. On peut y ajouter les contraintes d'intgrits suivantes :
Un tudiant suit au plus 6 cours
Un cours est assur par un unique Enseignant
La traduction du schma conceptuel en un schma logique se fait en fonction des concepts du modle utilis par le
SGBQ choisi. Un exemple de traduction dans le schma logique relationnel de l'exemple prcdent :
Etudiant (nom, prnom, date de naissance, N etudiant)
Enseignant (nom, prnom)
Cours (Nom_Cours, Cycle, nom_enseignant)
Inscript (N Etudiant, Nom_Cours, notes)
L'implantation des donnes dpend du choix des structures de stockages des donnes par les administrateurs systmes :
schma interne : description des choix d'enregistrement des donnes dans les fichiers
fait appel un nouveau modle, le modle interne, ou les concepts sont ceux de fichier, organisation de fichier,
index, chemin d'accs, cl, ...
Schmas entits/associations
On appelle Objet une entit. Les liens entre des entits s'appellent Associations . Les proprits d'une entit ou
d'une association s'appelle attribut . Un attribut peut aussi dfinir les proprits associes un autre attribut. (Par
exemple un attribut date est dfini par les attributs jour , mois et anne ).
Ici :
Personne et Maison sont des objets (ou des entits)
Achte est une association
Nom, Prix et Adresse sont les attributs respectifs de Personne, Achte, Maison
2
Un schma entits/associations dfinit de plus des contraintes de cardinalit des associations : A combien d'associations
de A une entit E appartient ? : On dfinit cela sur un intervalle reprsentant le minimum et le maximum :
3
Des schmas entits/associations au schma relationnel
Le modle relationnel est un modle de niveau logique trs simple dfini par Ted Codd en 1970. Il est aujourd'hui utilis
par beaucoup de SGBD commerciaux.
Il existe un seul type de structure pour reprsenter les donnes : la relation (table) :
chaque ligne de la table (tuple) reprsente une association
les noms des colonnes sont les attributs.
Soit le schma conceptuel suivant :
4
les attributs de l'association R
les attributs identifiants les entits en relation. Et dans ce cas, la cl de T n'est pas vidente. S'il faut, on rajoute
arbitrairement une cl.
Par exemple :
On obtient, pour l'association Commande le schma relationnel : Commande (Nom, Nom_F, N, Quantit).
Les attributs multivalus A d'un type d'entit E est traduit par une relation T dont les attributs sont les attributs de
l'identifiant de E et les attributs de A. Mais en ralit, il vaut mieux viter les attributs multiples.
Concernant la spcialisation/gnralisation, il existe plusieurs solutions :
Solution 1 : Le type d'entit E est reprsent par une relation T dont les attributs sont les attributs de E et la cl de T est
l'identifiant de E. Les sous entits Ei sont reprsentes par des relations Ti dont les attributs sont les attributs de Ei et les
attributs identifiants de E, la cl de Ti est l'identifiant de E. Avec l'exemple prcdent :
Employ (Numro, Nom, Adresse)
Secrtaire (Numro, Vitesse de frappe)
Professeur (Numro, Discipline)
Solution 2 : Une seule table pour tous le monde avec tous les attributs (des attributs peuvent donc tre NULL). Avec
l'exemple prcdent :
Employ (Numro, Nom, Adresse, Vitesse de frappe, Discipline)
Solution 3 : Une table par entit avec exactement ses attributs. La cl de T est l'identifiant de E. La cl de Ti est
l'identifiant de E ou un autre identifiant spcifique A. Une relation peut identifier un objet de Ei et un de E, si on
souhaite rpter les objets d'un Ei dans E. Avec l'exemple prcdent, on obtient le schma relationnel suivant :
Employ (Numro, Nom, Adresse)
Secrtaire (Numro, Nom, Adresse, Vitesse de frappe)
Professeur (Numro, Nom, Adresse, Discipline)
Pour conclure, rappelons donc la description d'un schma relationnel. Un schma relationnel dfinit donc pour chaque
relation :
le nom de la relation,
la dfinition,
les attributs et les domaines des dits attributs,
les attributs cls
les attributs externes (attributs dfinis dans une autre relation)
les contraintes d'intgrit de la relation.
Il dfinit de plus les contraintes d'intgrits portant sur plusieurs relations.
5
Algbre relationnelle
L'algbre relationnelle permet de dfinir un ensemble d'oprations :
relation + condition = nouvelle relation
relation + ensemble d'attributs = relation,
relation + relation = relation.
Les oprations sont (on considre des schmas R et S de relations disjointes et r une relation de schma R et s une
relation de schma S) :
La slection (note ) : la slection P (r) est une relation de schma R constitu des tuples de R qui satisfont le
prdicat p.
La projection (note ) : la projection S (r) est une relation de schma S obtenue partir de R en supprimant les
attributs qui ne sont pas dans S.
Le changement de nom (note ) : le changement de nom A:B R est une relation dans laquelle le nom de l'attribut
A est remplac par le nom B.
Le produit cartsien (not r x s) : le produit cartsien de deux relations r et s est une relation de schma R U S
obtenue en combinant les tuples de r et de s de toutes les manires possibles.
La jointure naturelle (note r s) est une relation de schma R U S obtenue en combinant les tuples de r et de
s ayant les mmes valeurs d'attributs sur R S, de toutes les manires possibles).
La jointure conditionnelle r [p]s = P (r x s)
Le quotient r/s est une relation de schma R \ S constitue des tuples t de [R\S](r) tels que pour tout t' de S, t.t'
appartient R.
On dnote de plus : l'union, l'intersection et la diffrence qui impliquent que les attributs entre les tables soient les
mmes.
Nous allons maintenant voir les multi-ensembles. Soit t un tuple figurant R fois dans r et S fois dans s :
avec l'union, r U s : le tuple t apparat R + S fois.
l'intersection : t figure min(R, S) fois dans r s.
la diffrence : t figure max( R S, 0) dans r s.
avec le produit cartsien : (t, u) figure R*S fois dans r x s. Remarque : pour le produit, cartsien, R et S n'ont pas
forcment les mmes attributs.
Voyons maintenant quelques lois de l'algbre relationnelle :
Optimisation des requtes :
Les slections diminuent le nombre de n-uplets et donc la taille des tables.
Les projection diminuent un peu la taille des tables.
Les produits et les jointures augmentent considrablement la taille des tables.
Commutativit, associativit :
la jointure et le produit cartsien sont associative et commutative
L'union et l'intersection sont associative et commutative, mais il n'y a pas de distributivit de U et avec les
multi-ensembles.
Lois avec la slection :
[C1ANDC2]R = [C1][C2](R)
[C](R U S) = [C]R U [C](S)
[C](R \ S) = [C]R \ S = [C]R \ [C]S
Si C ne concerne que R:
[C](R S) = ([C]R) S
[C](R S) = ([C]R)S
Si C ne concerne que les attributs communs:
[C](R S) = ([C]R) [C]S R et S ont mme attributs, C concerne forcment les attributs communs.
[C](R S) = ([C]R) [C]S
Lois avec la projection :
Si :
M (Attr (R) \ Attr (S))
N (Attr (S) \ Attr (R))
T = (Attr (R) Attr (S))
6
KT
Alors
MKN(R S) = MKN( MTR TNS)
Si :
= (Attr (R) Attr (S))
M (Attr (R) \ Attr (S))
N (Attr (S) \ Attr (R))
Alors :
MN(R S) = ( MR NS)
Bases de donnes Quelques lois de lalgbre relationnelle
DATALOG
Datalog est un langage logique de requtes. On peut donc y exprimer des conditions (Si alors Sinon) couramment
utilises aujourd'hui. Datalog gre de plus les requtes non rcursives ( = algbre relationnelle) et rcursives (extension
ajoute SQL 99).
Prenons un premier exemple. Soit la base de donnes reprsente par le schma suivant :
Frquente (client, bar)
Aime (Client, bire)
Sert (Bar, Bire, Prix)
On cherche les clients heureux, c'est dire ceux qui frquentent un bar qui sert une bire qu'ils aiment. La requte se
structure alors de la manire suivante :
heureux (x) <- Frquente(x, bar) AND Aime (d, Bire) AND Sert (bar, bire, p)
Le sens d'une clause (rgle) s'interprte de la manire suivante : la tte est vraie s'il existe des valeurs des variables qui
rendent vraies les atomes du corps de la clause. Ainsi, la requte prcdente s'interprte de la manire suivante : x est
heureux s'il existe un bar et une bire et un prix tels que :
d frquente bar
d aime bire
bar sert bire au prix p.
Un atome est un prdicat ou une relation avec des variables ou des constantes comme arguments. Ainsi, la tte d'une
clause est un atome, le corps est une conjonction d'atomes. Sert (bar, bire, 3) est un atome ou le prdicat est le nom de
la relation et les arguments sont des variables ou des constantes.
Il existe des sous requtes (ou atomes) conditionnelles : c'est dire des atomes de comparaison utilisant des prdicats
prdfinis. On peut donc avoir toute les sortes de conditions usuelles (x > y, ou x <> y, ... par exemple)
Supposons, toujours avec le mme exemple, qu'une bire bon march est une bire vendue par au moins deux bars qui la
servent moins de 2.5. On peut chercher cette bire bon march par la requte Datalog suivante :
Bon_march (bire) <- Sert (bar1, bire, p1) AND Sert (bar2, bire, p2) AND p1 < 2.5 AND p2 < 2.5 AND
bar1<> bar2
Une sous requte peut tre ngative (prcde de NOT). Il faut alors vrifier la valeur de la requte. En effet, une
requte est correcte (ou sure) si toute variable apparat dans une sous requte non nie. Ainsi, les requtes (ou clauses)
suivantes sont incorrectes :
S(x) <- NOT R(x)
S(x) <- R(y) AND NOT R(x)
S(x) <- R(y) AND x < y
En effet, chaque fois, on peut avoir une infinit de valeurs pour x, mme si R est une relation finie.
De manire gnrale, pour valuer les rgles, on distingue deux approches :
instanciation des variables : on essaye toutes les valeurs possibles pour les variables des sous requtes, et si les
sous requtes sont valides, on ajoute le n-uplet
instanciation des n-uplets : on essaye tous les n-uplets possibles des atomes sans ngation, et si les sous requtes
7
sont valides alors on ajoute le n-uplet.
L'instanciation des n-uplets se fait de la manire suivante :
commencer par les atomes relationnels non nis
considrer toutes les instanciations de leur n-uplets par des n-uplets pris dans les relations correspondantes
si les instanciations donnent des valeurs cohrentes aux variables et rendent toutes les sous requtes vraies, alors
ajouter la solution le n-uplet correspondant.
Un programme Datalog est une suite de clauses. Il existe alors deux types de prdicats :
EDB (Extensional DataBase) : table stocke
IDB (Intensional DataBase) : relation dfinie par les clauses
Une relation n'est donc jamais EDB et IDB. Il n'y a jamais de EDB dans les ttes de clauses.
On peut valuer les programmes Datalog en tenant compte des quelques rgles suivantes :
Si pas de rcursion : ordonner les clauses pour que le corps ne contienne que des prdicats dj dfinis et valus
Si un prdicat IDB est dfini par plus d'une clause, chaque clause ajoute des n-uplets au prdicat IDB
Sans rcursion, Datalog est quivalent l'algbre relationnelle, avec rcursion, Datalog sort de ce cadre.
Afin de mieux comprendre, nous allons maintenant voir le principe de rcursion avec Datalog. Il faut former un graphe
de dpendance des sommets (= prdicats IDB). L'arc X -> Y existe si et seulement si X est la tte d'une clause avec Y
dans le corps d'une autre clause. S'il y un cycle dans ce graphe, alors il y a rcursion.
Pour valuer les programmes rcursifs s'il n'y pas de ngation :
On suppose les IDB vides
Evaluer les clauses en utilisant les EDB et les n-uplets dj ajouts aux IDB
S'arrter quand le contenu du prdicat IDB est stationnaire
Il s'agit d'une valuation nave, une valuation semi-nave consiste :
Les EDB ne changent pas, chaque tour, on obtient un nouvel n-uplet dans un IDB que si l'on utilise un nouvel
n-uplet d'un IDB
Eviter de redcouvrir les mmes n-uplets (malgr cela, un mme n-uplet peut tre redcouvert!)
Evaluer un programme avec rcursion et ngation devient toutefois difficile. En effet, l'valuation nave ne fonctionne
plus si des sous requtes sont nies. En gnral, la ngation au sein d'un programme rcursif n'a pas de sens : mme
lorsque les rcursions et ngations sont indpendantes, les prdicats IDB peuvent tre mal dfinis.
Pour les programmes qui utiliseraient la fois la ngation et la rcursion, il faut alors utiliser une ngation stratifie. En
effet, la stratification est une contrainte habituellement requise en Datalog avec la ngation et la rcursion. La ngation
ne peut plus tre imbriqu dans la rcursion et on obtient alors les relations souhaites.
Intuitivement, la strate d'un prdicat IDB est le nombre maximal de ngations que l'on peut rencontrer durant son
valuation (ngation stratifie = strate finie) :
Dans P(x) <- Q(x) AND NOT P(x) on peut nier P une infinit de fois pour calculer P...
Les strates peuvent tre formalises par un graphe :
Sommets = prdicats IDB
Arc A -> B si et seulement si A dpend du prdicat B
Etiquette - sur l'arc A -> B si et seulement si B est ni dans la clause A <- ... B ...
Ainsi, la strate d'un sommet (prdicat IDB) est le chemin maximum d'arcs - sur un chemin partant de ce sommets. Un
programme Datalog est stratifi si tous les prdicats IDB ont une strate finie : c'est dire qu'il n'y a pas de cycle avec un
- .
Pour finir ce paragraphe concernant Datalog, nous allons voir les modles. Un modle est un choix de relations IDB qui,
avec des relations EDB donnes rend vraie toutes les clauses, quelles que soient les valeurs donnes aux variables :
Attention, si le corps de la clause est faux, alors la clause est vraie
Si le corps de la clause est vrai, la tte doit tre vraie.
On appelle modle minimal un modle tel que :
il n'y a pas de ngation : un programme Datalog a un unique modle minimal.
Avec la ngation : il peut y en avoir plusieurs
Le modle calcul avec la stratification est celui qui a un sens.
8
Lorsqu'on a un modle stratifi :
On value les prdicats IDB par ordre croissant de strate,
Ds qu'un prdicat IDB est valu, on le considre comme un prdicat EDB.
SQL
Le langage SQL est un langage de haut niveau qui vite de spcifier la manipulation des donnes comme il faudrait le
faire en C++ par exemple. SQL fonctionne grce des requtes trs efficacement optimises pour des rponses rapides.
NULL et UNKNOWN
Les n-uplets des relations SQL peuvent avoir des composants indfinis (NULL). Le sens de la valeur NULL dpend du
conteste :
valeur inconnue : Personne dont on a pas l'adresse par exemple
inapplicable : le mtier d'un enfant
SQL utilise alors la logique trivalue : TRUE FALSE UNKNOWN : La comparaison entre une valeur et NULL
donne UNKNOWN. Un n-uplet est slectionn si le WHERE donne TRUE (et pas FALSE ni UNKNOWN). Nous
rappelons dans les tableaux ci-dessous les rsultats logiques de comparaisons :
9
alors distinguer les attributs de mme nom appartenant des relations diffrentes : <relation>.<attribut>
Le sens des requtes ressemble alors au cas unaire : on fait le produit des relations du FROM et on slectionne les n-
uplets qui satisfont le WHERE. Ces n-uplets sont alors projets sur les attributs du SELECT.
Sous-requtes
Les oprateurs IN, ALL et ANY peuvent servir utiliser des sous-requtes. Une sous requte se construit exactement de
la mme manire qu'une requte classique. Ainsi, une expression parenthses SELECT-FROM-WHERE est une sous
requte qui peut tre utilis dans un FROM ou dans un WHERE.
L'oprateur IN s'utilise comme suit :
<n-uplet> IN <relation> vaut TRUE si et seulement si <n-uplet> appartient relation,
inversement avec <n-uplet> NOT IN <relation>
Le IN s'utilise de manire gnrale dans le WHERE et dans ce cas, <relation> est une sous requte.
L'oprateur EXISTS s'utilise comme suit :
EXISTS (<relation>) vaut TRUE si et seulement si <relation> n'est pas vide
NOT EXISTS (<relation>) : le contraire,
EXISTS apparat toujours dans un WHERE
L'oprateur ANY s'utilise comme suit :
x = ANY (<relation>) vaut TRUE si et seulement si au moins un n-uplet de <relation> est x.
Il en va de mme pour les autres styles de comparaisons, par exemple >= signifie que x est plus grand que l'un
des lments de <relation> (se qui prsuppose que le n-uplet x n'a qu'un seul attribut!)
L'oprateur ALL s'utilise comme suit :
x <> ALL (<relation>) vaut TRUE si et seulement si tous les lments de <relation> sont diffrents de x.
On peut, comme pour ANY, utiliser tout type de comparaisons.
Oprations multi-ensemblistes
L'union, l'intersection et la diffrence existent en SQL :
(sous-requte) UNION (sous-requte)
(sous-requte) INTERSECT (sous-requte)
(sous-requte) EXCEPT (sous-requte)
Remarque : par dfaut, SELECT-FROM-WHERE travaille avec les multi-ensembles. En revanche, UNION,
INTERSECT et EXCEPT fonctionne avec les ensembles : les doublons sont donc limins. Ce choix d'implmentation
de SQL existe pour des raisons d'efficacits. Les multi-ensembles sont plus pratiques pour la projection (attributs du
SELECT) et la slection (conditions du WHERE) car on procde n-uplet par n-uplet. A l'inverse, pour l'intersection et la
diffrence, il est plus efficace de trier d'abord et liminer ensuite, autant que possible, les doublons.
Pour supprimer les doublons dans SELECT-FROM-WHERE : utiliser l'oprateur DISTINCT aprs le SELECT. Par
exemple : SELECT DISTINCT Nom FROM Personne va slectionner de manire distinctes tous les noms de la table
Personne. Si plusieurs personnes portent le mme nom, ce nom n'apparait toutefois qu'une seule fois dans la rponse.
Inversement, pour retrouver les doublons dans les oprations multi-ensemblistes UNION, INTERSECT et EXCEPT, il
faut utiliser l'oprateur ALL aprs l'opration : ... UNION ALL ...
Jointures
En SQL on distingue 4 types de jointures. Ces jointures fonctionnent avec les multi-ensembles. Ces expressions peuvent
s'utiliser comme requtes ou dans une requte et les relations R et S peuvent tre des requetes entres parenthses :
jointure naturelle : R NATURAL JOIN S
jointure produit : R CROSS JOIN S
jointure conditionnelle R JOIN S ON <condition>
jointure externe : R OUTER JOIN S. Le noyau de la jointure externe peut tre modifi par des options
(NATURAL devant OUTER, ON, LEFT, RIGHT, FULL aprs OUTER) avec :
LEFT : accepte les n-uplets de R sans les n-uplets de S qui correspondent
RIGHT : accepte les n-uplets de S sans les n-uplets de R qui correspondent
FULL : option par dfaut, accepte les n-uplets de R et S qui ne correspondent pas aux n-uplets de l'autre
relation.
10
Oprateurs d'agrgation
Les agrgations :
SUM (somme), AVG(moyenne), COUNT, MIN, MAX s'utilisent sur une colonne du SELECT
COUNT(*) compte les n-uplets de la relation.
NULL n'intervient pas dans une somme, une moyenne, ... et n'est jamais un minimum ou maximum.
Le regroupement s'effectue avec GROUB BY et s'utilise de la manire suivante :
SELECT-FROM-WHERE peut tre suivi de GROUP BY et d'une liste d'attributs.
Le rsultat du SELECT-FROM-WHERE est regroup par valeur des attributs du GROUP BY. L'agrgation est alors
appliqu chaque groupe. Attention toutefois, il existe alors des restrictions sur le contenu de SELECT avec les
agrgations : tout lment du SELECT est soit un oprateur agrg par un oprateur d'agrgation, soit un attribut du
GROUP BY.
L'oprateur HAVING permet de spcifier des conditions sur le GROUP BY. Il s'utilise comme suit :
HAVING <condition>, la suite du GROUP BY
Il supprime les groupes qui ne satisfont pas la condition.
11
On distinque enfin d'autres dclarations pour les attributs :
NOT NULL : attribut qui ne vaut jamais NULL,
DEFAULT <value> prcise la valeur par dfaut d'un attribut.
Pour terminer, on peut modifier une table :
Ajouter des attributs : ALTER TABLE <name> ADD <attribute_declaration> : ajoute la table <name> l'attribut
(la colonne) dfinit dans <attribute_declaration>. Par exemple ALTER TABLE Personne ADD age INTEGER
DEFAULT 0.
Supprimer un attribut : ALTER TABLE <name> DROP <attribute>. Par exemple ALTER TABLE Personne
DROP Adresse, supprime l'attribut adresse de la table Personne.
Vues
Une vue est une table virtuelle dfinie partie des autres tables et vues. Pour crer une vue, on utilise l'oprateur
CREATE VIEW. Par exemple CREATE VIEW <name> AS <requete>.
Une vue s'interroge ensuite comme une table. Le SGBD interprte la requte comme si la vue tait une table de base. Il
en fait une formule de l'algbre relationnelle dans laquelle intervient la vue C. Cette table C est remplac par sa
dfinition en algbre relationnelle.
Dpendances fonctionnelles
La proprit X -> A signifie que si deux n-uplets d'une relation R sont gaux sur X, alors ils sont gaux sur A. Si c'est le
cas, alors on dit que R satifait la dpendance fonctionnelle X -> A.
On peut avoir des dpendances fonctionnelles plusieurs attributs. Par exemple (dans la relation Personne) :
Nom -> Adresse, Telephone : est un raccourci pour dire que Nom -> Adresse et Nom -> Telephone
Nom, Adresse -> Prnom : est ici indispensable : Le Nom a lui seul ne permet pas de connaitre le prnom de la
personne (plusieurs personnes portant le mme nom). En y ajoutant l'Adresse, on connait la personne : celle qui
porte ce nom et qui vit cette adresse.
Soit K un attribut ou un ensemble d'attributs. K est une cl de la relation si et seulement si, pour tout attribut A de la
relation R on a K -> A.
K est une cl minimale si et seulement si K est une cl et aucun sous ensemble de K n'est cl.
Remarque : Les cls des schmas entits/associations portent sur les entits. Les cls des relations portent sur les n-
uplets. En principe, un n-uplet = une entit. Mais si le schma relationnel est mal conu, une entit correspond
plusieurs n-uplets. Donc, en principe, les deux notions diffrent.
On peut poser K comme tant une cl, et dans ce cas, les seules dpendances fonctionnelles sont K -> A pour tout
attribut A de la relation. Une autre mthode consiste poser les dpendances fonctionnelles et a en dduire les cls : le
modle entits/associations nous donne les dpendances fonctionnelles partir des entits et des relations.
L'analyse d'un problme nous donne des dpendances fonctionnelles de bon sens. Par exemple "jamais deux cours la
mme heure dans la mme salle" permet de dire que Heure, Salle -> Cours.
Axiomes D'armstrong
Une dpendance fonctionnelle X -> Y est consquence d'un ensemble de dpendance fonctionnelle si et seulement si
elle s'obtient partir :
de F
des axiomes d'Armstrong
12
Les axiomes d'Armstrong :
X -> X' avec X' inclus dans X (rflexivit)
Si Z -> Z' alors ZW -> Z'W (augmentation)
Si X -> Y et Y -> Z alors X -> Z (transitivit)
Quelques consquences des axiomes d'Armstrong :
Si X -> Y et X -> Z alors X -> YZ
Si X -> Y et WY -> Z alors WX -> Z
Si X -> Y et Z inclus dans Y alors X -> Z
Si une dpendance fonctionnelle f s'obtient partir de F par les axiomes d'Armstrong, alors elle est consquence
smantique de F (tout modle satisfaisant F satisfait f). Si une DF f X -> Y est consquence smantique de F alors f se
dduit de F par les axiomes d'Armstrong. Supposons maintenant que X -> Y soit consquence smantique de F et pas
drivable.
Appelons X+ les attributs U tels que la dpendance X -> U est consquence de F par les axiomes d'Armstrong. X+
contient videmment X (rflexivit). Si X -> Y est consquence smantique de F, Y doit tre inclus dans X+ (sinon les n-
uplets diffreraient sur Y) et donc, pour chaque attribut A de Y, A est dans X+. On peut alors calculer la cloture d'un
ensemble d'attributs grce au programme suivant :
Initialisation : Y0 = Y
Induction : Yn+1 = Yn U {A / Z -> A et Z inclus dans Yn}
Arrt : lorsqu'il y a stabilit Yn = Yn+1
13
Pour vrifier que X -> Y sera prserv
INIT Z := X
Tant que Z change
Pour chaque Ri faire Z:= Z U ((Z Ri)+/F Ri) - avec +/F = cloture par rapport F
A la fin Z vaut X+ par rapport G1 U ... U Gk.
Si Y dans Z alors X -> Y est prserve.
Formes normales
Un bon schma relationnel est un schma dans lequel il n'y pas de redondance et pas d'anomalies :
anomalies de mise jour : une occurrence d'une information est modifie et pas les autres
anomalies de suppressions : une information pertinente est perdue en dtruisant le n-uplet
A B C D E
X1 A1 B12 B13 A4 B15
X2 A1 A2 B23 B24 B25
X3 B31 A2 B33 B34 A5
14
A B C D E
X4 B41 A2 B43 B44 A5
X5 A1 B52 B53 B54 A5
Il s'agit ensuite de forcer les galits jusqu' ce que les dpendances fonctionnelles soient vraies (voir Tds pour plus de
dtails sur cet algorithme). Si une ligne est de la forme A1, ..., An alors la dcomposition est SPI. Sinon, il y a perte
d'informations.
Si la ligne A1, ..., An n'apparait pas, on a une relation qui satisfait les dpendances fonctionnelles et A1, ..., An est dans la
jointure des projections, mais pas dans R.
Thorme de Heath : une dcomposition en X1 et X2 est SPI si et seulement si :
X1 X2 -> X1 X2 ou
X1 X2 -> X2 X1
15
composantes et reconstruire la relation de dpart.
Prservation des dpendances fonctionnelles : on peut vrifier dans les relations projetes que les dpendances
originales sont prserves.
On peut toujours mettre en BCNF sans perte d'information.
On peut toujours mettre en 3NF :
Sans perte d'information
En prservant les dpendances fonctionnelles
Par contre il n'y a pas toujours de forme BCNF sans perte d'information et sans perte de dpendances fonctionnelles.
16
Oprations primitives :
input(x) : bloc contenant x -> mmoire
output(x) => bloc contenant x -> disque
read (x, t) : faire input(x) si ncessaire et t <- valeur de x
write (x, t) : faire input(x) si ncessaire t -> x (en mmoire)
Journal (Log) : le journal enregistre les actions de toutes les transactions. Le journal contient des articles de diffrents
types :
<START T> : dbut de la transaction T
<COMMIT T> : transaction T valide
<ABORT T> : transaction T annule
<T, X, v> : la transaction T mis jour l'lment X, v est l'ancienne valeur de X. <T, X, v> est gnr par un
WRITE
Les enregistrements sont en mmoire centrale comme les donnes de la BD et sont crits priodiquement sur le disque.
En cas de panne, LOG est utilis :
soit pour annuler des actions faites par transactions (UNDO)
soit pour refaire des actions faites par transactions (REDO)
soit pour annuler certaines actions et en refaire d'autres (UNDO/REDO)
17
CKPT (T1, ...Tn)> alors la panne a eu lieu pendant le checkpoint. Les transactions incompltes sont celles rencontres
entre la panne et le <START CKPT (...)> et celles parmi T1, ..., Tn qui ne sont pas termines. On doit remonter jusqu'au
<START> de la plus vieille de ces transactions.
UNDO/REDO
Inconvnients de UNDO / REDO :
UNDO ncessite que les donnes soient crites sur disque avant que le COMMIT soit crit dans le journal, ce qui
entraine beaucoup de I/O.
REDO au contraire, demande ce que les donnes restent dans les buffers tant que la transaction n'est pas valide
et que le fichier LOG est crit. Le nombre de buffers est donc augment.
Pour amliorer les traitements, on utilise donc une mthode qui utilise la fois UNDO et REDO (journalisation
UNDO/REDO). Cette journalisation utilise les mmes enregistrements dans le LOG que UNDO et REDO. On y ajoute
cependant la rgle UPDATE <T, X, v, w> : la transaction T a chang la valeur de X. L'ancienne valeur tait v, la
nouvelle valeur est w.
18
La rgle d'criture dans le fichier LOG est donc : Avant de modifier un lment X de la BD sur le disque, il est
ncessaire qu'un enregistrement de mise jour <T, X, v, w> soit crit sur le disque. <COMMIT> peut tre prcis avant
ou aprs criture sur disque de X.
Lors de la reprise avec UNDO/REDO : on a les informations soit pour dfaire, soit pour refaire une mise jour :
Refaire toutes les transactions valides (en descendant dans le LOG)
Dfaire toutes les transactions non valides (en remontant dans le LOG)
Le Checkpoint avec UNDO/REDO consiste a :
crire <START CKPT (T1, ...Tn)> ou les Ti sont les transactions actives (pas de COMMIT)
Flush LOG,
Ecrire sur le disque (vider les tampons) les mises jour de toutes les transactions actives (valides ou non)
termines avant le Checkpoint.
Ecrire <END CKPT>
Flush LOG.
19