Documente Academic
Documente Profesional
Documente Cultură
Mention Informatique
et Mention Mathmatiques Mineure Informatique
Bases de donnes relationnelles
Maude Manouvrier
Modlisation Entit/Association et UML (Vocabulaire)
Modle relationnel et passage au modle relationnel
Algbre relationnelle
Calcul relationnel
SQL / Embedded SQL / ODBC / JDBC
Dpendances fonctionnelles
Dcomposition de schma
Formes Normales
Maude Manouvrier - Univ. Paris Dauphine
Ouvrages de rfrence utiliss pour le cours :
T. Connoly, C. Begg et A. Strachan, Database Systems A Pratical
Approach to Desigh, Implementation and Management, 1998, ISBN: 0-
201-34287-1,
G. Gardarin, Bases de Donnes - objet/relationnel, Eyrolles, 1999, ISBN:
2-212-09060-9, disponible la BU 005.74 GAR
R. Ramakrishnan et J. Gehrke, Database Management Systems, Second
Edition; McGraw-Hill, 2000, ISBN: 0-07-232206-3, disponible la BU
055.7 RAM
A. Silberschatz, H.F. Korth et S. Sudarshan, Database System Concepts,
McGraw-Hill, 1996, ISBN: 0-07-114810-8, disponible la BU 005.7 DAT
J.D. Ullman et J. Widom, A first Course in Database Systems, Prentice
Hall, 1997, ISBN: 0-13-887647-9, disponible la BU 005.7 ULL
BIBLIOGRAPHIE
2
Maude Manouvrier - Univ. Paris Dauphine
Autres ouvrages de rfrence, disponibles la BU :
C.J. Date, An Introduction to Database Systems, Addison Wesley
C.J. Date, A Guide to SQL Standard, Addison Wesley
R.A. El Masri et S.B. Navathe, Fundamentals of Database Systems, Prentice Hall
Ouvrages pdagogiques contenant des exercices corrigs :
Philip J. Pratt, Initiation SQL - Cours et Exercices corrigs, Eyrolles, 2001
BU : 005.72 SQL
Christian Soutou, De UML SQL - Conception de bases de donnes, Eyrolles,
2002 BU : 005.72 SOU
F. Brouard, C. Soutou , SQL (Synthse de cours et exercices corrigs). Pearson
Education 2005 BU : 005.72 SQL
Christian Soutou, SQL Pour Oracle (avec exercices corrigs), Eyrolles, 2005
BU 005.72 SOU
Nicolas Larousse, Cration de bases de donnes, Coll. Synthex, Pearson
Education, 2006
BIBLIOGRAPHIE
3
Chap. I - Introduction
Base de donnes :
collection d'informations ou de donnes qui existent sur une longue
priode de temps [UW97] et qui dcrivent les activits d'une ou
plusieurs organisations [RG00]
ensemble de donnes modlisant les objets d'une partie du
monde rel et servant de support une application informatique
[Gar99]
SGBD : Systmes de Gestion de Bases de Donnes
(DataBase Management Systems - DBMS)
ensemble de logiciels systmes permettant aux utilisateurs
d'insrer, de modifier, et de rechercher efficacement des donnes
spcifiques dans une grande masse d'informations (pouvant
atteindre plusieurs milliards d'octets) partage par de multiples
utilisateurs [Gar99]
4
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
SGBD
Principaux composants :
Systme de gestion de fichiers
Gestionnaire de requtes
Gestionnaire de transactions
Principales fonctionnalits :
Contrle de la redondance dinformation
Partage des donnes
Gestion des autorisations daccs
Vrifications des contraintes dintgrit
Scurit et reprise sur panne
5
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Abstraction des donnes
Niveau interne ou physique :
plus bas niveau
indique comment (avec quelles structures de donnes) sont
stockes physiquement les donnes
Niveau logique ou conceptuel :
dcrit par un schma conceptuel
indique quelles sont les donnes stockes et quelles sont leurs
relations indpendamment de limplantation physique
Niveau externe ou vue :
propre chaque utilisateur
dcrit par un ou plusieurs schmas externes
6
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Instances et schma
Instances de base de donnes :
donnes de la base un instant donn
manipules par un langage de manipulation de
donnes (DML- Data Manipulation Language)
Schma de base de donnes :
description de la structure des donnes
ensemble de dfinitions exprimes en langage
de description de donnes (DDL - Data
Definition Language)
7
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Petit historique
1960 : systmes de gestion de fichiers
1970 : dbut des SGBD rseaux et hirarchiques proches des systmes de
gestion de fichiers pas dinterrogation sans savoir o est l'information
recherche ("navigation") et sans crire de programmes
1970 : papier fondateur de CODD sur la thorie des relations
fondement de la thorie des bases de donnes relationnelles
INGRES Berkeley - langage QUEL
System R IBM San Jose - langages SEQUEL et QBE
1980 : Apparition des SGBD relationnels sur le march (Oracle, Ingres,
Informix, Sybase, DB2 )
1990 : dbut des SBGD orients objet (Gemstone, O
2
, Orion, Objectstore,
Versant, Matisse...).
Aujourdhui : relationnel-objet, semi-structur, multimdia ...
8
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Chap II - Modlisation
Mthodologie suivre pour modliser un problme
Dterminer les entits/classes et attributs :
entit/instance de classe = objet dcrit par de linformation
objet caractris uniquement par un identifiant = attribut
attribut multi-valu ou avec une association 1:N = entit ou instance
attacher les attributs aux ensemble dentits/classes qu'ils dcrivent le
plus directement
viter au maximum les identificateurs composites
Identifier les gnralisations-spcialisations/hritage
Dfinir les associations
liminer les associations redondantes
viter les associations n-aires
calculer les cardinalits de chaque association
9
Maude Manouvrier - Univ. Paris Dauphine
Modlisation Entit/Association
(Format Merise)
10
Chap. II - Modlisation
Un automobiliste possde
entre zro et N voitures
Une voiture a un et un
seul propritaire
Maude Manouvrier - Univ. Paris Dauphine
Modlisation UML
11
Chap. II - Modlisation
Un automobiliste possde
entre zro et N voitures
Une voiture a un et un
seul propritaire
Attention : petite libert prise avec UML, les attributs souligns ici ne correspondent
pas des attributs drivs mais aux identificateurs (pour ne pas les oublier lors du
passage au relationnel!!)
Maude Manouvrier - Univ. Paris Dauphine
12
Chap. II - Modlisation
Gnralisation/Spcialisation
(E/A - Merise)
Ensemble dentits
gnralisantes
Ensemble dentits
spcialises
Maude Manouvrier - Univ. Paris Dauphine
13
Chap. II - Modlisation
Hritage (UML)
Classe mre / Sur-classe
Classes drives ou filles / sous-classes
Maude Manouvrier - Univ. Paris Dauphine
14
Chap. II - Modlisation
Agrgat (E/A - Merise)
On peut nommer ou
non lagrgat
Maude Manouvrier - Univ. Paris Dauphine
15
Chap. II - Modlisation
Classe-Association (UML)
On peut nommer ou non
la classe-association
Maude Manouvrier - Univ. Paris Dauphine
16
Chap. II - Modlisation
Entit Faible (E/A - Merise)
Chaque salle a un
numro unique dans un
btiment donn
Ex. Salle 1 du btiment A
et Salle 1 du btiment C
Pour distinguer une salle
dune autre, il faut
connatre le btiment
auquel elle est rattache
Appartient
Maude Manouvrier - Univ. Paris Dauphine
17
Chap. II - Modlisation
Association qualifie (UML)
Chaque salle a un
numro unique dans un
btiment donn
Ex. Salle 1 du btiment A
et Salle 1 du btiment C
Pour distinguer une salle
dune autre, il faut
connatre le btiment
auquel elle est rattache
A
p
p
a
r
t
i
e
n
t
1
1
Maude Manouvrier - Univ. Paris Dauphine
18
Chap. II - Modlisation
Composition (UML)
Maude Manouvrier - Univ. Paris Dauphine
Contraintes
Contraintes dintgrit :
toutes rgles implicites ou explicites que doivent
suivre les donnes [Gar99]
Contraintes d'entit: toute entit doit possder un
identificateur
Contraintes de domaine : les valeurs de certains
attributs doivent tre prises dans un ensemble donn
Contraintes d'unicit : une valeur d'attribut ne peut pas
tre affecte deux fois deux entits diffrentes
Contraintes gnrales : rgle permettant de conserver
la cohrence de la base de manire gnrale
19
Chap. II - Modlisation
Maude Manouvrier - Univ. Paris Dauphine
Exemples de contraintes
Contraintes de domaine :
"La fonction dun enseignant lUniversit prend sa valeur
dans lensemble {vacataire, moniteur, ATER, MCF, Prof.,
PRAG, PAST}."
Contraintes d'unicit :
"Un dpartement, identifi par son numro, a un nom unique
(il ny a pas deux dpartements de mme nom)."
Contraintes gnrales :
"Un mme examen ne peut pas avoir lieu dans deux salles
diffrentes la mme date et la mme heure. "
20
Chap. II - Modlisation
Maude Manouvrier - Univ. Paris Dauphine
Dpendances fonctionnelles
Un attribut (ou un groupe d'attributs) Y dpend
fonctionnellement d'un attribut (ou groupe
d'attributs) X si :
tant donn une valeur de X, il lui correspond une
valeur unique de Y ( l'instant considr)
XY: Y dpend fonctionnellement de X
ou X dtermine Y
Dclaration des dpendances au niveau du schma
conceptuel
21
Chap. II - Modlisation
Maude Manouvrier - Univ. Paris Dauphine
Exemple de dpendances fonctionnelles
22
Chap. II - Modlisation
Marque, Type, Puissance, Anne Immatriculation
Type Marque
EnseignantID Nom, Prnom, Position
Nom, Prnom, Position, Enseignant_ID
Ex. Le type "Twingo" sera toujours
associ, dans la base de donnes, la
marque "Renault".
Immatriculation Marque, Type, Puissance, Anne
identificateur
Tous les autres attributs
Si un numro de tlphone est associ un seul enseignant :
Telephone Enseignant_ID
Maude Manouvrier - Univ. Paris Dauphine
Chap III - Modle relationnel
Domaine : ensemble de valeurs caractris par un nom
Relation : sous-ensemble du produit cartsien d'une liste de domaines
caractris par un nomunique
reprsente sous forme de table deux dimensions
colonne = un domaine du produit cartsien
un mme domaine peut apparatre plusieurs fois
ensemble de nuplets sans doublon
Attribut : une colonne dans une relation
caractris par un nom et dont les valeurs appartiennent un domaine
les valeurs sont atomiques
Nuplet : une ligne d'une relation
correspondant un enregistrement, c--d une entit/instance de classe
les nuplets d'une relation sont tous diffrents
23
Maude Manouvrier - Univ. Paris Dauphine
Exemple de relation
24
Chap. III - Modle relationnel
Nom dattribut
Nuplets ou tuples
La relation Enseignant
NSS Nom Prnom Fonction
273 Manouvrier Maude MCF
H
Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,
Tlphone 45 12 45 86 , Fax, Email, NumAnnes
[o
(Etudiant.Etudiant_ID =r.Etudiant_ID)
(Etudiant) ]
Chap. VI - Algbre relationnelle tendue
Mise jour du
tlphone
Maude Manouvrier - Univ. Paris Dauphine
Vue
67
Table virtuelle dont le schma et les instances sont drivs de
la base relle par une requte et qui est utilise pour :
Cacher certaines informations un groupe dutilisateurs
Faciliter laccs certaines donnes
create view nom_vue as < requte >
Exemple :
create view Info_Non_Confidentielle_Etudiant
as H
Etudiant_ID, Nom, Prnom, Email
(Etudiant)
Chap. VI - Algbre relationnelle tendue
Maude Manouvrier - Univ. Paris Dauphine
Chap VII - SQL
Structured Query Language
SQL2 : standard adopt en 1992
SQL3 : extension de SQL2 avec "gestion" dobjets
SQL:
Langage de Manipulation de Donnes (DML) :
interroger et modifier les donnes de la base
Langage de Dfinition de Donnes (DDL) : dfinir le
schma de la base de donnes
Langage de contrle daccs aux donnes
68
Maude Manouvrier - Univ. Paris Dauphine
Bibliographie
SQL2 - Application Oracle, Access et RDB
Pierre DELMAL, 2me Edition, De Boeck Universit, 1998
BU: 005.74 SQL
SQL Pour Oracle (avec exercices corrigs)
Christian Soutou, Eyrolles, 2005 BU: 005.72 SOU
Initiation SQL (cours et exercices corrigs)
Philip J. Pratt, Eyrolles,2001 BU : 005.72 SQL
SQL (cours et exercices corrigs)
Frdric Brouad et Christian Soutou, Coll. Synthex, Pearson
Education, 2005 BU : 005.72 SQL
Oracle PL/SQL - Prcis & concis
Steven Feuerstein, Bill Pribyl et Chip Dawes, O Reilly, 2000
69
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
DML
70
SELECT [DISTINCT] *
FROM table_1 [synonyme_1], table_2 [synonyme_1],
[WHERE prdicat_1
AND [ou OR] prdicat_2 ]
SELECT [DISTINCT] exp_1 [AS nom_1], exp_2 ...
FROM table_1 [synonyme_1], table_2 [synonyme_1],
[WHERE prdicat_1
AND [ou OR] prdicat_2 ]
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
DML
71
SELECT Nom, Prnom
FROM Etudiant
WHERE Ville = Paris ;
SELECT Nom, Prnom
FROM Etudiant
WHERE Ville = Paris
AND Nom
LIKE _AR%;
SELECT Nom, Prnom
FROM Etudiant
WHERE Fax IS NULL;
Chap. VII - SQL
SELECT Intitul,
(NbSeances*3) AS NbHeures
FROM Cours
WHERE (NbSeances*3)
BETWEEN 24 AND 27 ;
SELECT Nom, Prnom
FROM Enseignant
WHERE Dpartement_ID IN
( INFO , MATH , ECO )
Maude Manouvrier - Univ. Paris Dauphine
DML
72
Prdicats du WHERE de la forme :
exp1 = exp2 exp op ANY (SELECT )
exp1 != exp2 exp op ALL (SELECT )
exp1 > exp2 avec op tel que =, !=, <, > ...
exp1 < exp2
exp1 <= exp2 exp IN (SELECT )
exp1 >= exp2 exp NOT IN (SELECT )
exp1 BETWEEN exp2 AND exp3
exp1 LIKE exp2
exp1 IN (exp2, exp3, )
exp1 NOT IN (exp2, exp3, )
exp1 IS NULL
exp1 IS NOT NULL
Chap. VII - SQL
SELECT Intitul,
FROM Cours
WHERE NbSeances <=
( SELECT AVG(NbSeances)
FROM Cours);
Maude Manouvrier - Univ. Paris Dauphine
DML
73
Chap. VII - SQL
Clause EXISTS :
Retourne VRAI si au moins un nuplet est renvoy par la requte
FAUX si aucun nuplet nest retourn.
La valeur NULL na aucun effet sur le boolen rsultat
SELECT Nom, Prnom
FROM Enseignant E
WHERE NOT EXISTS
( SELECT *
FROM Reservation_Salle S
WHERE S.Enseignant_ID = E.Enseignant_ID
);
Maude Manouvrier - Univ. Paris Dauphine
DML
74
Chap. VII - SQL
Fonctions de groupe :
COUNT, MIN, MAX, AVG, SUM, ORDER BY, GROUP BY
SELECT COUNT(*)
FROM Etudiant ;
SELECT AVG(Capacit), SUM(Capacit)
FROM Salle ;
SELECT Dpartement_ID, Nom, Prnom
FROM Enseignant
ORDER BY Dpartement_ID DESC, Nom, Prnom ;
SELECT Dpartement_ID, COUNT(*)
FROM Rservation_Salle
GROUP BY Dpartement_ID HAVING COUNT(*) >=4 ;
Maude Manouvrier - Univ. Paris Dauphine
DML
75
Chap. VII - SQL
Jointure :
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant E, Dpartement D
WHERE E.Dpartement_ID = D.Dpartement_ID ;
Jointure externe : sous Oracle
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant E, Dpartement D
WHERE E.Dpartement_ID = D.Dpartement_ID (+);
Sil existe des enseignants attach aucun dpartement, la valeur de
Dpartement_ID sera NULL.
En SQL2 : [RIGHT | LEFT | FULL] OUTER JOIN
Maude Manouvrier - Univ. Paris Dauphine
DML
76
Chap. VII - SQL
Oprateurs ensemblistes :
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO
INTERSECT
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO
UNION
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH
ORDER BY Nom,Prnom
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO
MINUS
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH
MINUS = EXCEPT en standard SQL2
Maude Manouvrier - Univ. Paris Dauphine
DML
77
Chap. VII - SQL
Division :
Livre(ISBN, Titre, Editeur)
Emprunt(EmpruntID,ISBN, DateEmprunt,EtudiantID)
Etudiant(EtudiantID,Nom, Prenom)
Quels livres ont t emprunts par tous les tudiants?
{t.Titre / Livre(t) . [ u ( Etudiant (u) ) v
(- v Emprunt(v) .
(v.Etudiant_ID=u.Etudiant_ID) . (v.ISBN=t.ISBN )
)
]
}
SELECT t.Titre FROM Livre t WHERE NOT EXISTS
( SELECT * FROM Etudiant u WHERE NOT EXISTS
( SELECT * FROM Emprunt v
WHERE u.EtudiantID=v.EtudiantID AND
v.ISBN=t.ISBN
)
) ;
{t.Titre / Livre(t) . [ - u Etudiant (u) .
(- v Emprunt(v) .
(v.Etudiant_ID=u.Etudiant_ID) . (v.ISBN=t.ISBN )
)
]
}
Il ny a pas de mot-cl
"quel que soit " en SQL2
Maude Manouvrier - Univ. Paris Dauphine
DML
78
Chap. VII - SQL
Insertion
INSERT INTO table(col1, col2, coln)
VALUES (val1, val2, valn)
INSERT INTO table(col1, col2, coln)
SELECT
Suppression
DELETE FROM table
WHERE prdicat
Mise jour
UPDATE table
SET col1 = exp1, col2 = exp2 WHERE prdicat
Transactions : COMMIT, ROLLBACK [TO], SAVE POINT
Sous Oracle
Maude Manouvrier - Univ. Paris Dauphine
DDL
79
Chap. VII - SQL
CREATE TABLE table (col1 type 1 [NOT NULL] ,
col2 type2 [NOT NULL]
)
Contraintes :
CONSTRAINT nom_contrainte
PRIMARY KEY (liste attributs cl primaire)
| NOT NULL immdiatement aprs la dclaration de lattribut
| CHECK (condition) aprs la dclaration de lattribut
| UNIQUE aprs la dclaration de lattribut
| FOREIGN KEY (cl trangre)
REFERENCES nom_table (liste-colonne)
CREATE TABLE table
AS SELECT ...
Maude Manouvrier - Univ. Paris Dauphine
DDL
80
Chap. VII - SQL
CREATE TABLE Enseignant
(
Enseignant_ID integer,
Departement_ID integer NOT NULL,
Nom varchar(25) NOT NULL,
Prenom varchar(25) NOT NULL,
Grade varchar(25)
CONSTRAINT CK_Enseignant_Grade
CHECK (Grade IN ('Vacataire', 'Moniteur','ATER', 'MCF', 'PROF')),
Telephone varchar(10) DEFAULT NULL,
Fax varchar(10) DEFAULT NULL,
Email varchar(100) DEFAULT NULL,
CONSTRAINT PK_Enseignant PRIMARY KEY (Enseignant_ID),
CONSTRAINT "FK_Enseignant_Departement_ID"
FOREIGN KEY (Departement_ID)
REFERENCES Departement (Departement_ID)
ON UPDATE RESTRICT ON DELETE RESTRICT
);
Contrainte
de domaine
Dfinition de la
cl primaire
Dfinition dune cl
trangre
81
CREATE TABLE Reservation
(
Reservation_ID integer,
Batiment varchar(1) NOT NULL,
Numero_Salle varchar(10) NOT NULL,
Enseignement_ID integer NOT NULL,
Departement_ID integer NOT NULL,
Enseignant_ID integer NOT NULL,
Date_Resa date NOT NULL DEFAULT CURRENT_DATE,
Heure_Debut time NOT NULL DEFAULT CURRENT_TIME,
Heure_Fin time NOT NULL DEFAULT '23:00:00',
Nombre_Heures integer NOT NULL,
CONSTRAINT PK_Reservation PRIMARY KEY (Reservation_ID),
CONSTRAINT "FK_Reservation_Salle" FOREIGN KEY (Batiment,Numero_Salle) REFERENCES
Salle (Batiment,Numero_Salle) ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT "FK_Reservation_Enseignement" FOREIGN KEY (Enseignement_ID,Departement_ID)
REFERENCES Enseignement (Enseignement_ID,Departement_ID) ON UPDATE RESTRICT ON
DELETE RESTRICT,
CONSTRAINT "FK_Reservation_Enseignant" FOREIGN KEY (Enseignant_ID) REFERENCES
Enseignant (Enseignant_ID) ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT CK_Reservation_Nombre_Heures CHECK (Nombre_Heures >=1),
CONSTRAINT CK_Reservation_HeureDebFin
CHECK (Heure_Debut < Heure_Fin)
);
Maude Manouvrier - Univ. Paris Dauphine
DDL
82
Chap. VII - SQL
CREATE ASSERTION <nom contrainte>
[ {BEFORE COMMIT |
AFTER {INSERT | DELETE | UPDATE[OF (Attributs)]} ON
<Relation>} ]
CHECK <Condition>
[FOR [EACH ROW OF] <Relation> ]
CREATE ASSERTION CA_Place_Universit
BEFORE COMMIT
CHECK( (SELECT SUM(Capacit) FROM Salle)
>= (SELECT COUNT(*) FROM Etudiant)
)
Maude Manouvrier - Univ. Paris Dauphine
DDL
83
Chap. VII - SQL
CREATE [OR REPLACE] TRIGGER nom {BEFORE | AFTER}
vnement_dclencheur ON nom_table
[FOR EACH ROW]
[WHEN (condition) ]
bloc PL/SQL sous Oracle
| inst_de_suppr | inst_de_modif | instr_d_ajout | ERROR en SQL2
vnement_dclencheur = INSERT, UPDATE, DELETE
Dclencheur de niveau instruction : pas de clause FOR EACH ROW
Dclencheur de niveau ligne : variables liens :new et :old
INSERT : valeurs insrer dans :new.nom_colonne
UPDATE : valeur originale dans :old.nom_colonne, nouvelle valeur dans
:new.nom_colonne
DELETE : valeur en cours de suppression :old.nom_colonne
Maude Manouvrier - Univ. Paris Dauphine
DDL
84
Chap. VII - SQL
CREATE OR REPLACE TRIGGER Enseignant_Actif
BEFORE DELETE ON Enseignant
FOR EACH ROW
declare
counter number;
begin
SELECT count(*) INTO counter
FROM Enseignements
WHERE Enseignant_ID = :old.Enseignant_ID;
if counter > 0 then
raise_application_error (-20800, Enseignant actif ne
pouvant tre supprim');
end if;
end;
Maude Manouvrier - Univ. Paris Dauphine
DDL
85
Chap. VII - SQL
CREATE OR REPLACE TRIGGER UPD_salaire_personnel
BEFORE UPDATE salaire ON Personnel
FOR EACH ROW
WHEN (:old.salaire > :new.salaire)
declare
salaire_diminution EXCEPTION;
begin
raise salaire_diminution ;
when salaire_diminution then
raise_application_error(-20001, Le salaire ne peut pas
diminuer )
end;
Maude Manouvrier - Univ. Paris Dauphine
DDL
86
Sous PostgreSQL :
Chap. VII - SQL
CREATE OR REPLACE FUNCTION GetSalleCapaciteSuperieurA(int)
RETURNS SETOF Salle
AS '
SELECT * FROM Salle WHERE Capacite > $1;
'
LANGUAGE SQL;
SELECT * FROMGetSalleCapaciteSuperieurA(300) ;
87
CREATE OR REPLACE FUNCTION FunctionTriggerReservation()
RETURNS trigger AS
' DECLARE
resa Reservation.Reservation_ID%TYPE;
BEGIN
SELECT INTO resa Reservation_ID
FROMReservation
WHERE
IF FOUND THEN RAISE EXCEPTION ''Rservation impossible, salle
occupe la date et aux horaires demands'';
ELSE RETURN NEW;
END IF;
END;'
LANGUAGE 'plpgsql';
DDL
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
DDL
88
Sous PostgreSQL :
Chap. VII - SQL
CREATE TRIGGER InsertionReservation
BEFORE INSERT ON Reservation
FOR EACH ROW
EXECUTE PROCEDURE
FunctionTriggerReservation();
Maude Manouvrier - Univ. Paris Dauphine
DDL
89
Chap. VII - SQL
ALTER TABLE table
ADD (col1 type1, col2 type2 )
| MODIFY (col1 type1, col2 type2 )
| DROP PRIMARY KEY
| DROP CONSTRAINT nom_contrainte
DROP TABLE table
CREATE VIEW vue (col1, col2)
AS SELECT
DROP VIEW vue
CREATE [UNIQUE] INDEX nom_index ON table (col1,col )
Maude Manouvrier - Univ. Paris Dauphine
Embedded SQL
90
Chap. VII - SQL
Utilisation de commandes SQL lintrieur dun langage hte :
Commandes SQL remplace par des appel de fonctions du
langage hte par le prcompilateur.
Commandes SQL reconnues par EXEC SQL
/* dclaration de variables htes */
EXEC SQL BEGIN DECLARE SECTION
char d_name[20];
char d_id;
EXEC SQL END DECLARE SECTION
...
EXEC SQL INSERT INTO Department
VALUES (:d_id, :d_name);
Maude Manouvrier - Univ. Paris Dauphine
Embedded SQL
91
Chap. VII - SQL
Gestion des erreurs :
EXEC INCLUDE SQLCA;
...
EXEC SQL WHENEVER SQLERROR GOTO erreur
...
erreur :
printf(``erreur : les transactions en
cours vont tre annules'\n'');
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
Maude Manouvrier - Univ. Paris Dauphine
Embedded SQL
92
Chap. VII - SQL
Gestion de curseur :
/* Dclaration d'un curseur pour manipuler la
table Department */
EXEC SQL DECLARE c1 CURSOR FOR
SELECT * FROM Department ;
/* Ouverture du curseur */
EXEC SQL OPEN c1;
/* Lecture de la premire ligne de la table */
EXEC SQL FETCH c1 INTO :d_id, :d_name ;
printf(``Nom du dpartement %s, identifiant :
%s\n'',d_name, d_id);
/* fermeture du curseur */
EXEC SQL CLOSE c1;
Maude Manouvrier - Univ. Paris Dauphine
Middleware daccs
aux bases de donnes
93
Chap. IV - SQL
Architecture logicielle dfinissant une interface standard daccs
aux SGBD
A chaque SGBD correspond un pilote (driver)
Indpendance vis vis du SGBD par simple configuration du
pilote
Possibilit pour un mme programme dinterroger diffrentes
bases de donnes dans diffrents SGBD
1. Java DataBase Connectivity (JDBC)
2. Open DataBase Connectivity (ODBC) - Middleware propritaire
(Windows)
Maude Manouvrier - Univ. Paris Dauphine
JDBC/ODBC
94
Chap. IV - SQL
Appel des fonctions de l API :
lien entre lapplication et le gestionnaire de pilotes
Pilote = librairie qui contient les appels
JDBC/ODBC et traduit les requtes en requtes
propres au SGBD
Gestionnaire de pilotes (ODBC) = librairie qui
charge les pilotes associs chaque source de
donnes (BD + SGBD)
Maude Manouvrier - Univ. Paris Dauphine
JDBC
95
Chap. IV - SQL
Exemple de programme Java sur la base exemple :
import java.sql.*; // Tout ce qui est ncessaire pour JDBC
import java.text.*; // Pour formater les dates
import java.util.*;
public class TestJDBCPostgresql
{
Connection db=null; // Variable de connexion
Statement sql=null; // Variable pour un ordre SQL
DatabaseMetaData dbmd; // Mta-donnes ncessaires
// au pilote.
Maude Manouvrier - Univ. Paris Dauphine
JDBC
96
Chap. IV - SQL
public TestJDBCPostgresql(String argv[])
throws ClassNotFoundException, SQLException,
java.io.IOException
{ String database = argv[0];
String username = argv[1];
String password = argv[2];
// Rcupration du pilote du SGBD (ici PostgreSQL)
Class.forName("org.postgresql.Driver");
// Connexion la base de donnes
db = DriverManager.getConnection("jdbc:postgresql:"
+database, username,
password);
// Si AUTOCOMMIT=true => le SGBD excute COMMIT
// aprs chaque requte
// Si AUTOCOMMIT= false => le SGBD attend un COMMIT
// explicite
db.setAutoCommit(false);
Maude Manouvrier - Univ. Paris Dauphine
JDBC
97
Chap. IV - SQL
dbmd = db.getMetaData(); // Rcuparation des mta-donnes
// Pour tester que la connexion est OK
System.out.println("Connection to SGBD
+ dbmd.getDatabaseProductName()+ " version
+ dbmd.getDatabaseProductVersion()+ " database "
+ dbmd.getURL()+ " \nusing " + dbmd.getDriverName()
+ " version "+ dbmd.getDriverVersion()+ " " +
"successful.\n");
// Cration dun ordre SQL pour crer une relation
sql = db.createStatement();
String sqlText = "CREATE TABLE ";
System.out.println("Executing this command: "+sqlText+"\n");
sql.executeUpdate(sqlText);
// Ne pas oublier le COMMIT si AUTOCOMMIT = false
db.commit();
// Code quivalent pour un INSERT, UPDATE, DELETE
Maude Manouvrier - Univ. Paris Dauphine
JDBC
98
Chap. IV - SQL
// Exemple de requte de slection
ResultSet rset = sql.executeQuery("SELECT Capacit FROM
Reservation " + "WHERE Batiment='B' " + "AND
Numero_Salle='022'");
// Parcours des nuplets rsultat
while (rset.next()) {
System.out.println("Nom de la table : (gnralement vide
bug du driver)"
+ rset.getMetaData().getTableName(1));
System.out.println("Type de la colonne : "
+ rset.getMetaData().getColumnTypeName(1));
System.out.println("Nom de la colonne : "
+ rset.getMetaData().getColumnName(1) + "\n";
//Numrotation des colonnes partir de 1 (et non de 0!!)
System.out.println("Capacit de la salle B020 : "
+ rset.getInt(1) + "\n");
Maude Manouvrier - Univ. Paris Dauphine
JDBC
99
Chap. IV - SQL
// Cration dun ordre SQL paramtr
// Code SQL de la requte
sqlText = "INSERT INTO Salle VALUES (?,?,?)";
// Prparation de lordre SQL non encore excut
//car il manque des paramtres
PreparedStatement ps = db.prepareStatement(sqlText);
String [] NumBatiment = {"A", "B", "C", "P", "D"};
String [] NumSalle = {"208", "026", "405", "340", "120"};
int lenNB = NumBatiment.length;
for (int i=0, c=30 ; (i<lenNB) && (c<35) ;c++,i++)
{ps.setString(1,NumBatiment[i]); // Paramtre 1
ps.setString(2,NumSalle[i]); // Paramtre 2
ps.setInt(3,c); // Paramtre 3
ps.executeUpdate(); // Excution de lordre SQL
}
// Ne pas oublier le COMMIT!!
db.commit();
ps.close(); // Fermeture de la prparation de lordre
Maude Manouvrier - Univ. Paris Dauphine
ODBC
100
Chap. VII - SQL
Appel des fonctions de l API ODBC :
lien entre lapplication et le gestionnaire de
pilotes
Gestionnaire de pilotes = DLL qui charge les pilotes
associs chaque source de donnes (BD + SGBD)
Pilote = DLL qui contient les appels ODBC et traduit
les requtes en requtes propres au SGBD
ODBC
101
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
ODBC
102
Chap. VII - SQL
Exemple de programme en C sous Visual C++ :
#include <stdio.h>
#include <conio.h>
#include <afxdb.h> // MFC ODBC database classes
char *cBASE ; /* Nom de la source de donnes */
char *cLOGIN ; /* Login utilisateur */
char *cPASSWD ; /* Mot de passe utilisateur */
void main()
{
HENV d_env; /* Descripteur d'environnement */
HDBC d_connex; /* Descripteur de connexion */
HSTMT curseur; /* Curseur */
RETCODE retcode; /* Code de retour de fonction */
ODBC
103
Chap. VII - SQL
UCHAR ucLastName[20],ucCity[20];
SDWORD ceLastName,ceCity;
char *cREQUETESQL; /* Variable recevant une requte SQL */
/* Saisie du nom de la source de donnes */
cBASE=(char*)malloc(20);
printf("Nom de la base de donnees :"); scanf("%s",cBASE);
/* Saisie du login */
cLOGIN=(char*)malloc(20); printf("Login :");
scanf("%s",cLOGIN);
/* Saisie du password */
cPASSWD=(char*)malloc(20); printf("Mot de passe : ");
/* Pour ne pas afficher le mot de passe l'cran */
int iPosCaractere=0; fflush(stdin);
do { if((cPASSWD[iPosCaractere]=_getch())!='\r')
printf("*");
} while(cPASSWD[iPosCaractere++]!='\r' && iPosCaractere <20);
cPASSWD[--iPosCaractere]='\0';
Maude Manouvrier - Univ. Paris Dauphine
ODBC
104
Chap. VII - SQL
/* Cration d'un environnement ODBC */
retcode = SQLAllocEnv(&d_env);
/* Si la cration d'un environnement ODBC est correcte */
if (retcode == SQL_SUCCESS)
{
/* Cration d'une connexion ODBC */
retcode = SQLAllocConnect(d_env, &d_connex);
/* Si la connexion ODBC s'est bien passe */
if (retcode == SQL_SUCCESS)
{
/* Initialisation du temps de connexion 5 secondes. */
SQLSetConnectOption(d_connex, SQL_LOGIN_TIMEOUT, 5);
/* Connexion une source de donnes */
retcode = SQLConnect(d_connex,(unsigned char*)cBASE,SQL_NTS,(unsigned
char*)cLOGIN,SQL_NTS,(unsigned char*)cPASSWD,SQL_NTS);
Longueur de la chane ou on indique que la chane se termine par le code NULL
Maude Manouvrier - Univ. Paris Dauphine
ODBC
105
Chap. VII - SQL
/* Si la connexion la source de donnes s'est bien passe */
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("Connection a la base (source de donnes).\n");
/* Pause dans l'affichage */
printf("Taper une touche pour continuer \n"); getchar();
/* Allocation mmoire du curseur et association du curseur la
source de donnes identifie par d_connex. */
retcode = SQLAllocStmt(d_connex, &curseur);
/* Si l'allocation mmoire du curseur est correcte */
if (retcode == SQL_SUCCESS)
{ /* Cration de la requte SQL */
cREQUETESQL = "SELECT Nom, Ville FROM Etudiant";
/* Execution directe de la requte sur la base */
retcode = SQLExecDirect(curseur, (unsigned char*)cREQUETESQL,
SQL_NTS);
printf("EXECUTION DE LA REQUETE, CODE ERREUR %d, CODE DE SUCCES
%d \n",retcode,SQL_SUCCESS);
Maude Manouvrier - Univ. Paris Dauphine
ODBC
106
Chap. VII - SQL
/* Tant le parcours du curseur est valide */
while (retcode == SQL_SUCCESS)
{
/* Parcourt de l'enregistrement rsultat de la requte */
retcode = SQLFetch(curseur);
/* Si le parcourt est incorrect */
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("Erreur %d\n",SQL_ERROR);
}
/* Si le parcourt des enregistrements est correct */
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
/* rcupration des donnes des colonnes 1 et 2 de la table
rsultat */
SQLGetData(curseur, 1, SQL_C_CHAR, ucLastName, 30, &ceLastName);
SQLGetData(curseur, 2, SQL_C_CHAR, ucCity, 30, &ceCity);
/* Affichage du rsultat */
printf("Etudiant : %s %s\n",ucLastName,ucCity);
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
Chap VIII - Dpendances fonctionnelles
Dpendance fonctionnelle sur R
A
1
, A
2
, , A
n
B
"Si deux nuplets de R ont mmes valeurs pour les attributs de A
1
, A
2
, ,
A
n
alors ils ont mme valeur pour les attributs de B.
Une dpendance A
1
, A
2
, , A
n
B
1
, B
2
, , B
m
est :
triviale : si lensemble B
1
, B
2
, , B
m
est sous-ensemble de
A
1
, A
2
, , A
n
non triviale : si au moins un B
i
nappartient pas
lensemble de A
1
, A
2
, , A
n
compltement non triviale : si aucun des B
i
nappartient
lensemble de A
1
, A
2
, , A
n
107
Maude Manouvrier - Univ. Paris Dauphine
Rgles
108
Chap. VIII - DF
Axiomes de Amstrong :
Rflexivit : si Y _ X alors X Y
Augmentation : Si X Y alors Z XZ YZ
Transitivit :
Si A B et B C alors A C
On dduit :
Union : {X Y, X Z} |= {X YZ}
Pseudo-transitivit :
{X Y,WY Z} |= {XW Z}
Dcomposition :
Si X Y et Z _ Y alors X Z
Maude Manouvrier - Univ. Paris Dauphine
Fermeture
109
Chap. VIII - DF
Fermeture dune famille de dpendances fonctionnelles
F
+
= {X Y \ F |= X Y }
Fermeture dun ensemble dattributs X par rapport
une famille de dpendances fonctionnelles F
[X]
+
= {A \ F |= X A}
Lemme
La dpendance fonctionnelle X Y peut tre dduite
des axiomes dAmstrong si Y _ [X]
+
Maude Manouvrier - Univ. Paris Dauphine
Equivalence et Couverture
110
Chap. VIII - DF
Deux familles de dpendances fonctionnelles F et G sont
quivalentes si F
+
= G
+
Si F
+
c G
+
alors G est une couverture de F
Une famille de dpendances fonctionnelles F est
minimale si :
1. En partie droite de toute dpendance de F, il ny a quun seul
attribut
2. Il ny a pas de dpendance fonctionnelle X A dans F telle que
(F \ {X A }) soit quivalente F
3. Il ny a pas de dpendance fonctionnelle X A et Z c X tels que
(F \ {X A }) {Z A } soit quivalente F
Attention: pas dunicit des couvertures minimales
Maude Manouvrier - Univ. Paris Dauphine
Cl
111
Chap. VIII - DF
Soit R(A
1
, A
2
, , A
n
) et F une famille de DF sur R
Un sous-ensemble X de {A
1
, A
2
, , A
n
} est une cl
minimale de R si
La dpendance fonctionnelle X A
1
, A
2
, , A
n
e F
+
Y c X, on a pas Y A
1
, A
2
, , A
n
Si X nest pas un ensemble minimal alors X est une surcl
Les dpendances fonctionnelles permettent de dduire les cls
des relations
Maude Manouvrier - Univ. Paris Dauphine
Chap IX - Dcomposition de schma
Dcomposition sans perte dinformation (Lossless jointure)
La dcomposition de R en R
1
, R
2
, .., R
n
est sans perte
dinformation si et seulement si r, instance de R :
r = H
R
1
(r) H
R
2
(r) ... H
R
n
(r)
Dcomposition sans perte de dpendances
La dcomposition de R, munie dune famille de
dpendances F, en R
1
, R
2
, .., R
n
est sans perte de
dpendance si et seulement si :
F
+
= F
+
R
1
F
+
R
2
... F
+
R
n
avec F
+
R
i
= {X Y, XY _ R
i
}
112
Maude Manouvrier - Univ. Paris Dauphine
Dcomposition SPI
113
Chap. IX - Dcomposition
? ) (
1[ =
_
i
R
n
i
r r
? ) (
1[ =
_
i
R
n
i
r r
) ( de issu gnrique nuplet un , ,..., Soit
1 2 1 [ =
i
R
n
i n
r ) a ,a (a t
[
[
[
e
e
e
n
R
n
R
R
r t
r t
r t
t
) (
...
) (
) ( avec
t ... t t de partir construit est
2
1
2
1
n 2 1
? que - ce - Est r t e
r
Maude Manouvrier - Univ. Paris Dauphine
Dcomposition SPD
114
Chap. IX - Dcomposition
Association dune famille F
i
chaque sous-
relation R
i
Calcul des F
i
partir de F
+
:
X Y e F
+
et XY _ R
i
X Y e F
i
Perte de dpendances
- X Y e F tq X Y e
+
i
F
X] [
] ) [( par ent itrativem calcul ] [
j i
R R X X X
i
F
+ +