M1idsm Bda
M1idsm Bda
M1idsm Bda
Master 1 IDSM-Kharkiv
2020-2021
Jérôme Darmont
http://eric.univ-lyon2.fr/jdarmont/
Actualité du cours
http://eric.univ-lyon2.fr/jdarmont/?page_id=3604
http://eric.univ-lyon2.fr/jdarmont/?feed=rss2
https://twitter.com/darmont_lyon2 #idsmbda
≠
Base de données
Fichiers
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 4
Organisation en fichiers
Fichier
État de
Saisie Traitement sortie
Saisie
Base
+ de Traitements
données
Contrôles
États de
sortie
Uniformisation de la saisie
Exemples
– SGBD « bureautiques » : Access, Base, Filemaker, Paradox
– SGBD serveurs : Oracle, DB2, SQL Server, PostgreSQL,
MySQL, MariaDB…
Spécifica-
tions
Rédaction
Modèle Spécifique
conceptuel
Analyse Famille de SGBD
Modèle
logique
Traduction SGBD particulier
Modèle
physique
Traduction
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 9
Plan du cours
Diagramme de classes
Représentation graphique :
Type d’attribut :
– Nombre entier (Entier)
– Nombre réel (Réel)
– Chaîne de caractères (Chaîne)
– Date (Date)
Convention graphique :
NB : Ne pas confondre avec
les attributs de classe UML
dont c’est la notation usuelle
– 1 Un et un seul
– 0..1 Zéro ou un
– 0..* ou * Zéro ou plus
– 1..* Un ou plus
– M..N De M à N (M, N entiers)
ex. 4..10 (de 4 à 10)
EPREUVE MATIERE
GROUPE_TD (CodeGroupe)
ETUDIANT
NumEtu Nom Prénom
Anomalies de suppression
ex. La suppression de l’étudiant n° 2002 fait perdre
toutes les informations concernant l’épreuve ECOS102.
Pourquoi ?
– Suppression des problèmes de mise à jour
– Minimisation de l’espace de stockage
Comment ?
– Dans le modèle conceptuel, ne spécifier que des attributs non
décomposables (première forme normale).
ex. Une adresse doit être décomposée en rue, code postal, ville…
– C’est tout !
Intersection : T = R ∩ S
ou T = INTERSECT (R, S)
R et S doivent avoir même schéma.
ex. Permet de trouver les étudiant·es commun·es à
deux formations.
Notation graphique : T
R S
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 50
Modèle
Opérateurs ensemblistes (3/5) relationnel
Différence : T = R - S
ou T = MINUS (R, S)
R et S doivent avoir même schéma.
ex. Permet de retirer les étudiant·es de la relation S
existant dans la relation R.
Notation graphique : T
R S
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 51
Modèle
Opérateurs ensemblistes (4/5) relationnel
Produit cartésien : T = R x S
ou T = PRODUCT (R, S)
Associe chaque n-uplet de R à chaque n-uplet de S.
Notation graphique :
T
x
R S
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 52
Modèle
Produit cartésien relationnel
Division : T=R÷S
ou T = DIVISION (R, S)
R (A1, A2, …, An) S (Ap+1, …, An)
T (A1, A2, …, Ap) contient tous les n-uplets tels que leur
concaténation à chacun des n-uplets de S donne
toujours un n-uplet de R.
Notation graphique :
T
ex.
NumEtu CodeEprNote
101 INFO1 11
101 ECO1 15 CodeEprNote
101 ECO2 12 ÷ INFO1 11
102 ECO1 9 ECO2 12
103 INFO1 11
103 ECO2 12
NumEtu
= 101
103
RESULTAT
Nom,
f
CodeEpr, Note
Hh
NumEtu NumEtu
=
ETUDIANT PASSER
ETUDIANT PASSER
NumEtu Nom NumEtu CodeEpr Note
101 E1 101 INFO1 10
102 E2 X 103 INFO1 15
103 E3 103 ECO1 12
ETUDIANT ▷◁ PASSER
E.NumEtu Nom P.NumEtu CodeEpr Note
101 E1 101 INFO1 10
103 E3 103 INFO1 15
103 E3 103 ECO1 12
Clé primaire :
PRIMARY KEY (clé)
Clé étrangère :
FOREIGN KEY (clé) REFERENCES table(attribut)
Contrainte de domaine :
CHECK (condition)
ex.
Ajout d’attributs
ALTER TABLE nom_table ADD (attribut TYPE, …)
ex. ALTER TABLE Etudiant ADD (tel NUMBER(8))
Modifications d’attributs
ALTER TABLE nom_table MODIFY (attribut TYPE, …)
ex. ALTER TABLE Etudiant MODIFY (tel NUMBER(10))
Suppression d'attributs
ALTER TABLE nom_table DROP COLUMN attribut, ...
ex. ALTER TABLE Etudiant DROP COLUMN tel
Ajout de contrainte
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte définition_contrainte
ex. ALTER TABLE Epreuve
ADD CONSTRAINT LieuValide CHECK (Lieu IN (‘Say’, ‘Aubrac’))
Suppression de contrainte
ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte
ex. ALTER TABLE Epreuve
DROP CONSTRAINT LieuValide
...
USER_CONSTRAINTS (TABLE_NAME, CONSTRAINT_NAME,
CONSTRAINT_TYPE, SEARCH_CONDITION, ...)
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 76
Ex. d’interrogation des vues systèmes LDD
Suppression de n-uplets
ex. DELETE FROM Etudiant
WHERE Ville = ‘Lyon’
ex. DELETE FROM Epreuve
Tri du résultat
ex. Par ordre alphabétique [inverse] de nom
SELECT * FROM Etudiant
ORDER BY Nom [DESC]
Champs calculés
ex. Transformation de notes sur 20 en notes sur 10
SELECT Note / 2 FROM Passer
Projection
ex. Noms et Prénoms des étudiant·es, uniquement (pas
les autres attributs)
SELECT Nom, Prénom FROM Etudiant
Suppression des doublons
ex. SELECT DISTINCT Nom FROM Etudiant
Restriction
ex. Étudiant·es qui habitent à Lyon
SELECT * FROM Etudiant
WHERE Ville = ‘Lyon’
Table PASSER
COUNT(NumEtu) ⇒ Résultat = 3
Nom,
f
WHERE Etudiant.NumEtu = Passer.NumEtu
CodeEpr, Note
Hh
NumEtu NumEtu
=
ETUDIANT PASSER
WHERE CodeEpr IN (
Sous-
SELECT CodeEpr FROM Epreuve requête
WHERE DateEpr = ‘23-09-2016’ )
Deux stratégies :
– Étudiant·es tels qu'il n'existe pas d’épreuve tel qu'il n'existe pas
de « passage » pour cet étudiant·e et cette épreuve.
SELECT NumEtu
FROM Etudiant Et
WHERE NOT EXISTS (
SELECT *
FROM Epreuve Ep
WHERE NOT EXISTS (
SELECT *
FROM Passer P
WHERE Et.NumEtu = P.NumEtu
AND P.CodeEpr = Ep.CodeEpr ) )
Exemple de hiérarchie V é lo
(nomenclature) :
C a d re R oues
Relation associée :
ELEMENT (No_Elt, Dési, Parent#) P neu R ayon s
0 Vélo NULL
1 Cadre 0
2 Roue1 0 6 Rayon11 2
3 Roue2 0 7 Rayon12 2
4 Pneu1 2 8 Rayon13 2
5 Pneu2 3 9 Rayon21 3
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 100
Requêtes hiérarchiques (2/5) LMD
Création
– ex. CREATE USER moi_meme
IDENTIFIED BY mon_mot_de_passe
Suppression
– ex. DROP USER moi_meme CASCADE
Modification
– ex. ALTER USER moi_meme IDENTIFIED BY aaaaa
Rôles prédéfinis
– CONNECT : droit de création de tables, vues, synonymes, etc.
– RESOURCE : droit de création de procédures stockées,
déclencheurs, etc.
– DBA : administrateur de la BD
Transmission de privilèges
GRANT privilège ON table|vue
TO user|PUBLIC [WITH GRANT OPTION]
Suppression de privilèges
REVOKE privilège ON table|vue FROM user|PUBLIC
http://eric.univ-lyon2.fr/jdarmont/tutoriel-sql/
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 116
Partie 4
Programmation
de bases de données
Génie
Réseau
logiciel
SQL
SQL Developer
Serveur
Oracle
PL/SQL
Logiciels
Administration
tiers
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 121
Moteur Oracle
[DECLARE
-- Types, constantes et variables]
BEGIN
-- Instructions PL/SQL
[EXCEPTION
-- Gestion des erreurs]
END;
Opérateurs arithmétiques + - / * **
Opérateur de concaténation ||
IF condition1 THEN
-- Statements
[ELSIF condition2 THEN
-- Instructions PL/SQL]
[ELSE
-- Instructions PL/SQL]
END IF;
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 130
Tests (2/2)
CASE
CASE variable
WHEN val1 THEN -- Instruction PL/SQL
WHEN val2 THEN -- Instruction PL/SQL
WHEN val3 THEN -- Instruction PL/SQL
[ELSE -- Instruction par défaut]
END CASE;
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 131
Boucles
Pour
FOR iterateur IN [REVERSE] min..max LOOP
-- Instructions PL/SQL
END LOOP;
Tant que
WHILE condition LOOP
-- Instructions PL/SQL
END LOOP;
Répéter
LOOP
-- Instructions PL/SQL
EXIT WHEN condition;
END LOOP;
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 132
Affichage écran
DBMS_OUTPUT.PUT('chaîne'); /* Pas de retour à la ligne */
DBMS_OUTPUT.PUT_LINE('chaîne'); /* Retour à la ligne */
Collection entière
ex. DECLARE TYPE T1 IS TABLE OF INT;
TYPE T2 IS TABLE OF INT;
et11 T1 := T1(1, 2, 3, 4);
et12 T1 := T1(5, 6);
et2 T2 := T2();
BEGIN et12 := et11; -- Légal
et2 := et11; -- Illégal
…
2. Déclarer un enregistrement
ex. un_etudiant Edutiant;
Référence directe
ex. un_etudiant.numetu := 12212478;
un_etudiant.nom := 'Toto';
un_etudiant.age := 6;
Résultat de requête
ex. SELECT student_number, student_name, student_age
INTO un_etudiant
FROM student
WHERE student_number = 12212478;
BEGIN
prix_EUR := prix_USD * taux;
END;
-- Calcul de n!
BEGIN
IF n = 1 THEN -- Condition d’arrêt
RETURN 1;
ELSE
RETURN n * facto(n - 1); -- Appel récursif
END IF;
END;
-- Exemple
DECLARE
hundredBucks CONSTANT REAL := 100;
resEuro REAL;
fact10 INTEGER;
BEGIN
Conversion_USD_EUR(hundredBucks, resEuro);
fact10 := facto(10);
END;
BEGIN
FOR nuplet IN calc_TVA LOOP
DBMS_OUTPUT.PUT_LINE(
nuplet.prod_num
|| ' : ' ||
nuplet.prix_TTC);
END LOOP;
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 150
Curseur explicite
DECLARE
-- Comme précédemment
BEGIN
OPEN calc_TVA;
FETCH calc_TVA INTO nuplet; -- 1re ligne
WHILE calc_TVA%FOUND LOOP
-- Instructions PL/SQL
FETCH calc_TVA INTO nuplet; -- Ligne suivante
END LOOP;
CLOSE calc_TVA;
END;
DECLARE
CURSOR c(s number) IS SELECT ename, sal FROM emp WHERE sal >= s;
nuplet c%ROWTYPE;
BEGIN
OPEN c(2500);
FETCH c INTO nuplet;
WHILE c%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(nuplet.ename || ' : ' || nuplet.sal);
FETCH c INTO nuplet;
END LOOP;
CLOSE c;
END;
Bases de données avancées http://eric.univ-lyon2.fr/jdarmont/ 153
Exceptions
Oracle 8 documentation
(Fig. 8-1)
Before 1 2 3
After 4 5 6
ON nom_table
[FOR EACH ROW]
-- Bloc PL/SQL codant les actions à effectuer
Exemples
– Procédure stockée qui met la table EMP à jour
⇒ SQL statique (la requête est connue à la compilation)
– Procédure stockée qui met à jour une table dont le nom est un
paramètre
⇒ SQL dynamique (la requête complète n’est pas connue à la
compilation)
Note :
– Requêtes paramétrées : valeurs de la base de données (statiques).
– Si l’on veut paramétrer des objets (tables, vues, attributs...) : requête
dynamique.
DECLARE
requete VARCHAR(250);
nom_table CHAR(4) := 'dept';
numdep dept.deptno%TYPE := 50;
n INTEGER;
BEGIN
-- Construction de requête par concatenation
requete := 'DELETE FROM '||nom_table||' WHERE deptno = '||numdep;
EXECUTE IMMEDIATE requete;
-- Récupération d'un résultat de requête dynamique
requete := 'SELECT COUNT(*) FROM ' || nom_table;
EXECUTE IMMEDIATE requete INTO n;
END;