Documente Academic
Documente Profesional
Documente Cultură
et SGBD relationnels
Gilles SIMON
Maître de conférences , UHP Nancy 1
Loria, bureau B162
E-mail : gsimon@loria.fr
http://www.loria.fr/~gsimon
Principales références
2
CAAI2 La méthode d'analyse Merise
Plan du cours
9
CAAI2 La méthode d'analyse Merise
Exemple
Schéma de la relation Etudiant :
Etudiant(no,nom,prénom,âge)
attribut
Extension de la relation Etudiant :
12 Blanc M ichèle 20
1 Noir Pascal 23
4 Rouge François 22
8 Tata Alain 22
10
CAAI2 La méthode d'analyse Merise
Risques
Relation Produit
prod_id libellé pu qte dep_id adr volume
p1 K7 23.5 300 1 Nancy 9000
p1 K7 23.5 500 2 Laxou 6000
p3 Vis 10 900 4 Nancy 2000
11
CAAI2 La méthode d'analyse Merise
Solutions
12
CAAI2 La méthode d'analyse Merise
Les dépendances fonctionnelles
Un attribut ou une liste d'attributs Y dépend
fonctionnellement d'un attribut ou d'une liste d'attributs X
dans une relation R, si étant donnée une valeur de X, il ne
lui est associé qu'une seule valeur de Y dans toute
instance de R. On
X note
→
R
Y une telle dépendance.
Exemples :
prod_id → libellé
prod_id → pu
dep_id → adr, volume
prod_id, dep_id → qte
13
CAAI2 La méthode d'analyse Merise
Propriétés des dépendances
fonctionnelles
(F6) Décomposition : X
→ Y ∧Z ⊆Y ⇒ X
→
R R
Z
14
CAAI2 La méthode d'analyse Merise
Typologie des dépendances
fonctionnelles
Une dépendance X
→
R
Y est :
– triviale si Y ⊆ X
X
– élémentaire si pour tout X' ⊂ X, la dépendance fonctionnelle '
→
R
Y
n'est pas vraie (Y ne dépend pas fonctionnellement d'une
partie de X)
– canonique si sa partie droite ne comporte qu'un seul attribut
– directe si (i) elle est élémentaire et si (ii) Y ne dépend pas transitivement
de X
Exemples :
– prod_id, libelle → libelle ??
– prod_id, libelle → pu ??
– prod_id, dep_id → qte ??
15
CAAI2 La méthode d'analyse Merise
Clé d'une relation
Exemple :
Personne(id, nom, les_diplômes) où les_diplômes est l'ensemble
des diplômes obtenus par une personne n'est pas en 1NF
Personne(id, nom) est en 1NF
17
CAAI2 La méthode d'analyse Merise
Deuxième forme normale
2NF Une relation R est dite en deuxième forme normale si
(i) elle est en 1NF et (ii) tout attribut n'appartenant pas à
une clé ne dépend pas d'une partie de la clé de R
Exemple :
Stock(prod_id, dep_id, libellé, qte) n'est pas en 2NF car
25
CAAI2 La méthode d'analyse Merise
Exemple
adresse âge
26
CAAI2 La méthode d'analyse Merise
Typologie des associations
x-1 y-1
A R B
Cardinalité : couple (x,y)
x et y exprimant
1-1 (one-to-
respectivement le nombre
minimum et maximum de fois one)
qu'une occurrence du type x-1 y-n
A R B
d'entité peut participer au type
d'association
1-n (one-to-many)
y-m x-n
A R B
n-m (many-to-many)
27
CAAI2 La méthode d'analyse Merise
Typologie des associations
B B A B
A A
A B A B A B
A A A B
B B
A B A B A B
28
CAAI2 La méthode d'analyse Merise
Exemples
no_sécu nom date_édition no_feuille
prénom montant
id nom immat marque
prénom couleur
date_achat
adresse âge
0-n 0-n
no_étu Etudiant Inscrit Cours
id pnom pprénom
Personne
0-1 0-1
femme mari
Conjoint
30
CAAI2 La méthode d'analyse Merise
Entités faibles
Entité faible : entité sans identifiant propre
N’existe qu’en référence à une autre entité dite
identifiante
L’association qui les unit est dite association identifiante
L’entité faible a une cardinalité 1-1 sur son association
identifiante
Exemple :
numOu titre éditeur numEx dateAchat
31
CAAI2 La méthode d'analyse Merise
Spécialisations
Définition d'une relation de sous-classe entre une entité
super-classe et une ou plusieurs entités sous-classes
Exemple : #id nom prénom adresse
Employé
S S Disjointes :
d d ∀i∀j , i ≠ j , Ci ∩ C j = { }
ou
C1 Cn C1 Cn
A recouvrement :
∀i∀j , i ≠ j , Ci ∩ C j ≠ { }
Disjointe partielle Disjointe totale
S S Totales :
S = i =1, n
Ci
ou
Partielles :
C1 Cn C1 Cn Ci ⊂ S
i =1, n
A recouvrement A recouvrement total
partiel 33
CAAI2 La méthode d'analyse Merise
Schéma E/A : Quelques règles
à respecter
34
CAAI2 La méthode d'analyse Merise
Passage d'un schéma E/A à un
schéma relationnel (1/2)
Cas des types d'entités :
– transformer toute entité E en une relation RE
– les attributs de RE sont les attributs de E
– la clé primaire de RE est un des identifiants de E
Exemple :
id nom
prénom
35
CAAI2 La méthode d'analyse Merise
Passage d'un schéma E/A à un
schéma relationnel (2/2)
36
CAAI2 La méthode d'analyse Merise
Passage d'un schéma E/A à un
schéma relationnel
Exemple 1
no_sécu nom date_édition no_feuille
prénom montant
37
CAAI2 La méthode d'analyse Merise
Passage d'un schéma E/A à un
schéma relationnel
Exemple 2
id nom immat marque
prénom couleur
date_achat
38
CAAI2 La méthode d'analyse Merise
Passage d'un schéma E/A à un
schéma relationnel
Exemple 3
adresse âge
0-n 0-n
no_étu Etudiant Inscrit Cours
39
CAAI2 La méthode d'analyse Merise
Passage d'un schéma E/A à un
schéma relationnel
Exemple 4
id pnom pprénom
Personne
Personne(id, pnom, pprenom, id_conjoint)
0-1 0-1
où id_conjoint est un synonyme de id
Conjoint
40
CAAI2 La méthode d'analyse Merise
Passage d'un schéma E/A à un
schéma relationnel
Cas des spécialisations
– créer une relation pour chaque entité
– les attributs de chaque relation sont les attributs de
l'entité correspondante + la clé de la super-classe
id nom prénom adresse
– Elaboration du SCT
43
CAAI2 La méthode d'analyse Merise
Le diagramme de flux
44
CAAI2 La méthode d'analyse Merise
Exemple de diagramme de flux
Frontière de l'étude
Cotisations
Adhésion
Paiement
Déclaration ASSURÉ
Véhicule
Avis-rectification
Facture-garage
ASSURANCE GARAGE
Règlement Facture
Demande expertise
EXPERT
Retour expertise
Honoraires
45
CAAI2 La méthode d'analyse Merise
Le graphe de précédence
Montre les dépendances temporelles entre les types
d'informations
Exemple :
Déclaration
Retour expertise
Facture-garage
Règlement
46
CAAI2 La méthode d'analyse Merise
Elaboration du schéma
conceptuel des traitements
47
CAAI2 La méthode d'analyse Merise
Représentation graphique du
modèle des traitements
Type Type
d'événement d'événement
Condition de synchronisation
Nom de la
synchronisation
Type Type
d'événement d'événement
48
CAAI2 La méthode d'analyse Merise
Exemple de SCT
Evt3
Condition locale C1 de S2 Evt2
Arrivée a.no_dossier = b.no_dossier et Arrivée
Evt0 Retour facture
déclaratio b.no_dossier = c.no_dossier d'expertise réparation
n
a s
b c
a et b et c et C1
S1
S2
Ouvrir_dossier
Régler_sinistre
[durée = 4mn] [durée = 5mn]
OK Erreur
Toujours
Evt4 Evt5
Evt1
Demande Avis de
Dossier Avis de Dossier
rectificatio Envoi
d'expertise ouvert clos
n chèque règlement
Evt6 Evt7 Evt8
49
CAAI2 La méthode d'analyse Merise
Type d'événement
Description lexicale :
– nom et message
– identifiant des occurences
– fréquence d'apparition au cours d'une période donnée
– capacité (nb max d'occurences que le SI peut prendre en
compte au cours d'une période)
– liste des synchronisations auxquelles il participe et des
opérations qu'il peut déclencher
50
CAAI2 La méthode d'analyse Merise
Exemple de type d'événement
Evénement Arrivée déclaration (Evt0 )
– message : informations figurant sur la déclaration
– identifiant : le couple (no de l'assuré, date d'arrivée de la
déclaration)
– fréquence : 50 par jour
– capacité : 55 par jour
– participe à la synchronisation S1 du type d'opération
Ouvrir_dossier
Description lexicale :
– nom et rôle
– durée
– type(s) d'événements qui conditionnent son déclenchement
(entrées)
– type(s) d'événements produits (sorties)
– si la production des événements est conditionnelle, expliciter
la condition de production de chaque événement
– action réalisée
52
CAAI2 La méthode d'analyse Merise
Exemple de type d'opération
Opération Ouvrir_dossier
– Rôle : Vérifie une déclaration et initialise l'expertise
– Durée : 10 minutes
– Evénements en entrée : Evt0
– Evénements en sortie : (Evt4 et Evt1) ou Evt5
– Action :
si déclaration_OK
alors Ouvrir un dossier de sinistre (Evt1)
Faire une demande d'expertise de ce dossier (Evt4)
sinon Renvoyer la déclaration à l'assuré (Evt5)
fsi
53
CAAI2 La méthode d'analyse Merise
Type de synchronisation
Description lexicale :
– nom
– liste des types d'événements qui participent à la synchronisation
– éventuellement, condition de synchronisation portant sur les
types d'événements
– condition locale : précise, en présence de plusieurs occurrences
d'un type d'événements, laquelle choisir
– délai de synchronisation : temps max séparant le moment où la
synchronisation est activable et celui où elle est activée
– durée limite : temps max d'attente entre l'arrivée du premier
événement et celle du dernier
54
CAAI2 La méthode d'analyse Merise
Exemple de type de
synchronisation
Synchronisation S2
– Condition : Evt1 (a) ^ Evt2 (b) ^ Evt3 (c) ^ C1
– Condition locale C1 :
a.no_dossier = b.no_dossier ^ b.no_dossier = c.no_dossier
et "premier arrivé premier servi"
– Délai de synchronisation : Trois jours
– Durée limite : douze mois
55
CAAI2 La méthode d'analyse Merise
Nombre d'occurences
E1 E2 1 événement de type E1
2 événements de type E2
a b (2)
a et b
S1
OP1 OP2
C1 C2 OP3
(3) (2)
R1 R2
3 résultats de type R1
2 résultats de type R2
56
CAAI2 La méthode d'analyse Merise
Structures de base d'un SCT
E1 E1 E2
E1
E1 E2 E3
OP1 OP1 OP2
OP1
ou
E2 E3 E3 E4
E2 E3
OP1
E4
OP2 OP3 OP3
OP2 OP3
61
CAAI2 La méthode d'analyse Merise
Identification des procédures
62
CAAI2 La méthode d'analyse Merise
Exemple
Nom No automa- Mode Localisation/
tisable ? affectation
63
CAAI2 La méthode d'analyse Merise
Analyse détaillée des
procédures
Décrire :
Fonction vérifier_déclaration
Données
d : déclaration
Début
Si σno_ass = d.no_police(Assuré) = {}
Alors assuré_inconnu
Sinon déclaration_ok
Fin
65
CAAI2 La méthode d'analyse Merise
Enchaînement des procédures :
exemple
Date au Date au
Enchaînement des procédures
plus tôt plus tard
Déclaration
vérifiéee
J J
P2 Attribuer_no_dossier
J J
P3 Enregistrer_dossier
Dossier
J J+2 ouvert
P4 Désigner_Expert
J J+3 P5 Transmettre_dossier
Dossier
expédié
66
CAAI2 La méthode d'analyse Merise
Adaptation des modèles
logiques
67
CAAI2 La méthode d'analyse Merise
Evaluation des volumes (1/2)
Taille d'une relation représentant un type d'entité :
– attribut : nombre de caractères nécessaires à sa représentation
– n-uplet : somme des tailles de ses types d'attributs
– relation : produit du nombre d'occurrences du type d'entité par
la taille du n-uplet de la relation
Exemple :
Attribut Type Taille
no_ass entier 10 Si 10000 assurés sont attendus sur
nom_ass chaîne 30 une période de deux ans,
adr_ass chaîne 40 l'estimation de la taille de la
te_ass chaîne 10
relation est de 10000×
no_agence entier 10
(10+30+40+10+10) ≈ 1M o
68
CAAI2 La méthode d'analyse Merise
Evaluation des volumes (2/2)
Exemple :
69
CAAI2 La méthode d'analyse Merise
Optimisation des volumes
de compression et de décompression
70
CAAI2 La méthode d'analyse Merise
Evaluation du coût des
traitements
Dépend du type des opérations de base (recherche,
insertion, suppression, modification)
72
CAAI2 La méthode d'analyse Merise
Coût de la recherche d'un n-
uplet (2/2)
Remarques :
– coût d'un accès direct < coût d'un accès séquentiel
Insertion :
– écriture dans la base
Coût :
– 1 écriture si la relation n'est pas ordonnée
Coût :
– coût d'une recherche
Fusion de relations
77
CAAI2 La méthode d'analyse Merise
Rappel sur les index
Index : structure de données qui associe à une valeur d'un
attribut, appelé clé de l'index, la ou les adresses des
tuples contenant cette valeur
Possible pour un attribut non
clé de la relation
Exemple :
1 1
3 3
1 7
5
1
7
12
7 7
12 5
1
Espace index Espace données
78
CAAI2 La méthode d'analyse Merise
Choix des index et des critères
d'ordre
Opérations d'interrogation :
attributs de sélection
79
CAAI2 La méthode d'analyse Merise
Redondance et dénormalisation
de relations
Exemple : Expert
chargé du
Expert(no_exp, nom_exp, ...) dossier
Sinistre(no_dossier, ..., no_exp)
Si le nom de l'expert est accédé à chaque référence à un sinistre
→ Sinistre(no_dossier, ..., no_exp, nom_exp)
Viole la 3NF de Sinistre, mais permet de faire l'économie de
l'opération de jointure pour obtenir le nom
80
CAAI2 La méthode d'analyse Merise
Ajout de nouveaux types
d'attributs
Exemple :
" L'expert désigné pour un dossier de sinistre est celui qui a le
moins de dossiers en cours d'instruction "
→ nécessite le parcours de la relation sinistre avec comptage et
recherche du no_exp ayant le plus petit nombre de dossiers
puis accès à la relation Expert pour connaître ses coordonnées
→ Expert(no_exp, nom_exp, ..., nb_dossiers-en_cours)
RE1(clé1, ...)
RE2(clé2, ...)
→ si jointures très fréquentes de RE1 et RE2, fusionner en
une seule relation
82
CAAI2 La méthode d'analyse Merise
Fragmentation verticale de
relations
83
CAAI2 La méthode d'analyse Merise
Exemple : coût de l'opération
Ouvrir_dossier
Pour 10000 dossiers et 20 experts :
P1 Vérifier _déclaration Recherche de l'assuré → 10000/2 accès
88
CAAI2 La méthode d'analyse Merise
Confidentialité
Tout utilisateur d'un SGBD doit posséder un compte et
un mot de passe
Utilisateur privilégié : l'administrateur
– a le droit de créer des comptes
– d'allouer des privilèges d'accès
89
CAAI2 La méthode d'analyse Merise
Deux niveaux de privilèges
Privilèges de niveau compte :
définissent pour un compte, le type de commandes autorisées sur des types
d'objets (délivrés par l'administrateur) : CREATE {TABLE|VIEW}, DROP
{TABLE|VIEW}, …
Privilèges de niveau objet :
spécifient le type des commandes autorisées sur une base, une relation, une vue
ou une procédure stockée (délivrés par le propriétaire de l'objet) ; doivent être
compatibles avec les privilèges détenus au niveau compte
Propagation de privilèges
Possibilité de transmettre ses privilèges sur une relation à un autre compte
Rôle : ensemble nommé de privilèges
90
CAAI2 La méthode d'analyse Merise
Privilèges (Sybase) (1/2)
91
CAAI2 La méthode d'analyse Merise
Privilèges (Sybase) (2/2)
92
CAAI2 La méthode d'analyse Merise
Privilèges (Oracle) (1/2)
(REVOKE … FROM)
93
CAAI2 La méthode d'analyse Merise
Privilèges (Oracle) (2/2)
94
CAAI2 La méthode d'analyse Merise
Exemples (Sybase et Oracle)
Administrateur :
GRANT CREATE TABLE TO ELLE
REVOKE CREATE TABLE FROM ELLE
Utilisateur u1:
GRANT SELECT ON u1.Depot TO u2
REVOKE SELECT ON u1.Depot FROM u2
95
CAAI2 La méthode d'analyse Merise
Rôles Sybase
Exemples de rôles :
– L'opérateur (oper) a la charge des sauvegardes et restaurations des
bases
– L'officier de sécurité (sso) a les droits pour créer des comptes, réaliser
l'audit, modifier les mots de passe, attribuer et révoquer le rôle sso
– L'administrateur système (sa) : installation de serveurs SQL, gestion
des espaces disque, création de bases, modification et suppression de
comptes, attribution et révocation du rôle sa :
Attribuer un rôle
sp_role :
"grant", sa_role, A-toi
sp_role "revoke", sa_role, A-Elle
set role "sa_role", on [off]
96
CAAI2 La méthode d'analyse Merise
Rôles Oracle
Exemples de rôles :
– Rôle dba: tous les privilèges (data base administrateur)
– Rôle connect: ouvrir une session, créer des tables, etc.
Supprimer un rôle :
revoke un_role from gilles
97
CAAI2 La méthode d'analyse Merise
Les contraintes d'intégrité (CI)
98
CAAI2 La méthode d'analyse Merise
Typologie des contraintes
d'intégrité (1/2)
99
CAAI2 La méthode d'analyse Merise
Typologie des contraintes
d'intégrité (2/2)
Les contraintes inter-relations : dépendances référentielles
ou existentielles ("tout numéro de produit figurant dans la relation
stock doit être présent dans la relation produit")
100
CAAI2 La méthode d'analyse Merise
Création d’une table
(Sybase et Oracle)
CREATE TABLE Depot
(dep# INT NOT NULL,
adr VARCHAR(50),
capacite INT,
PRIMARY KEY dep#,
CHECK (capacite>1000))
CREATE TABLE Stock
(prod# INT,
dep# INT CHECK (dep# BETWEEN 10 AND 50),
qte INT DEFAULT 0 CONSTRAINT ctr_qte,
PRIMARY KEY (prod#, dep#),
FOREIGN KEY (prod#) REFERENCES Produit(prod#), /* tout
tuple
de Stock correspond a un produit existant dans Produit
*/
FOREIGN KEY (dep#) REFERENCES Depot(dep#),
CHECK (qte>=0))
101
CAAI2 La méthode d'analyse Merise
Règles et valeurs par défaut
(Sybase)
CREATE DEFAULT Ville_Par_Defaut AS "Nancy" /* definition
d'une valeur par defaut */
sp_bindefault Ville_Par_Defaut, "Depot.adr" /*
attachement de la valeur par defaut a l'attribut
Depot.adr */
CREATE RULE Regle_No_Prod AS @No_Produit IN (20, 30, 40,
50) /* definition d'une regle */
sp_addtype Type_No_Prod, INT, "NOT NULL" /* definition
d'un type pouvant etre utilise dans un CREATE TABLE
*/
sp_bindrule Regle_No_Prod, "Type_No_Prod" /* attachement
de la regle a tout attribut de type Type_No_Produit
*/
102
CAAI2 La méthode d'analyse Merise
Les déclencheurs (triggers)
Trigger : procédure associée à une relation qui entre en
action quand un type d'événement survient
Créé par le propriétaire de la relation ou un utilisateur
ayant le privilège CREATE TRIGGER .
Les triggers permettent de :
– maintenir des ci complexes, ce que ne permettent pas les
contraintes déclaratives spécifiées lors de la création d’une
table
– publier des informations concernant divers événements,
– etc…
103
CAAI2 La méthode d'analyse Merise
Triggers Sybase
104
CAAI2 La méthode d'analyse Merise
Triggers Oracle (1/4)
Triggers after ou before
Triggers de niveau instruction ou de niveau ligne
Syntaxe :
CREATE [OR REPLACE] TRIGGER nom_trigger
{BEFORE | AFTER | INSTEAD OF} evenement
[clause_referencing] [WHEN condition]
[FOR EACH ROW]
[DECLARE …]
BEGIN
…
[EXCEPTION …]
END [nom_trigger];
105
CAAI2 La méthode d'analyse Merise
Triggers Oracle (2/4)
106
CAAI2 La méthode d'analyse Merise
Triggers Oracle (3/4)
107
CAAI2 La méthode d'analyse Merise
Triggers Oracle (4/4)
Exemple :
CREATE SEQUENCE inc START WITH 8 INCREM ENT BY 1;
INSERT INTO CATEGORIES (nom_categorie, description) VALUES (‘new cat’, ‘desc cat’);
108
CAAI2 La méthode d'analyse Merise
Sécurité de fonctionnement et
accès concurrents
Début
x ← Lire(C 1)
Pb : Si le programme s'arrête
x← x-m
avant l'écriture de y dans C 2, la
C 1 ← Ecrire(x)
base entre dans un état incohérent
y ← Lire(C 2)
y← y+m
C 2 ← Ecrire(y)
Fin
Actions de T1 Actions de T2
t11 : AT1 ← Lire(A) t21 : AT2 ← Lire(A)
t12 : AT1 ← AT1 + 1 t22 : AT2 ← AT2 × 2
t13 : A ← Ecrire(AT1) t23 : A ← Ecrire(AT2 )
t14 : BT1 ← Lire(B) t24 : BT2 ← Lire(B)
t15 : BT1 ← BT1 + 1 t25 : BT2 ← BT2 × 2
t16 : B ← Ecrire(BT1) t26 : B ← Ecrire(BT2 )
Pb : chaque transaction satisfait la contrainte, mais leur exécution
concurrente peut la violer
Ex : <t21; t22; t11; t12; t23; t13; t14; t15; t16; t24; t25; t26>
112
CAAI2 La méthode d'analyse Merise
non permanence des
modifications
Non répétabilité des lectures
Transaction T1 Transaction T2
a ← Lire(A)
b ← Lire(A)
Pb : les impressions de T2
Imprimer(b)
produiront des valeurs
a ← a + 100
A ← Ecrire(a)
différentes
b ← Lire(A)
Imprimer(b)
113
CAAI2 La méthode d'analyse Merise
non permanence des
modifications
Tuples "fantômes"
Transaction T1 Transaction T2
S ← Lire(A), A = {a | a < 4000} V ← Lire(A), A={a | a < 4000}
Imprimer(V)
Pour chaque s, s ∈ S : a = 5000
A ← Ecrire(S)
V ← Lire(A), A={a | a < 4000}
Imprimer(V)
Pb : La deuxième impression de V rend un ensemble vide
116
CAAI2 La méthode d'analyse Merise
Utilisation de points de
sauvegarde
117
CAAI2 La méthode d'analyse Merise
Exemple
Transaction ComprendreLesTransactions à partir
des tables suivantes :
118
CAAI2 La méthode d'analyse Merise
Transactions imbriquées
BEGIN TRAN
...
BEGIN TRAN
...
BEGIN TRAN
...
COMMIT/ROLLBACK TRAN
...
COMMIT/ROLLBACK TRAN
...
COMMIT/ROLLBACK TRAN
119
CAAI2 La méthode d'analyse Merise
Le journal des transactions
120
CAAI2 La méthode d'analyse Merise
Le journal des transactions
Pour chaque transaction T, le journal comporte :
– <début_transaction, identification de T>
– <écriture, identification de T, donnée concernée, ancienne valeur,
nouvelle valeur>
– <lecture, identification de T, donnée concernée>
– <COMMIT, identification de T>
121
CAAI2 La méthode d'analyse Merise
Reprise en cas d'accident
Reprise (recovery) : reconstruire un état cohérent de la base à
partir du passé, cet état devant être le plus proche possible de
l'instant où s'est produit l'incident → utilisation du journal des
transactions
123
CAAI2 La méthode d'analyse Merise
Plan d'exécution sérialisable
Un plan d'exécution P des transactions T1 , ..., Tn est une
succession s'il existe une permutation ∏ de (1, ..., n) telle que P
= <T ∏(1) ; ...; T ∏(n)>
Une exécution des transactions T1, ..., Tn est sérialisable ssi elle
donne, pour chaque Ti, le même résultat qu'une succession
124
CAAI2 La méthode d'analyse Merise
Contrôle de la concurrence : la
technique du verrouillage
Granule = unité d'accès (BD, relation, tuple, attribut ...)
Verrou binaire : un granule est accessible ou inaccessible
Verrou partagé et verrou exclusif : en lecture un verrouillage en
mode partagé (share) permet des accès multiples à un granule. Par contre,
en écriture, il est nécessaire de verrouiller le granule en mode exclusif
(exclusive)
Verrou d'intention ou verrou de mise à jour (update) : verrou de
lecture avec intention d'écriture
verrous demandés sur le même granule
Compatibilité des verrous : Share Exclusive Update
verrous Share oui non non
apposés sur Exclusive non non non
un granule Update oui non non
125
CAAI2 La méthode d'analyse Merise
Les quatre niveaux d'isolation
SQL-92 (1/2)
Niveau 0 (READ UNCOMMITTED)
Une transaction T peut lire des objets modifiés par une autre
transaction, pas de verrou en mode lecture
→ risque de lectures impropres, lectures non reproductibles
et tuples fantômes
126
CAAI2 La méthode d'analyse Merise
Les quatre niveaux d'isolation
SQL-92 (2/2)
Niveau 3 (SERIALIZABLE)
= niveau 2, sauf : possibilité de poser des verrous sur un ensemble
d'objets
130
CAAI2 La méthode d'analyse Merise
Les verrous : problèmes
Inter-blocage
131
CAAI2 La méthode d'analyse Merise
Exemple Sybase
begin tran
begin tran
set isolation level 0
set isolation level 0
<111> select * from T
insert into T values
<111,12> select * from T
(12)
set isolation level 1
commit tran
begin tran <111,12>
insert into T values select * from T
Attente commit
select * from T
(34) <111,12,34>
commit tran select * from T
... Verrou
begin tran select * from T at sur T
Verrou
isolation serializable Attente
sur V select * from V for
insert into V values sur V
Attente update
sur T temps(56)
insert into T values
Interblocage !
select * from V 132
CAAI2 (78) La méthode d'analyse Merise
Solutions pour l'inter-blocage
La prévention : imposer à toute transaction de verrouiller en
avance tous les éléments dont elle a besoin (n'apposer aucun
verrou si un de ces éléments n'est pas libre)
La détection : tester périodiquement si une situation d'inter-
blocage s'est produite (solution implémentée dans Sybase et
Oracle) :
– détection de cycles dans un graphe d'attente, dont les nœuds
représentent les transactions et les arcs la relation est_en_attente_de
– si une telle situation se produit, une des transactions impliquée est
avortée
T1 T3 - T1 détient R1 et attend R2
- T2 détient R2 et attend R3
T2 - T3 détient R3 et attend R1
133
CAAI2 La méthode d'analyse Merise
Solutions pour la famine
134
CAAI2 La méthode d'analyse Merise
2.2 JDBC
JDBC
Objectifs :
– Requêtes SQL
136
CAAI2 La méthode d'analyse Merise
Architectures 2-tier et 3-tier
Architecture 2-tier :
J
D
Application TCP / Protocole propriétaire
B SGBDR
Java C
Architecture 3-tier :
Serveur J
D
Application TCP / RMI, CORBA middleware
B SGBDR
Java Java
C
137
CAAI2 La méthode d'analyse Merise
Fonctionnement
(driver)
DB2, …
139
CAAI2 La méthode d'analyse Merise
Les pilotes JDBC (2/4)
140
CAAI2 La méthode d'analyse Merise
Les pilotes JDBC (3/4)
Type 3 : net-protocol all-Java driver
142
CAAI2 La méthode d'analyse Merise
Solutions proposées par Oracle
(1/3)
Serveur hébergeant
Interface de la base Oracle 9i
programmation JDBC
Pilote Javasoft
utilisant ODBC
Pilote ODBC
pour Oracle
143
CAAI2 La méthode d'analyse Merise
Solutions proposées par Oracle
(2/3)
144
CAAI2 La méthode d'analyse Merise
Solutions proposées par Oracle
(3/3)
Applet Java T P
H T
JDBC thin
Oracle Net
145
CAAI2 La méthode d'analyse Merise
Accès aux données
Charger le driver
Connexion à la base
Exécution de la requête
146
CAAI2 La méthode d'analyse Merise
Chargement du driver
La classe DriverManager du package java.sql gère
l'ensemble des pilotes disponibles et se charge d'en
sélectionner un qui convienne lors de la connexion à une BD
Utiliser la méthode forName de la classe Class :
Class.forName("com.sybase.jdbc.SybDriver");
Exemple :
String url = "jdbc:sybase:Tds:zeus.scinfo.uhp-
nancy.fr:5025";
Ouverture de la connexion :
Connection con = DriverManager.getConnecion
(url, user, password);
148
CAAI2 La méthode d'analyse Merise
Création d'un statement
3 types de statements :
149
CAAI2 La méthode d'analyse Merise
Exécution d'une requête (1/2)
3 types d'executions :
ResultSet
150
CAAI2 La méthode d'analyse Merise
Exécution d'une requête (2/2)
Exécution de la requête :
String myQuery = "SELECT prenom, nom,
email " +
"ORDER BY nom"
ResultSet rs = stmt.executeQuery(myQuery);
151
CAAI2 La méthode d'analyse Merise
Lecture des résultats (1/2)
On peut connaître :
(…)
(…)
157
CAAI2 La méthode d'analyse Merise
Exemple de requête
précompilée
(…)
PreparedStatement stmt = con.prepareStatement("select * from
client where nom = ? and prenom = ?");
stmt.setString(1,"Titi");
stmt.setString(2,"Lala");
ResultSet rs= stmt.executeQuery();
while (rs.next()) {
String n = rs.getString(1); // nom
String p = rs.getString(2); // prenom
int a = rs.getInt(3); // age
System.out.println("nom: "+n+" prenom: "+p+"age: "+a);}
(…)
158
CAAI2 La méthode d'analyse Merise
Exemple d'accès aux méta-
données
(…)
ResultSet rs = stmt.executeQuery("select * from
authors");
ResultSetMetaData rsmd = rs.getMetaData();
int nbColonnes = rsmd.getColumnCount();
for (int i = 1; i <= nbColonnes; i++) {
String typeColonne = rsmd.getColumnTypeName(i);
String nomColonne = rsmd.getColumnName(i);
System.out.println("la colonne "+i+" de nom
"+nomColonne+ " est du type "+typeColonne);
}
(…) 159
CAAI2 La méthode d'analyse Merise
2.3 PHP
PHP
PHP est un langage interprété, exécuté du côté serveur
Principaux atouts :
– gratuit et open source
– simplicité d’écriture des scripts
– possibilité d ’inclure le script PHP au sein d’une page html
– simplicité d’interfaçage avec des bases de données (MySql,
Oracle, Sybase, dBase, Informix etc.)
– Intégration au sein de nombreux serveurs web (Apache,
M icrosoft IIS ...)
161
CAAI2 La méthode d'analyse Merise
Interprétation du code par le
serveur
Instructions incluses dans un code HTML à l ’aide de
balises spéciales (<?php et ?>)
Le fichier HTML+PHP doit avoir l’extension .php
Principe :
– le serveur lit le fichier PHP
– des qu’il rencontre une balise PHP, il passe en mode PHP
– chaque instruction est transmise à l’interpréteur qui l'exécute
– le serveur transmet le résultat au client (dans le fichier
HTM L)
Le script PHP n’est jamais visible par l’utilisateur !
162
CAAI2 La méthode d'analyse Merise
Un exemple simple
<html>
<head><title>Exemple</title>/</head>
<body>
<?php ; à la fin de chaque
instruction PHP
echo "Hello world";
?>
</body>
</html>
163
CAAI2 La méthode d'analyse Merise
Variables et tableaux
Les variables commencent toujours par $
Les tableaux :
$tab[0][0] = 12;
$tab[0][1] = "php"
$tab[1][0] = 1234.56
164
CAAI2 La méthode d'analyse Merise
Opérateurs
Opérateurs de calcul : + - * / =
Opérateurs d’assignation : += -= *= /= %= |= ^=
&= .=
Opérateurs d’incrémentation : ++ --
if (condition realisee) {
liste d ’instructions
}
elseif (autre condition realisee) {
autre serie d ’instructions
}
...
else (derniere condition realisee) {
derniere serie d ’instructions
}
166
CAAI2 La méthode d'analyse Merise
Structures conditionnelles (2/4)
L’instruction switch
switch (variable) {
case valeur1:
liste d ’instructions
break;
case valeur2:
liste d ’instructions
break;
...
default:
liste d ’instructions
break;
}
167
CAAI2 La méthode d'analyse Merise
Structures conditionnelles (3/4)
La boucle for
Ex :
168
CAAI2 La méthode d'analyse Merise
Structures conditionnelles (4/4)
L ’instruction while
liste d ’instructions
169
CAAI2 La méthode d'analyse Merise
Les fonctions (1/1)
Declaration :
function nom_de_la_fonction(type1 argument1,
type2 argument2, ...) {
liste d ’instructions
}
Renvoi d’une valeur :
return valeur;
Appel :
[$retour = ] nom_de_la_fonction(argument1,
argument2, ...)
170
CAAI2 La méthode d'analyse Merise
Les fonctions (2/2)
Passage de paramètres par référence : faire précéder la
variable du caractère &
Exemple :
<?
function dire_texte($qui, &$texte) {
$texte = "Bienvenue $qui";
}
$chaine = "Bonjour ";
dire_texte("cher phpeur", $chaine);
echo $chaine; // affiche "Bienvenue cher phpeur"
?>
171
CAAI2 La méthode d'analyse Merise
Interfaçage avec un SGBD
(Sybase)
Les principales étapes :
– se connecter au serveur de la base de données :
sybase_connect
– se déconnecter : sybase_close
172
CAAI2 La méthode d'analyse Merise
Un exemple complet (1/2)
<html>
<head> $user = votre_login;
<title>Liens</title> $bdd = Nom_de_la_base_de_donnees;
<head> $password = Mot_de_passe;
<body>
// Connexion au serveur
<table border="1" cellpadding="0"
cellspacing="0"> sybase_connect($host, $user,$password)
or
<tr><th>Nom du site</th>
die("erreur de connexion au serveur");
<th>URL</th></tr>
sybase_select_db($bdd) or die("erreur
de
<?php connexion a la base de donnees");
174
CAAI2 La méthode d'analyse Merise
Exemple de réception des
variables d’un formulaire
Création et envoi du Reception du contenu
formulaire
<html> (fichier exemple.php)
<head>
<html>
<title>Formulaire</title>
<head>
</head>
<body> <title>Réception formulaire</title>
<p>Bonjour, quel est ton nom ? </head>
</p> <body>
<form method="post" <?php
action= "exemple.php">
echo "Bonjour ".$mavariable;
<input type="text"
?>
name="mavariable" value="Toto">
<input type="submit" value="OK"> </body>
</form> </html>
</body>
175
</html>
CAAI2 La méthode d'analyse Merise