Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML •...

306
1 Bases de données IN206 Nicolas Anciaux [email protected] Lien web : http://www-smis.inria.fr/~anciaux/ENSTA/IN206/

Transcript of Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML •...

Page 1: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

1

Bases de données

IN206

Nicolas Anciaux

[email protected]

Lien web : http://www-smis.inria.fr/~anciaux/ENSTA/IN206/

Page 2: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

2

Nature et objectifs du module

• Un cours d’introduction (aucun pré requis)

• Objectif

– Acquisition de la culture de base à l’ingénierie du SGBD

– Suivie du cours BD avancées (CI3) l’an prochain

• Connaissance

– Fonctionnalités logicielles et raison d’être d’un SGBD

• Indépendance physique/logique, vues, langage de manipulations, cohérence

(contraintes d’intégrité et triggers), standards

• Optimisation de questions, concurrence d’accès et gestion des pannes,

gestion de la confidentialité

– Connaissances techniques (et très concrètes)

• Conception de BD (modèle EA, modèle relationnel) : 2 séances

• Utilisation du SGBD (SQL, programmation SQL, JDBC/ODBC) : 3 séances

• Notions plus avancées (transactions, optimisation, sécurité) : 2 séances

Page 3: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

3

Objectifs en termes de compétences

• Concevoir une base de données

– Réaliser un modèle conceptuel avec le modèle E/A

– Concevoir un modèle relationnelle de base de données

• Créer une application base de données

– Ecrire des requêtes SQL d’interrogation/mise à jour

– Interfacer un programme Java/JDBC avec une base de données

– Ecrire et invoquer des fonctions et procédure stockées en PL/SQL

Oracle

• Administrer une base de données en vue d’optimiser les

performances

– Optimiser une base de données multi utilisateurs (gestion de la

concurrence)

Page 4: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

4

Plan des sessions

• Approche BD (vs. fichier)

• Conception 1 (modèle EA)

• Modèle relationnel et algèbre

• Conception 2 (relationnel)

• Vue d'ensemble SGBD

• SQL 1 (LDD)

• SQL 2 (LMD) et méthodologie

• Programmation SQL

• PL/SQL, ODBC/JDBC

• Propriétés transactionnelles

• Concurrence d’accès

• Introduction à la sécurité BD

→ TD : Conception (modèle EA)

… et passage au relationnel

→ TD : Exercices d’algèbre relationnelle

→ TP (XE) : Création d’une base (SQL)

→ TP (XE) : Insertion massive (SQL loader)

→ TP (XE) : Interrogation (SQL)

→ Présentation du projet

→ TP (XE) : PL/SQL, OCILIB

→ TP (XE) : Expérience sur la concurrence

→ Remise des projets (par email)

→ Examen

21/11

28/11

5/12

12/12

4/1

9/1

16/1

Page 5: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

5

L’approche bases de données

(SGF vs. SGBD)

Page 6: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

6

Chirurgie

Psychiatrie

Systèmes de fichiers Caractéristiques

Comptabilité

Consultations

Problèmes

Plusieurs applications Caractéristiques Plusieurs applications plusieurs formats

plusieurs langages

Problèmes Difficultés de gestion

Dupont

Symptomes : y

Turlututu : sqj

Symptomes : y

Turlututu : sdd

Analyses : xxx

Dupond Turlututusqjsk

Symptom: yyyy

Analyses xxxx

Turlututudhjsd

Analyses :xx

Duipont Turlututu : sq

Symptomyyyy

Analysesxxxx

Turlututudhjsd

Duhpon

Symptomes : yy

Analyses : xxxx

Symptomes : yy

Redondance (données) Caractéristiques Plusieurs applications plusieurs formats

plusieurs langages

Redondance de données

Problèmes Difficultés de gestion

Incohérence des données

Interrogations Caractéristiques Plusieurs applications plusieurs formats

plusieurs langages

Redondance de données

Pas de facilité d’interrogation

Question développement

Problèmes Difficultés de gestion

Incohérence des données

Coûts élevés

Maintenance difficile

Ch

iru

So

ft

Co

nsu

ltSoft P

sych

iaS

oft

Co

mp

taS

oft

Pannes ??? Caractéristiques Plusieurs applications plusieurs formats

plusieurs langages

Redondance de données

Pas de facilité d’interrogation

Question développement

Redondance de code

Problèmes Difficultés de gestion

Incohérence des données

Coûts élevés

Maintenance difficile

Gestion de pannes ???

Partage de données Caractéristiques Plusieurs applications plusieurs formats

plusieurs langages

Redondance de données

Pas de facilité d’interrogation

Question développement

Redondance de code

Problèmes Difficultés de gestion

Incohérence des données

Coûts élevés

Maintenance difficile

Gestion de pannes ???

Partage des données ???

Dupont

Symptomes : y

Turlututu : sqj

Symptomes : y

Turlututu : sdd

Analyses : xxx

Confidentialité Caractéristiques Plusieurs applications plusieurs formats

plusieurs langages

Redondance de données

Pas de facilité d’interrogation

Question développement

Redondance de code

Problèmes Difficultés de gestion

Incohérence des données

Coûts élevés

Maintenance difficile

Gestion de pannes ???

Partage des données ???

Confidentialité ???

Page 7: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

7

L’approche ‘‘Bases de données’’ (1)

• Modélisation des données

Éliminer la redondance de données

Centraliser et organiser correctement les données

Plusieurs niveaux de modélisation

Outils de conception

• Logiciel «Système de Gestion de Bases de Données»

Factorisation des modules de contrôle des applications

- Interrogation, cohérence, partage, gestion de pannes, etc…

Administration facilitées des données

Page 8: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

8

L’approche ‘‘Bases de données’’ (2)

BD VIII - Concurrence

d’accès

VII - Gestion des

pannes

I- Indépendance

Physique

IX - Gestion de la

confidentialité

II- Indépendance

Logique

VI - Gestion de la

cohérence

X - Standards

V - Optimisation des

questions

III – Langage de

manipulation

IV - Gestion des

vues

Page 9: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

9

Conception de bases de données

(Production du modèle conceptuel de

données)

Page 10: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

10

Réel

Modèle

conceptuel

• Indépendant du

modèle de

données

• Indépendant du

SGBD

Modèle

logique

•Dépendant du

modèle de

données

• Indépendant du

SGBD

Codasyl Relationnel Objet XML

Modèle

Physique

•Dépendant du

modèle de

données

•Dépendant du

SGBD

• Organisation physique des données

• Structures de stockage des données

• Structures accélératrices (index)

Modélisation du réel

Médecin effectue Visite

Page 11: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

11

Méthode de conception ?

• Plusieurs façons d’aborder la conception d’une BD

– Intuition + création directe de la BD

– Suivre une méthode de conception (MCDMLDMPD)

• Entité/Association (E/A) ou Entity/Relationship (E/R)

• Merise

• UML

• Suivre son intuition peut conduire à des erreurs

– Redondances

– Valeurs nulles

– Difficulté de gestion

– Impossibilité de répondre à certaines questions

• Une fois la base de données crée, difficile à modifier… (cf. TP)

• Les outils de conception sont une aide précieuse

Page 12: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

12

Exemple de mauvaise conception (1)

• Stocker des propriétaires de véhicule:

• Redondance des données et incohérence potentielle

– Personne répétée pour chaque voiture : • ex. Si Joe Bar change de ville et qu’une seule ligne est mise à jour…

– Redondance Ville/Pays : impact d’une erreur de saisie

• Anomalies de mises à jour et besoin de valeurs nulles.

– Comment insérer une personne sans voiture ?

– Sémantique de calculs avec des valeurs nulles…

– Comment supprimer la dernière voiture d'une personne ?

N° Nom Prénom Ville Pays Immatriculation Marque Couleur

1 Bar Joe Paris France 125 PP 75 Renault Rouge

2 Dean Pascal Vence France 234 FF 45 Peugeot Vert

3 Ben Zoe Lyon France 324 DFT 56 Renault Rouge

4 Bar Joe Paris France 245 FT 75 Renault Jaune

Page 13: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

13

Exemple de mauvaise conception (2)

• Stocker des personnes qui ont des enfants:

• Redondance cachée :

– Nombre d’enfants vs enfants

• Difficulté de gestion

– Comment gérer les personnes ayant plus de 3 enfants !

– Comment afficher la liste des enfants ?

N° Nom Prénom Ville Pays Enfant1 Enfant2 Enfant3 NbEnfants

1 Bar Joe Paris France Paul Zoe 2

2 Dean Pascal Vence France Lili 1

3 Ben Zoe Lyon France Sam Tor Tar 3

4 Cat Tom Lens France 0

Page 14: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

14

Réel

DONNEES TRAITEMENT

Modèle

conceptuel

MCD

Quelles données ?

Quelle organisation ?

MCT

Quels traitements ?

Modèle

logique

MLD

Modèle logique (e.g, relationnel)

MLT

Structuration en procédure

Modèle

Physique

MPD

Création de la base de donnée

MPT

Description de l’architecture

des traitements, algorithmes

Méthodes de conception : Exemple Merise

Objectif du cours : E/A, Merise, UML ? E/A light, Merise ultra-light

Page 15: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

15

GENERATION AUTOMATIQUE POSSIBLE !

Approche proposée : orientée données

1/ Définir l’application (~MCT)

– Que veut-on faire exactement, définir les sorties (états)

2/ Définir les données (~MCD)

– quelles sont les données nécessaires ? Comment les organiser ?

3/ Définir les questions nécessaires pour l’application (~MLT)

4/ Validation : Est ce que la structure choisie permet de

répondre aux questions ? Sinon, retour en 1/ ou 2/

5/ Passer du MCD au MLD

6/ Définir les requêtes nécessaires pour l’application (~MPT).

Normalement, le MLD doit permettre de répondre aux

requêtes ?

7/ Passer du MLD au MPD

Page 16: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

16

Déf° (1) : entité / type d’entité

• Entité : représentation d’un objet du monde réel …

… par rapport au problème à modéliser. Une entité peut donc être …

… concrète : ex. un docteur, un médicament, un client

… abstraite : ex. une visite médicale, une commande

• Type d'entité : représentation d'un ensemble d'entités perçues comme similaires et ayant les mêmes caractéristiques

– Ex. docteurs, patients, médicaments, clients, visites, commandes

Profs

Bouganim

Luc

.....

Profs

Crenn

Isabelle

....

Entités Type d'entité

Nom

Prénom

Adresse

Profs

Page 17: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

17

Déf° (2) : association / type d’association

• Association : représentation d'un lien non orienté entre plusieurs entités

(qui jouent un rôle déterminé).

– Ex. Un prof enseigne un cours

– lien non orienté : un prof enseigne un cours un cours est enseigné par

un prof.

• Type d'association : représentation d'un ensemble d'associations

ayant la même sémantique et les mêmes caractéristiques

– Ex. enseigner

• Question : quid de visite : entité ou association ???

– Un docteur visite un patient association

– Un docteur effectue une visite concernant un patient

– Différence ? Et clients - commandes - produits ?

Page 18: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

18

Déf° (3) : Propriétés / Identifiants

• Propriété : donnée élémentaire permettant de décrire une entité ou une

association – Le nom du patient, la date de la visite, l’adresse du patient

• Identifiant d’entité : Une entité est identifiée de manière unique par au moins une propriété (généralement une)

– Ex. n° de sécurité sociale du patient, référence d’un produit

• Identifiant d’association : il n’existe pas

– On peut identifier une association par l’ensemble des identifiants des entités associées

– Ex. pour enseigne : Code du prof, Code du cours

Page 19: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

19

Exemple : Profs et cours...

CodeProf

Nom

Prénom

Adresse

CodeCours

NomCours

enseigne

NbreHeures

Profs

3

Lewis

Jerry

....

Profs

1

Crenn

Isabelle

....

Profs

2

Bouganim

Luc

.....

Cours

1

Maths

.....

Cours

2

Info

s

...

enseigne

55

enseigne

16

enseigne

24

Cours Prof

Page 20: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

20

Déf°(4) : Cardinalités

• Cardinalité : Exprime le nombre minimum et maximum

d’association(s) par entité. Il est indiqué sur chaque arc,

entre le type d’entité et le type d’association concernées

• Pour un prof donné, combien d’enseignements ?

– Au minimum : Min=0

– Au maximum : Max=n

Un prof enseigne de 0 à n cours

• Pour un cours donné, combien d’enseignements ?

– Au minimum : 0

– Au maximum : 1

– Un cours est enseigné par 0 à 1 prof

0,n

0,1

Profs Cours enseigne

Profs Cours enseigne

Page 21: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

21

• ‘‘Énoncer le réel’’ à modéliser avec des phrases

• Exemple pour la gestion de rendez vous – Les patients ont des rendez vous avec des médecins

• Un patient peut avoir plusieurs RDV (voire aucun) 0,n

• Un médecin reçoit plusieurs patients (voire aucun) 0,n

• Un patient prendre plusieurs rendez-vous avec un même médecin

Ce MCD n’est pas bon !

Comment produire le MCD ? (1)

Médecin

Patient

À un RDV

0,n

0,n

RDV Patient à 0,n 1,1

correspond 1,1

Médecin 0,n

Page 22: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

22

– Un médecin exerce dans une salle

• Un médecin n’exerce que dans une seule salle 1,1

• Une salle peut être partagée par plusieurs médecins 1,n

Comment produire le MCD ? (2)

Salle

1,1

1,n

exerce

RDV Patient à 0,n 1,1

correspond 1,1

Médecin

0,n

Page 23: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

23

Comment produire le MCD ? (3)

• On obtient :

• Pour connaître la salle, pour un rendez vous,

on passe par le médecin

Ce MCD est bon

• Et si maintenant le médecin peut exercer dans plusieurs salles ?

• Comment connaître la salle d’un rendez vous ?

Ce MCD n’est pas bon !

Salle

1,1

1,n

exerce

RDV Patient à 0,n 1,1

correspond 1,1

Médecin 0,n

Salle

1,n

1,n

exerce

RDV Patient à 0,n 1,1

correspond 1,1

Médecin 0,n

Page 24: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

24

Comment produire le MCD ? (4)

Différences fonctionnelles (A) (B) (C)

Connaître la salle pour 1 RDV donné Non Oui Oui

Pré-allouer des salles aux médecins Non Non Oui

Patient Médecin

a un rdv 0,n 0,n

Salle

0,n

(B) (C)

(A)

Salle

1,1

1,n

exerce

RDV Patient à 0,n 1,1

correspond 1,1

Médecin 0,n

1,1 à correspond

1,1

est dans

1,1

exerce

1,n 1,n

Patient Médecin

a un rdv 0,n 0,n

Salle

0,n

à correspond 1,1

est dans

1,1

Page 25: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

25

25

Règles (1) respect des règles de gestion

• Il faut vérifier que le MCD correspond bien au ‘réel’,

c’est à dire aux règles fixées (celles que l’application

doit respecter)

• par exemple:

– un prof enseigne plusieurs cours

– une matière est enseignée par plusieurs profs (info/anglais)

– les notes peuvent être données par n’importe quel prof ou

par plusieurs profs enseignant une matière... (info par

exemple)

– On peut redoubler une fois....

– etc...

Page 26: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

26

26 Règles (2) : propriétés élémentaires,

calculées, constantes

• Toute propriété doit être élémentaire – sinon, complexité de traitement

– Ex. de propriétés élémentaires : Age, Salaire, N° de rue

– Ex. de propriétés non élémentaires : Adresse (complète), N°SS

– la notion d’élémentaire dépend de l’application. L’adresse peut devenir élémentaire si elle est toujours manipulée comme telle (on ne cherchera jamais à faire, par exemple, un tri par ville)

« Il n’est pas gênant d’éclater des propriétés qui devrait être groupés, mais on ne peut pas grouper des propriétés qui devrait être éclatées»

• Une propriété calculée n’est pas à stocker ! – Sinon, c’est redondant source d’incohérence

• Une propriété constante n’est pas à stocker – Sinon, c’est redondant source d’incohérence

– On utilisera une table de constantes ...

Page 27: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

27

27

Règles (3) : propriétés répétitives

• Pour une entité, il ne peut y avoir qu’une instance de chaque propriété de l’entité – exemple: Cours ne peut être une propriété de Prof, puisqu’un prof

enseigne plusieurs cours...

– Remarque : Si un prof ne peut enseigner qu’un seul cours, cours peut être une propriété de prof

• Attention aux propriétés n’ayant pas le même nom mais la même sémantique – Ex. : Enfant1, Enfant2, Enfant3 (cf. Slide 16)

– Ex. : différents types de notes d’un étudiant

• Remarque : pour éviter d’éventuelles erreurs, on nommera différemment des propriétés de différentes entités : – Ex. NomPatient, NomDocteur, etc.

– Du coup une propriété n’apparaît que dans une seule entité ou association.

Page 28: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

28

28

Règles (4) : propriétés sans signification

• Une propriété ne peut être sans signification pour une

partie des entités ou associations

– exemple : si un prof ne peut enseigner qu’un seul cours,

mais qu’on a choisi de créer une entité ‘personnel’ et non

‘prof’, on ne stockera pas le cours dans l’entité ‘personnel’

car il serait sans signification pour une secrétaire...

– contre exemple : Téléphone et Fax pour un étudiant...

Page 29: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

29

29

Règles (5) : identifiants d’entités

• Toute entité doit être identifiée !

• Un identifiant doit être pérenne. Ex. nom et prénom

peut être l’identifiant de l’étudiant, mais ça peut être

insuffisant.

– il ne faut pas concevoir le MCD en observant les données

telles qu’elles sont (ex. l’école tel qu’elle est). Il faut le

concevoir pour le cas à modéliser (ex. l’école telle qu’elle

peut être.... et telle que l’on se propose de la gérer.... )

• Plusieurs identifiants peuvent coexister

– En choisir un…

• Si vous ne trouvez aucun identifiant, votre « entité »

est sans doute une association …

Page 30: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

30

30 Règles (6) : dépendance pleine

de l’identifiant • Toute propriété doit dépendre pleinement de l’identifiant

(et non d’une partie de celui-ci)

– Sinon on introduit des redondances

• Les propriétés d’une association doivent dépendre de la

totalité des entités associées

– Sinon, les déplacer, voire créer une nouvelle association…

• Exemple :

Prof Groupe

Cours

enseigne

Heure

1/ la salle dépend du prof, du cours et du

groupe OK

2/ la salle ne dépend que du prof

Not OK (dans prof)

3/ la salle ne dépend que du prof et du cours

not OK (nouvelle association entre

prof et cours)

?

Salle

Salle

Salle

Page 31: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

31

31

Règles (7) : entités et associations

• 2 entités ne peuvent être directement liées : il faut une

association !

• Cependant:

– Une association peut ne pas avoir de « nom »

• Il est des fois difficile à trouver…

– Une association peut ne pas avoir de propriété

• C’est un cas très fréquent

Groupe

Enseigne

Heure

?

Salle

Prof

Cours

Page 32: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

32

32

Règles (8) : pas de dépendance transitive

• Une propriété ne peut dépendre d’une autre propriété qui ne

soit pas l’identifiant

– Permet d’éliminer des sous-entités incluses dans une entité

• Exemple :

– Etudiant(nom, adresse, ville, pays)

– Le pays dépend de la ville or l’identifiant d’étudiant est le nom.

CodeProf

Nom

Prénom

Ville

Pays

Prof

CodeProf

Nom

Prénom

Prof

est dans

NomVille

Pays

Ville 1,1 0,n

Page 33: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

33

33

Première modélisation ‘restreinte’

• Gérer les notes des étudiants

– Hypothèses :

• une base de données pour chaque promo et pour chaque semestre

– Traitements :

• Moyenne par cours pour chaque étudiant

• Moyenne par pôle pour chaque étudiant

• Moyenne générale pour chaque étudiant

• Moyenne par groupe, par cours.

– ‘‘Énoncer le réel’’ à modéliser avec des phrases

• Un cours a un nom, un coefficient, et appartient à un pôle

• Un étudiant a un nom et un prénom, et appartient à un groupe

• Un étudiant obtient les notes DS1, DS2, participation, examen pour

les cours qu’il suit

Page 34: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

34

34

Modèle entité-association (1/2)

Commentaires? Le schéma est simple, il répond au problème

On a un minimum de données

On ne peut pas faire de suivi sur une promo

On ne peut pas faire de suivi par prof

Pas de statistiques sur plusieurs années

Problème de gestion: on aura 4 fois les mêmes programmes

Etudiant

Nom

Prénom

Groupe

Cours

NomCours

Pôle

Coefficient

a obtenu

DS1

DS2

Participation

Examen

0,n 0,n

Page 35: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

35

Modèle entité-association (2/2)

0,n 0,n a obtenu

Note

0,n

Etudiant

Nom

Prénom

Groupe

TypeNote

Type

Coefficient

Cours

NomCours

Pôle

Coefficient

Etudiant

Nom

Prénom

Groupe

Cours

NomCours

Pôle

Coefficient

a obtenu

DS1

DS2

Participation

Examen

0,n 0,n

Page 36: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

36

36

Modélisation ‘complète’

• Gérer les notes des étudiants veut dire:

– Hypothèses :

• Une base de données pour l’Université (pour plusieurs années)

• On veut gérer les profs pour faire des stats par profs, par promos, etc...

– Problèmes :

• Gestion des redoublement, de la situation (actuelle) d’un étudiant

• Cohabitation de notes sur plusieurs années, des profs, des étudiants ??

• Les matières sont enseignés par plusieurs profs, qui met les notes ??

• Comment modéliser qu’un prof enseigne à un groupe de TP ?

– Données :

• Etudiants, Matières, Notes

• TypeDeNotes, Periodes, Profs, Groupes, etc...

Page 37: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

37

37

Modèle entité-association

1,n 1,n a obtenu

Note

Est dans Enseigne

Nb heures

1,n

1,n

1,n

1,n

1,n 1,n

1,n

1,n

1,n

1,n

Etudiant

Nom

Prénom

TypeNote

Type

Coefficient

Cours

NomCours

Pôle

Coefficient

Période

Code

Année

Semestre

Groupe

Code

Profs

Nom

Prénom

Adresse

Page 38: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

38

TD Conception (MCD/Modèle EA)

Page 39: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

39

Correction de l’exercice de conception

---

Quelques modèles Entité Associations possibles

Employé

Matricule

NomEmp

PrénomEmp

SalaireEmp

N°DsRueEmp

TelEmp

DateNaissEmp

Division

NumDiv

NomDiv

Travaille

a la

Rédige

Concern

e

Qté

Remise

Passée

Fonction

NumFonc

DescFonc

Prime

Vente

NumVente

DateVente

DateLivr

FraisPort

Produit

NumProd

NomProd

PrixUnitaire

Fournisseur

NumFour

NomFour

PrénomFour

N°DsRue

TelFour

fourni par

Client

NumCli

NomCli

PrénomCli

N°DsRueCli

TelCli

Messager

NumMess

NomMess

N°DsRueMess

TelMess Livrée par

Livraison

NumLiv

NomLiv

PrénomLiv

N°DsRue

TelLiv Livrée à

Rue

IdRue

NomRue

CP

Dans

Ville

IdVille

NomVill

e

Dans

Dans la

rue1

Dans la

rue2

Dans la

rue3

Dans la

rue4

Dans la

rue5

0-1

1-n

1-1

1-n 1-n

1-1

1-1

1-1

1-1 1-n

0-n

1-1

1-n

1-n

1-1

1-1

1-1

1-1

1-n

1-n

1-1

1-1

1-n

1-n

1-n

1-1

1-n

1-n

1-n

1-n

Pays

IdPays

NomPay

s

Employé

Matricule

SalaireEmp

DateNaissEmp

Division

NumDiv

NomDiv

Travaille

a la

Rédige

Concern

e

Qté

Remise

Passée

Fonction

NumFonc

DescFonc

Prime

Vente

NumVente

DateVente

DateLivr

FraisPort

Produit

NumProd

NomProd

PrixUnitaire

Fournisseur

NumFour

fourni par

Client

NumCli

Messager

NumMess

Livrée par

Livrée à

Rue

IdRue

NomRue

CP

Dans1

Ville

IdVille

NomVill

e

Pays

IdPays

NomPay

s

Dans2

Est1

Est2

Est3

Est4

Personne

IdPers

Nom

Prénom

N°DsRue

Tel

Ds

Rue

0-1 1-n

1-1

1-n 1-n

1-1 1-1

1-1

1-1 1-n

0-n

1-1 1-n

1-n

1-1

1-1

1-1

1-1 0-1

0-1

0-n

0-1

0-1

1-1

1-n

1-n

1-n

1-1

1-1

1-n

Division

NumDiv

NomDiv

Travaille 1-n

Est dirigée

Employé

Matricule

SalaireEmp

DateNaissEmp

AdresseVoie

AdresseCP

Tel

1-1 0-1

1-1

Fonction

NumFonc

DescFonc

Prime (taux)

a

1-1

0-n

Vente

NumVente

DateVente

DateLivr

FraisPort

Réalise

directement

1-1

Client

NumCli

Nom

Prénom

AdresseVoie

AdresseCP

Tel

0-n

Concerne

Qté

Remise

Produit

NumProd

NomProd

PrixUnitaire

1-n

0-n

Fournisseur

NumFour

Nom

Prénom

AdresseVoie

AdresseCP

Tel

fourni par 1-1 1-n

Messager

NumMess

Nom

Prénom

AdresseVoie

AdresseCP

Tel

Livre

1-1 1-n

habite

Ville

Ville

Pays

Pays

dans

1-n

1-n

1-1

1-1

habite

habite

habite

1-1

1-n

1-n

1-1

Code

postal

CP

dans

1-n

1-1

Destinataire

NumDest

Nom

Prénom

AdresseVoie

AdresseCP

Tel

0-n

1-n

habite

1-1

1-n

1-1

1-n

Correction de l’exercice de conception

---

Quelques modèles Entité Associations possibles

Page 40: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

40

Modèle relationnel

Page 41: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

41

Le modèle relationnel

• En 1970, Edward Codd, Prix Turing 1981, chercheur chez IBM,

propose le Modèle Relationnel, basé la Logique du premier ordre

définie par les mathématiciens de la fin du 19e siècle pour formaliser

le langage des mathématiques

A Relational Model of Data for Large Shared Data Banks,

CACM 13, No. 6, June 1970

• Il définit le Calcul Relationnel et l’Algèbre Relationnelle, sur lesquels

sont basés SQL (Structured Query Language), le langage standard de

manipulation (LMD) et de description des données (LDD) de tous les

SGBD Relationnels actuels

Théorème de Codd: une question est exprimable en calcul relationnel

si et seulement si elle peut être évaluée avec une expression de l’algèbre

relationnelle – de plus, il est facile de transformer une requête du calcul

relationnel en une expression algébrique qui évalue cette requête.

Page 42: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

42

Domaine • ENSEMBLE DE VALEURS

• Exemples:

– ENTIER

– REEL

– CHAINES DE CARACTERES

– EUROS

– SALAIRE = {4 000..100 000}

– COULEUR= {BLEU, BLANC, ROUGE}

Page 43: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

43

Produit cartésien

• Le produit cartésien D1x D2x ... x Dn est l’ensemble

des tuples (n-uplets) <V1,V2,....Vn> tels que ViDi

• Exemple:

– D1 = {Bleu,Blanc,Rouge}

– D2 = {Vrai, Faux}

Bleu Vrai Bleu Faux Blanc Vrai Blanc Faux Rouge Vrai Rouge Faux

D1x D2 =

Page 44: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

44

Relation, attribut

• Relation = sous-ensemble du produit cartésien d’une liste de domaines – Une relation est caractérisée par un nom

– Exemple:

• D1 = COULEUR

• D2 = BOOLEEN

• Plus simplement … – Une relation est une table à deux dimensions

– Une ligne est un tuple

– Un nom est associé à chaque colonne afin de la repérer indépendamment de son numéro d'ordre

• Attribut = – nom donné à une colonne d'une relation

– prend ses valeurs dans un domaine

Bleu Faux

Blanc Vrai

Rouge Vrai

CoulVins Coul Choix

Page 45: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

45

Exemple de relation

CHENAS 1983 BEAUJOLAIS ROUGE

TOKAY 1980 ALSACE BLANC

TAVEL 1986 RHONE ROSE

CHABLIS 1986 BOURGOGNE BLANC

ST-EMILION 1987 BORDELAIS ROUGE

VINS CRU MILL REGION COULEUR

Page 46: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

46

Clé

• Définition = Groupe d’attributs minimum qui détermine un tuple unique dans une relation

• Exemples – {CRU,MILLESIME} DANS VINS

– NSS DANS PERSONNE

• Contrainte d’entité – Toute relation doit posséder au moins une clé documentée

Page 47: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

47

Clé Etrangère

• Définition = Groupe d’attributs devant apparaître

comme clé dans une autre relation

• Les clés étrangères définissent les contraintes

d'intégrité référentielles

– Lors d'une insertion, la valeur des attributs doit exister dans

la relation référencée

– Lors d'une suppression dans la relation référencée les tuples

référençant doivent disparaître

• Elles correspondent aux liens obligatoires entre les

entités (modèle E/A)

Page 48: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

48

Schéma

• Schéma de relation

– Définition = Nom de la relation, liste des attributs avec

domaines, et clé de la relation

– Exemple

• VINS(NV: Int, CRU:texte, MILL:entier, DEGRE: Réel,

REGION:texte)

– Par convention, la clé primaire est soulignée

• Intention et extension de relation

– L'intention de la relation = le schéma de la relation

– Une instance de table représente une extension de la

relation

• Schéma d’une BD relationnelle = l'ensemble des

schémas des relations composantes

Page 49: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

49

Exemple de Schéma

• BUVEURS (NB, NOM, PRENOM, TYPE)

• VINS (NV, CRU, MILL, DEGRE)

• ABUS (NB, NV, DATE, QUANTITE)

• CLES ETRANGERES (italique)

–ABUS.NV référence VINS.NV

–ABUS.NB référence BUVEURS.NB

NB NV DATE QUANTITE ABUS

NV CRU MILL. DEGRE VINS NB NOM PRENOM TYPE BUVEURS

NB NV DATE QUANTITE

Page 50: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

50

Exemple de modélisation relationnelle

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Page 51: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

51

Clés primaires

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Page 52: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

52

Clés étrangères

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Page 53: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

53

Métabase

DICTIONNAIRE DE DONNEES, ORGANISE SOUS

FORME RELATIONNELLE, CONTENANT LA

DESCRIPTION DES RELATIONS, ATTRIBUTS,

DOMAINES, CLES, etc.

RELATIONS

12

14

1

PERSO

PERSO

SYS

4

5

4

NUM BASE NOM NBATT

EMPLOYE

DEPARTEMENT

RELATIONS

ATTRIBUTS

ENTIER

TEXTE

TEXTE

12

12

12

NUM TYPE NOM NUMREL

NUM

NOM

PNOM

1

2

3

Page 54: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

54

Conception de bases de données

(Passage au MLD)

Page 55: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

55

Passage au niveau logique

• Le modèle conceptuel est un compromis entre la flexibilité

de la langue courante et la rigueur nécessaire d’un

traitement informatisé.

• Le niveau logique est une étape de plus vers cette

informatisation

– Utilisation du formalisme du modèle relationnel : • tables (ou relations)

• attributs

• domaine

• clefs

• contrainte d’intégrité référentielles (relations entre tables)

– Simplification du schéma de la base

• Des règles trop strictes entraînent des schémas trop complexes

• On ‘‘tolère’’ un peu de redondance ou quelques valeurs nulles....

Page 56: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

56

Propriétés, Entités

• Règle 1 : Chaque propriété devient un attribut.

• Règle 2 : Chaque entité devient une table et son

identifiant devient sa clef primaire

• Règle 3 : Une association peut :

– être ‘‘absorbée’’ par l’une ou l’autre des entités

– devenir une table

Page 57: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

57

Cas 1

• Un prof enseigne un et un seul

cours

• Un cours est enseigné par un et

un seul prof

Nom Prénom Adresse NomCours Description NbreHeures

Bouganim Luc Paris Info Informatique 44

Crenn Isabelle Paris Math Mathématiques 78

Rousseau Martine Versailles Droit Droit 26

Solution 1

Solution 2

Nom Prénom Adresse

Bouganim Luc Paris

Crenn Isabelle Paris

Rousseau Martine Versailles

NomCours Description

Info Informatique

Math Mathématiques

Droit Droit

Nom NomCours Nbreheures

Bouganim Info 44

Crenn Math 78

Rousseau Droit 26

Profs

Nom

Prénom

Adresse

Cours

NomCours

Description

Enseigne

NbreHeures

1,1 1,1

Page 58: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

58

Cas 2

• Un prof enseigne un et un seul

cours

• Un cours est enseigné par un

prof ou n’est pas enseigné

Nom Prénom Adresse NomCours Description NbreHeures

Bouganim Luc Paris Info Informatique 44

Crenn Isabelle Paris Math Mathématiques 78

Droit Droit

Nom Prénom Adresse NomCours NbreHeures

Bouganim Luc Paris Info 44

Crenn Isabelle Paris Math 78

NomCours Description

Info Informatique

Math Mathématiques

Droit Droit

Solution 1

Solution 2

Profs

Nom

Prénom

Adresse

Cours

NomCours

Description

Enseigne

NbreHeures

1,1 0,1

Page 59: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

59

Cas 3

• Un prof enseigne un cours ou

aucun

• Un cours est enseigné par un et

un seul prof

Nom Prénom Adresse NomCours Description NbreHeures

Bouganim Luc Paris Info Informatique 44

Crenn Isabelle Paris Math Mathématiques 78

Rousseau Martine Versailles

Nom Prénom Adresse

Bouganim Luc Paris

Crenn Isabelle Paris

Rousseau Martine Versailles

Solution 1

Solution 2

Nom NomCours Description NbreHeures

Bouganim Info Informatique 44

Crenn Math Mathématiques 78

Profs

Nom

Prénom

Adresse

Cours

NomCours

Description

Enseigne

NbreHeures

0,1 1,1

Page 60: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

60

Cas 4

• Un prof enseigne un cours ou

aucun

• Un cours est enseigné par un

prof ou n’est pas enseigné

Nom Prénom Adresse NomCours Description NbreHeures

Bouganim Luc Paris Info Informatique 44

Crenn Isabelle Paris

Droit Droit

Nom Prénom Adresse

Bouganim Luc Paris

Crenn Isabelle Paris

NomCours Description

Info Informatique

Droit Droit

Solution 1

Solution 2 Nom NomCours Nbre Heures

Bouganim Info 44

Profs

Nom

Prénom

Adresse

Cours

NomCours

Description

Enseigne

NbreHeures

0,1 0,1

Page 61: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

61

Cas 5

• Un prof enseigne un et un seul

cours

• Un cours est enseigné par un

ou plusieurs profs

Nom Prénom Adresse NomCours Description NbreHeures

Bouganim Luc Paris Info Informatique 20

Crenn Isabelle Paris Info Informatique 24

Rousseau Martine Versailles Droit Droit 26

Nom Prénom Adresse NomCours NbreHeures

Bouganim Luc Paris Info 20

Crenn Isabelle Paris Info 24

Rousseau Martine Versailles Droit 26

NomCours Description

Info Informatique

Droit Droit

Solution 1

Solution 2

Profs

Nom

Prénom

Adresse

Cours

NomCours

Description

Enseigne

NbreHeures

1,1 1,n

Page 62: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

62

Cas 6

• Un prof enseigne un ou

plusieurs cours

• Un cours est enseigné par un et

un seul prof

Nom Prénom Adresse NomCours Description NbreHeures

Bouganim Luc Paris Info Informatique 20

Crenn Isabelle Paris Math Mathématique 48

Crenn Isabelle Paris Droit Droit 26

Nom Prénom Adresse

Bouganim Luc Paris

Crenn Isabelle Paris

Solution 1

Solution 2

Nom NomCours Description NbreHeures

Bouganim Info Informatique 20

Crenn Math Mathématique 48

Crenn Droit Droit 26

Profs

Nom

Prénom

Adresse

Cours

NomCours

Description

Enseigne

NbreHeures

1,n 1,1

Page 63: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

63

Cas 7

• Un prof enseigne un ou

plusieurs cours

• Un cours est enseigné par un

ou plusieurs profs

Nom Prénom Adresse NomCours Description NbreHeures

Bouganim Luc Paris Info Informatique 22

Crenn Isabelle Paris Info Informatique 26

Crenn Isabelle Paris Droit Droit 34

Solution 1

Solution 2

Nom Prénom Adresse

Bouganim Luc Paris

Crenn Isabelle Paris

NomCours Description

Info Informatique

Droit Droit

Nom NomCours Nbreheures

Bouganim Info 22

Crenn Info 26

Crenn Droit 34

Profs

Nom

Prénom

Adresse

Cours

NomCours

Description

Enseigne

NbreHeures

1,n 1,n

Page 64: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

64

Cas 8

Prof Groupe

Cours

enseigne

Heure

Salle

1,n

1,n

1,n

Nom Prénom Adresse

Bouganim Luc Paris

Crenn Isabelle Paris

Groupe Option Responsable

2.1 Finance Guter Paul

2.2 Comptabilité Bourdin Jean

Nom NomCours Groupe heure Salle

Bouganim Info 2.1 10h A1

Crenn Math 2.1 12h A3

Crenn Info 2.2 17h A1

Bouganim Info 2.1 14h A2

NomCours Description

Info Informatique

Math Mathématique

Page 65: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

65

Passage au modèle relationnel - Conclusion

• Objectifs

– Ne pas créer de tables inutiles

– Ne pas dégrader le modèle conceptuel (pas de propriété

répétitive ni sans signification)

• Méthode

– Si possible, passer les propriétés de l’association dans

l’une ou l’autre des entités mais:

• Si la cardinalité minimum est 0, on ne peut le faire car, pour

certaines entités, il y aurait des valeurs nulles (ex. un prof ne

donnant pas de cours)

• Si la cardinalité maximum est n, on ne peut le faire car il y aurait

des attributs répétitif (ex. un prof donnant plusieurs cours)

– Sinon, créer une table pour l’association contenant

• les clefs des entités associées

• les propriétés de l’association

Page 66: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

66

Algèbre relationnelle

Page 67: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

67

Algèbre relationnelle

OPERATIONS PERMETTANT D'EXPRIMER LES

REQUETES SOUS FORME D'EXPRESSIONS

ALGEBRIQUES

• Avantages – Concis

– Sémantique simple

– Représentation graphique

– Utile pour raisonner (cf. TD) – peu d’erreur de syntaxe !

– Utile pour l’optimisation de requêtes

Page 68: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

68

Projection

• Elimination des attributs non désirés et suppression

des tuples en double

• Relation Relation notée: a1,a2,...Ap (R)

VINS Cru Mill Région Qualité

VOLNAY BOURGOGNE

CHENAS BEAUJOLAIS

JULIENAS BEAUJOLAIS

(VINS) Cru Région

VOLNAY 1983 BOURGOGNE A

VOLNAY 1979 BOURGOGNE B

CHENAS 1983 BEAUJOLAIS A

JULIENAS 1986 BEAUJOLAIS C

Cru,Région

Cru,Région (VINS) =

Page 69: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

69

Restriction

• Obtention des tuples de R satisfaisant un critère Q

• Relation Relation, notée Q(R)

• Q est le critère de qualification de la forme :

– Ai Valeur, = { =, <, ≥, >, ≤ , != }

– Il est possible de réaliser des "ou" (conjonction) et des "et" (disjonction)

de critères simples

MILL>1983

VINS Cru Mill Région Qualité

VOLNAY 1983 BOURGOGNE A

VOLNAY 1979 BOURGOGNE B

CHENAS 1983 BEAUJOLAIS A

JULIENAS 1986 BEAUJOLAIS C

VINS Cru Mill Région Qualité

JULIENAS 1986 BEAUJOLAIS C Mill>1983 (VINS) =

Page 70: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

70

Jointure

• Composition des deux relations sur un domaine commun

• Relation Relation Relation

– notée

• Critère de jointure

– Attributs de même nom égaux • Attribut = Attribut

• Jointure naturelle

– Comparaison d'attributs • Attribut1 Attribut2

• Théta-jointure

• Cas particulier : équi-jointure

Page 71: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

71

Exemple de Jointure

VINS Cru Mill Qualité

VOLNAY 1983 A

VOLNAY 1979 B

CHABLIS 1983 A

JULIENAS 1986 C

LIEU Cru Région QualMoy

VOLNAY Bourgogne A

CHABLIS Bourgogne A

CHABLIS Californie B

VINSREG Cru Mill Qualité Région QualMoy

VOLNAY 1983 A Bourgogne A

VOLNAY 1979 B Bourgogne A

CHABLIS 1983 A Bourgogne A

CHABLIS 1983 A Californie B VINS

Cru=Cru

LIEU =

Page 72: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

72

Exemple de -Jointure

RESPONSABLE DEPT SALAIRE

1

2

3

4

230 250 300 270

RESULTAT

DURAND

DUPONT

EMPLOYES

MARTIN

DURAND

DUPONT

DUPOND

1

1

2

3

NOM DEPT SALAIRE

130 235 280 150

NOM DEPT E.SALAIRE

1

2 235

280

R.SALAIRE

230

250

EMPLOYES E RESPONSABLE R = E.salaire > R.salaire et E.dept = R.dept

NB : signification de la requête ?

Employés ayant un salaire supérieur à celui du responsable de leur département

Page 73: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

73

Unions, intersections, différences

• Opérations binaires

– Relation Relation Relation

• Opérations pour des relations de même schéma

– UNION notée

– INTERSECTION notée

– DIFFERENCE notée —

• Extension pour des relations de schémas différents

– Ramener au même schéma avec des valeurs nulles

Page 74: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

74

Union (

UNION ENSEMBLISTE POUR DES RELATIONS DE MEME SCHEMA

Exemple : VINS1 VINS2

VINS CRU MILL REGION COULEUR

Chenas 1983 Beaujolais Rouge

Tokay 1980 Alsace Blanc

Tavel 1986 Rhône Rosé

Chablis 1985 Bourgogne Rouge

CHENAS 1983 BEAUJOLAIS ROUGE

TOKAY 1980 ALSACE BLANC

TAVEL 1986 RHONE ROSE

Vins1 Cru Mill Region Couleur

TOKAY 1980 ALSACE BLANC

CHABLIS 1985 BOURGOGNE ROUGE

Vins2 Cru Mill Region Couleur

Page 75: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

75

Intersection ()

INTERSECTION ENSEMBLISTE POUR DES RELATIONS DE MEME SCHEMA

Exemple : VINS1 VINS2

VINS CRU MILL REGION COULEUR

Tokay 1980 Alsace Blanc

CHENAS 1983 BEAUJOLAIS ROUGE

TOKAY 1980 ALSACE BLANC

TAVEL 1986 RHONE ROSE

Vins1 Cru Mill Region Couleur

TOKAY 1980 ALSACE BLANC

CHABLIS 1985 BOURGOGNE ROUGE

Vins2 Cru Mill Region Couleur

Page 76: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

76

Différence (-) DIFFERENCE ENSEMBLISTE POUR DES RELATIONS DE MEME SCHEMA

Exemple : VINS1 - VINS2

VINS CRU MILL REGION COULEUR

Chenas 1983 Beaujolais Rouge

Tavel 1986 Rhône Rose

CHENAS 1983 BEAUJOLAIS ROUGE

TOKAY 1980 ALSACE BLANC

TAVEL 1986 RHONE ROSE

Vins1 Cru Mill Region Couleur

TOKAY 1980 ALSACE BLANC

CHABLIS 1985 BOURGOGNE ROUGE

Vins2 Cru Mill Region Couleur

Page 77: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

77

Division ()

• PERMET DE RECHERCHER DANS UNE RELATION,

L’ENSEMBLE DES ‘SOUS TUPLES’ QUI SATISFONT UNE

‘SOUS-RELATION’

– inverse du produit cartésien …..

• Le quotient de la relation D(A1, …Ap, Ap+1…An) par la relation

d(Ap+1…An) est la relation Q(A1, …Ap) dont les tuples sont

ceux qui concaténés à tout tuple de d donnent un tuple de D.

– Notations D d = Q

Page 78: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

78

nomAgence nomClient

ParisAuteuil Dupont

NantesCentre Queffelec

Bellecourt Girard

Brotteaux Letailleur

LaDoua Girard

ParisDupleix Dutour

NantesCentre Passard

NantesCentre Martin

Bellecourt Letailleur

Brotteaux Girard

LaDoua Letailleur

LaDoua Lagaffe

NomAgence

Bellecourt

Brotteaux

LaDoua

nomClient Girard Letailleur

Division () - Exemple

Compte Agence

Resultat

=

Page 79: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

79

Représentation graphique

Union - Différence

Jointure critères

Projection

Produit

cartésien

Division

Intersection

Restriction

Page 80: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

80

Récapitulatif

a b c

x y

a x a y b x b y c x c y

Sélection Projection

Produit

Union Intersection

Différence

a1 b1 a2 b1 a3 b2

b1 c1 b2 c2 b3 c3

a1 b1 c1 a2 b1 c1 a3 b2 c2

a a a b c

x y z x y

x y

a

Jointure Naturelle Division

Page 81: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

81

Autres opérateurs

Permet de renommer des attributs

Notation : a1:b1, …, an:bn (Rel)

Affectation () Affecte une expression à une relation temporaire

Notation : Temp Expression_relationnelle

Exemple : Temp r – s

Renomage ()

Page 82: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

82

SemiJoin, AntiJoin, OuterJoin

• SemiJoin

• AntiJoin

• Left OuterJoin

• Right OuterJoin

Page 83: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

83

TD Conception

(Passage au MLD)

TD algèbre relationnelle

Page 84: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

84

Fonctionnalités des bases de données

(en 10 grands principes)

Page 85: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

85

L’approche ‘‘Bases de données’’

BD VIII - Concurrence

d’accès

VII - Gestion des

pannes

I- Indépendance

Physique

IX - Gestion de la

confidentialité

II- Indépendance

Logique

VI - Gestion de la

cohérence

X - Standards

V - Optimisation des

questions

III – Langage de

manipulation

IV - Gestion des

vues

Page 86: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

86

I - Indépendance Physique

• Indépendance des programmes d'applications

vis à vis du modèle physique :

– Possibilité de modifier les structures de stockage

(fichiers, index, chemins d'accès, …) sans modifier les

programmes;

– Ecriture des applications par des non-spécialistes des

fichiers et des structures de stockage;

– Meilleure portabilité des applications et indépendance

vis à vis du matériel.

Page 87: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

87

Modélisation Relationnelle

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Page 88: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

88

II - Indépendance Logique

Les applications peuvent définir des vues logiques de la BD

Gestion des médicaments Cabinet du Dr. Masse

Nombre_Médicaments

Id-M Nom Description Nombre

1 Aspegic 1000 …………………………….. 30

2 Fluisédal …………………………….. 20

3 Mucomyst …………………………….. 230

…. …….. …………………………….. …..

Visites

Id-D Id-P Id-V Date Prix

2 2 3 13 juillet 350

2 3 4 1 mars 250

Visites

Id-D Id-P Id-V Date Prix

2 2 3 13 juillet 350

2 3 4 1 mars 250

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Page 89: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

89

Avantages de l’indépendance logique

• Possibilité pour chaque application d'ignorer les besoins des autres (bien que partageant la même BD).

• Possibilité d'évolution de la base de données sans réécriture des applications : – ajout de champs, ajout de relation, renommage de

champs.

• Possibilité d'intégrer des applications existantes sans modifier les autres.

• Possibilité de limiter les conséquences du partage : Données confidentielles.

Page 90: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

90

III - Manipulation aisée

• La manipulation se fait via un langage déclaratif

– La question déclare l’objectif sans décrire la méthode

– Le langage suit une norme commune à tous les SGBD

– SQL : Structured Query Langage

• Syntaxe (aperçu !)

Select <Liste de champs ou de calculs à afficher>

From <Liste de relations mises en jeu>

Where <Liste de prédicats à satisfaire>

Group By <Groupement éventuel sur un ou plusieurs champs>

Order By <Tri éventuel sur un ou plusieurs champs>

Page 91: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

91

Exemple de question SQL (1)

• Nom et description des médicaments de type

aspirine

Select Nom, Description

From Médicaments

Where Type = ‘Aspirine’

Page 92: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

92

Exemple de question SQL (2)

• Patients parisiens ayant effectués une visite le 15

juin

Select Patients.Nom, Patients.Prénom

From Patients, Visites

Where Patients.Id-P = Visites.Id-P

and Patients.Ville = ’Paris’

and Visites.Date = ’15 juin’

Page 93: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

93

Exemple de question SQL (3)

• Dépenses effectuées par patient trié par ordre

décroissant

Select Patients.Id-P, Patients.Nom, sum(Prix)

From Patients, Visites

Where Patients.Id-P = Visites.Id-P

Group By Patients.Id-P, Patients.Nom

Order By sum(Prix) desc

Page 94: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

94

IV – Gestion des vues

• Les vues permettent d’implémenter l’indépendance

logique en permettant de créer des objets virtuels

• Vue = Question SQL stockée

• Le SGBD stocke la définition et non le résultat

• Exemple : la vue des patients parisiens

Create View Parisiens as (

Select Nom, Prénom

From Patients

Where Patients.Ville = ’Paris’ )

Page 95: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

95

Les vues : des relations virtuelles !

Le SGBD transforme la question sur les vues

en question sur les relations de base

Question Q sur des vues

Définition des vues

Gestionnaire de Vues

Question Q’ sur les relations

de base

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

…. ……. ……. …….

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Médicaments

Id-M Nom Description

1 Aspegic 1000 ……………………………..

2 Fluisédal ……………………………..

3 Mucomyst ……………………………..

…. …….. ……………………………..

Page 96: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

96

Les vues : Mise à jour

• Non définie si la répercussion de la mise à jour vers la

base de données est ambiguë

– ajouter un tuple à la vue calculant le nombre de

médicaments ?

• Restrictions SQL (norme):

– Pas de distinct, d’agrégats, ni d’expression

– La vue contient les clés et les attributs « non nulls »

– Il y a une seule table dans le from

– Requêtes imbriquées possibles

– Certains SGBDs supportent plus de mises à jour

• Clause « With check option »

– Le SGBD vérifie que les tuples insérés ou mis à jour

correspondent à la définition de la vue

Page 97: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

97

Les vues : Les instantanés (snapshot)

• Instantané, Snapshot, vue concrète, vue matérialisée

– matérialisée sur le disque

– accessible seulement en lecture

– peut être réactualisé

• Exemple

– create snapshot Nombre_Médicaments as

Select Id-M, Nom, Description, count(*)

From Médicaments M, Prescriptions P

Where M.Id-M = P.Id-M

refresh every day

• Objectif principal : la performance

Page 98: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

98

V – Exécution et Optimisation

• Traduction automatique des questions déclaratives

en programmes procéduraux :

Utilisation de l’algèbre relationnelle

• Optimisation automatique des questions

Utilisation de l’aspect déclaratif de SQL

Gestion centralisée des chemins d'accès (index,

hachages, …)

Techniques d’optimisation poussées

• Economie de l'astuce des programmeurs

– milliers d'heures d'écriture et de maintenance de logiciels.

Page 99: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

99

Sélection

Patients de la ville de Paris

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

Page 100: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

100

Projection

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

Nom et prénom des patients

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

Page 101: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

101

Jointure

Patients

Id-P Nom Prénom Ville

1 Lebeau Jacques Paris

2 Troger Zoe Evry

3 Doe John Paris

4 Perry Paule Valenton

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Id-P Nom Prénom Ville Id-D Id-P Id-V Date Prix

1 Lebeau Jacques Paris 1 1 2 12 août 180

2 Troger Zoe Evry 1 2 1 15 juin 250

2 Troger Zoe Evry 2 2 3 13 juillet 350

3 Doe John Paris 2 3 4 1 mars 250

Patients et leurs visites

Page 102: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

102

Exemple de plan d’exécution

Select Patients.Nom, Patients.Prénom

From Patients, Visites

Where Patients.Id-P = Visites.Id-P

and Patients.Ville = ’Paris’

and Visites.Date = ’15 juin’

Patients Visites

Page 103: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

103

Plan d’exécution optimisé

Patients Visites Patients Visites

Page 104: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

104

VI - Intégrité Logique

• Objectif : Détecter les mises à jour erronées

• Contrôle sur les données élémentaires

– Contrôle de types: ex: Nom alphabétique

– Contrôle de valeurs: ex: Salaire mensuel entre 5 et 50kf

• Contrôle sur les relations entre les données

– Relations entre données élémentaires:

• Prix de vente > Prix d'achat

– Relations entre objets:

• Un électeur doit être inscrit sur une seule liste électorale

Page 105: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

105

Contraintes d’intégrité

• Avantages :

– simplification du code des applications

– sécurité renforcée par l'automatisation

– mise en commun des contraintes, cohérence

• Nécessite :

– un langage de définition de contraintes d'intégrité

– la vérification automatique de ces contraintes

BD BD

Page 106: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

106

Types de contraintes

• Contrôle sur les données élémentaires

– Contrôle de types : ex: Nom alphabétique

– Contrôle de valeurs : ex: Salaire mensuel entre 1 et 10 K€

– Non Nullité

• Contrôle sur les relations entre les données

– Unicité

– Relations entre données élémentaires : PrixVente>PrixAchat

– Relations entre objets : Un électeur doit être inscrit sur une seule liste

électorale

– Contrainte d’intégrité référentielle : une visite doit être liée à un médecin

et un patient !

• Les SGBD commerciaux supportent généralement peu de

contraintes (par rapport à la norme SQL2)

Page 107: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

107

Exemples de contrainte

• Contraintes d’intégrité référentielles

Docteurs

Id-D Nom Prénom

1 Dupont Pierre

2 Durand Paul

3 Masse Jean

…. …….. ……

Visites

Id-D Id-P Id-V Date Prix

1 2 1 15 juin 250

1 1 2 12 août 180

2 2 3 13 juillet 350

2 3 4 1 mars 250

Prescriptions

Id-V Ligne Id-M Posologie

1 1 12 1 par jour

1 2 5 10 gouttes

2 1 8 2 par jour

2 2 12 1 par jour

2 3 3 2 gouttes

…. …. …. …………

• Vérification lors de l’insertion, la suppression, la modification

• Propagation des suppression, modification en cascade possible

(on delete cascade)

Page 108: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

108

Contraintes d’intégrité : Syntaxe

create table <nom de table> (

<attribut> <domaine> [<contrainte d'attribut>], (mono-

attribut)

<attribut> <domaine> [<contrainte d'attribut>], …

[<contrainte de relation>]) (mono ou multi-attributs)

• Différent types de contraintes :

– Non nullité : not null

– Unicité : unique

– Vérification : check <formule>

– Clé primaire : primary key

– Contrainte d’intégrité référentielle : references <relation>

(<attribut>)

• on delete / on update cascade, set null, set default

• On peut nommer les contraintes

Page 109: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

109

Contraintes d’intégrité : Remarques finales

• Contraintes supportées (exemple d’Oracle)

– Les contraintes faisant intervenir un ou plusieurs

attributs

d’une seule table et d’un seul tuple

– Contraintes d’intégrité référentielles avec cascade

• Mécanisme puissant :

– Exemple : supprimer les patients n’ayant pas consulté

depuis 2 ans Docteurs Visites Prescriptions

Médicaments Patients

Page 110: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

110

Déclencheurs : Définition

• Définition : Déclencheurs ou Triggers

– Règle E – C – A : Évènement – Condition – Action

Lorsque l’évènement se produit

– Insert / Update / Delete pour une relation donnée

si la condition est remplie

– Prédicat SQL optionnel

alors exécuter l’action

– Code à exécuter (ex. PLSQL sous Oracle)

– Pour chaque tuple concerné ou une fois pour

l’évènement

Page 111: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

111

Déclencheurs : Objectifs

• Objectif : une base de données ‘active’

– valider les données entrées

– créer un audit de la base de données

– dériver des données additionnelles

– maintenir des règles d’intégrité complexes

– implanter des règles métier

– supporter des alertes (envoi de e-mails par exemple)

• Gains

– simplification du code des applications

– sécurité renforcée par l'automatisation

– les déclencheurs sont stockées dans la base

– Cohérence globale des déclencheurs

Page 112: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

112

Déclencheurs : Syntaxe (dans Oracle)

Create trigger <nom de trigger>

before | after permet d ’indiquer quand le trigger va être exécuté

insert | delete | update [of <attributs>] Quel est l’évènement déclencheur

on <relation> indique le nom de la table qui doit être surveillée

[referencing old as <var>, new as <var>] en SQL3, Oracle utilise :new et

:old

for each row Précise si l’action est exécuté 1 fois par tuple concerné ou pour toute la

table

[when <condition>] permet d ’indiquer une condition pour l’exécution du trigger

DECLARE Déclaration de variables pour le bloc PL/SQL

BEGIN Bloc PL/SQL contenant le code de l’action à exécuter

<PL/SQL bloc> Dans SLQ3, on peut indiquer une suite de commande SQL

END

• La syntaxe diffère légèrement suivant le SGBD

Page 113: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

113

Déclencheurs : Exemples simples

Create trigger calcul_TTC after insert on Vente

Begin

update vente set Prix_TTC = Prix_HT*1.206

End ;

Create trigger ModifCommande after update on Commande

For each row

Begin

if :new.qte< :old.qte

then raise_application_error(-9996,‘ La quantité ne peut diminuer’);

End ;

Create trigger ModifCommande after update on Commande

For each row

When (new.qte< old.qte)

Begin

raise_application_error(-9996, ,‘ La quantité ne peut diminuer’);

End ;

Page 114: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

114

Déclencheurs : Remarques finales

• Cascade de triggers – l’action d’un trigger peut déclencher d’autres triggers

• Interactions avec les contraintes – l’action d’un trigger peut causer la vérification des

contraintes

– les actions des contraintes référentielles peuvent déclencher

des triggers (delete cascade, update cascade)

• Mécanisme très (trop ?) puissant – Cascade ‘infinie’

– Tables en ‘mutation’

Usage limité

Page 115: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

115

VII - Intégrité Physique

• Motivations : Tolérance aux fautes – Transaction Failure : Contraintes d'intégrité, Annulation

– System Failure : Panne de courant, Crash serveur ...

– Media Failure : Perte du disque

– Communication Failure : Défaillance du réseau

• Objectifs : – Assurer l'atomicité des transactions

– Garantir la durabilité des effets des transactions commises

• Moyens : – Journalisation : Mémorisation des états successifs des

données

– Mécanismes de reprise

Page 116: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

116

Transactions

Etat cohérent Etat cohérent Incohérence possible...

Begin Commit

Transaction

Begin

CEpargne = CEpargne - 3000

CCourant = CCourant + 3000

Commit T1

Page 117: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

117

Atomicité et Durabilité

ATOMICITE

Begin

CEpargne = CEpargne - 3000

CCourant = CCourant + 3000

Commit T1

Annuler le débit !!

Panne

DURABILITE

Begin

CEpargne = CEpargne - 3000

CCourant = CCourant + 3000

Commit T1

S’assurer que le

virement a été fait !

Crash disque

Page 118: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

118

VIII - Partage des données

BD

• Accès concurrent aux mêmes données

Conflits d’accès !!

Page 119: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

119

VIII - Partage des données

BD

• Le SGBD gère les accès concurrents

Chacun à l’impression d’être seul (Isolation)

Cohérence conservée (Verrouillage)

Page 120: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

120

IX – Confidentialité

• Objectif :

– protéger les données de la base contre des accès non autorisés

• Mécanismes simples et puissants

– Connexion restreinte aux usagers répertoriés (mot de passe)

– Privilèges d'accès aux objets de la base (relation, vue, etc.)

• Repose sur la sécurité de l’architecture (de bout en bout)

Serveur BD

BD

Utilisateur Serveur

BD

BD

Utilisateur

Identification

Authentification

Sécurisation des communications

(confidentialité, intégrité, non répudiation)

Protection du

serveur

Protection

des fichiers

Page 121: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

121

Droits d'accès : Syntaxe de base et rôles

• Syntaxe de base

– Grant <droits> on <objet> to (<usager>*) [with grant option]

– Revoke <droits> on <objet> from (<usager>*)

– <droits> ::= all | select | insert | delete |update | alter

– <objet> ::= relation | vue | procedure

– <usager> ::= public | nom d'usager

• Rôles (SQL3):

– Create role <nom_role> : Création d’un nouveau rôle

– Drop role <nom_role> : Suppression d’un rôle

– Les instructions Grant et Revoke s’appliquent sur des rôles

– Grant <liste roles> to (<usager>*) : Affectation de rôles aux usagers

– Set role <liste_roles> : Activation de rôle(s) pendant une session

Page 122: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

122

Droits d'accès : droits sur les vues

Id-E Nom Prénom Poste Adresse Ville Salaire

1 Ricks Jim 5485 ………. Paris 230

2 Trock Jack 1254 ………. Versailles 120

3 Lerich Zoe 5489 ………. Chartres 380

4 Doe Joe 4049 ………. Paris 160

Id-E Nom Prénom Poste

1 Ricks Jim 5485

2 Trock Jack 1254

3 Lerich Zoe 5489

4 Doe Joe 4049

Nombre

d’employés

Masse

Salariale

4 890

Employés

Service des

ressources

humaines

Public

Page 123: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

123

Droits d'accès : droits évolués • Règles indépendantes du contenu :

– Ex. la secrétaire a accès aux infos administratives

– grant ou revoke sur relation ou vue

• Règles dépendantes du contenu :

– Ex. Le médecin a accès aux dossier de ses patients

– Utilisation de vues paramétrées (e.g. avec Current_User)

• Règles dépendantes du contexte :

– Ex. en l’absence du médecin traitant, tout médecin a accès

au dossier du patient

– Utilisation de vues paramétrées avec tables contextuelles

– Ex. Les salaires ne peuvent être modifié que le 1er du mois

– Utilisation de procédures stockées

Page 124: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

124

X - Standardisation

• L’approche bases de données est basée sur plusieurs

standards

– Langage SQL (SQL1, SQL2, SQL3)

– Communication SQL CLI (ODBC / JDBC)

– Transactions (X/Open DTP, OSI-TP)

• Force des standards

– Portabilité

– Interopérabilité

– Applications multi sources…

Page 125: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

125

Historiquement : architecture centralisée

Terminaux passifs

Mainframe SGBD

Appli 1 Appli 2 Appli n

réseau

données

le minitel Exemple d’instance de cette architecture?

Des terminaux clients sans intelligence, passifs

Un réseau

Un ordinateur central grande puissance (‘mainframe’)

Maintient la base et les applis

Page 126: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

126

Architecture client/serveur

Clients intelligents

serveur SGBD

Appli 1 Appli 2

Appli n

réseau

données code

• Des clients intelligents

– Font tourner les

applications

• Un réseau

• Un serveur

– Maintient la base

Exemple d’instance de cette architecture? ENSTA ?

Page 127: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

127

Architecture 3 tiers

Clients

Serveur de données SGBD

Appli 1 Appli 2 Appli n

réseau

données

le minitel Exemple d’instance de cette architecture?

Des clients

Un réseau

Un serveur d’applications Maintient les applications

Un serveur de données Maintient la base

Sur une ou plusieurs machines

Appli Web

Serveur d’application

Page 128: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

128

Architecture Client-Multiserveurs

SGBD 2

données code

ODBC ODBC

SGBD 1

données code

Appli 1

SQL SQL

SQL SQL

Réservation d’un voyage Exemple d’instance de cette architecture?

• Des clients intelligents

– Font tourner l’application

– Interagissent avec les serveurs

– Combinent les résultats

• Un réseau

• Des serveurs

– Et des bases différentes

Page 129: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

129

Architecture répartie

SGBD 1

données code

SGBD 2

données code

Appli 1 Appli 2

Appli n

• Des clients intelligents

– Font tourner l’application

– Interagissent avec ‘1 SGBD’

(l’application ne voit pas que sa

requête est réacheminée)

• Un réseau

• Des serveurs

– Une même base

– Gèrent chacun une portion

Agences d’une société Exemple d’instance de cette architecture?

Page 130: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

130

Architecture hétérogène

Source 1 : SGBD

données code

Source 2 : serveur Web

données code

Appli 1 Appli 2 Appli n

Médiateur

• Des clients intelligents

– Interagissent avec ‘1 SGBD’

• Un médiateur

– Interroge les sources

– Nettoyage, intégration, etc.

• Des sources de données

– Données hétérogènes

• Type, schéma, etc.

– Gestion des données différente…

Kelkoo Exemple d’instance de cette architecture?

Page 131: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

131

Architecture mobile Clients intelligents

mobiles

serveur

SGBD

Réseau sans fil

données code

Données répliquées et/ou personnelles

Exemple d’instance de cette architecture? Représentant de commerce

• Des clients mobiles intelligents

– Portion SGBD répliquée

(et/ou données personnelles)

– Interagissent avec SGBD externe

• Un réseau sans fil

• Un serveur

– Données durables/partagées

Page 132: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

132

Applications traditionnelles des SGBD

• OLTP (On Line Transaction Processing)

– Cible des SGBD depuis leur existence

– Banques, réservation en ligne ...

– Très grand nombre de transactions en parallèle

– Transactions simples

• OLAP (On Line Analytical Processing)

– Entrepôts de données, DataCube, Data Mining …

– Faible nombre de transactions

– Transactions très complexes

Page 133: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

133

Nouvelles problématiques (1)

• Gestion de données complexes

– Semi-structurées : stockage, indexation, interrogation de

documents XML

– Non-structurées : recherche par le contenu, index

multidimensionnels, relations spatiales et temporelles

• Systèmes de médiation

– De données : intégration de schémas, requêtes de médiation,

interrogation large échelle (requêtes continues, personnalisation,

critères approximatifs, etc)

– De programmes : construction de workflows, optimisation des flux,

grilles de calcul

• • Entrepôts de données et fouille

– Rafraîchissement, requêtes multi-dimensionnelles (cubes)

– Recherche de règles associatives, de dépendances fonctionnelles,

time series …

Page 134: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

134

Nouvelles problématiques (2)

• Mobilité

– BD de localisation, BD embarquées, cohérence des traitements

déconnectés, réseaux de capteurs …

• Sécurité des bases de données

– Modèles de contrôle d’accès et d’usage, chiffrement de bases de

données, anonymisation, hardware sécurisé, BD Hippocratiques,

Private Information Retrieval …

• Architecture et performance

– Grandes mémoires, caches, nouvelles mémoires persistantes,

nouveaux processeurs …

– SGBD auto-administrables

– Encore et toujours : indexation, optimisation de requêtes, réplication,

transactions, benchmarks, etc …

Page 135: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

135

Le langage SQL

Structured Query Langage

Page 136: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

136

SQL : pour quoi faire (1) ? • Avant SQL, rechercher des données satisfaisant une

qualification ressemblait à :

Select B.plage

From Nageurs N, Baignade B

Where N.qualité = ‘excellent’

and B.date between ‘O1-08-89’

and ’31-08-89’and N.idn = B.idn

Page 137: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

137

SQL : pour quoi faire (2) ?

• Une interface plus simple pour les utilisateurs ?

– La majorité des manipulations utilisateurs se font via des

formulaires !

– Mais rend possible les requêtes libres (ex: analyse)

• Simplifier le développement des applications

– Code plus compact et facile à valider/maintenir

– Indépendance physique et logique des programmes par

rapport aux données

– Optimisation automatique et dynamique des requêtes par

le SGBD

• Une puissance d’expression exploitable de nb

façons

– Sélection, mises à jour, intégrité, droits d’accès, audit …

Page 138: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

138

• Trois versions normalisées de SQL : – SQL1 (1986) : version minimale

– SQL1 (1989) : addendum (intégrité)

– SQL2 (1992) : version étendue à trois niveaux de conformité (entry, intermediate, full)

– SQL3 (1999) : version étendue à la gestion d’objets complexes

– SQL3 (2003) : introduction de fonctions de manipulation XML

Le standard SQL (1)

Page 139: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

139

LANGAGE DE DEFINITION DE DONNEES

CREATE TABLE

CREATE VIEW

ALTER ….

...

LANGAGE DE MANIPULATION DE DONNEES

SELECT

INSERT

UPDATE

DELETE

INTEGRATION AUX LANGAGES DE PROGRAMMATION

EXEC SQL

MODULE

PROCEDURE ...

LANGAGE DE CONTROLE

GRANT

REVOKE

COMMIT WORK

ROLLBACK WORK

Le standard SQL (2)

Page 140: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

140

Le langage SQL (1/3)

LDD : Langage de Définition de Données

Création, modification du schéma

Page 141: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

141

EXEMPLE DE BASE DE DONNEES

Page 142: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

142

Création de table

CREATE TABLE <nom_table>

(<def_colonne> * [<def_contrainte_table>*]) ;

< def_colonne > ::= <nom_colonne> < type > [CONSTRAINT nom_contrainte <

NOT NULL |

UNIQUE |

PRIMARY KEY |

CHECK (condition) |

REFERENCES nom_table (colonne) > ]

< def_contrainte_table > ::= CONSTRAINT nom_contrainte <

UNIQUE (liste_colonnes) |

PRIMARY KEY (liste_colonnes) |

CHECK (condition) |

FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes)>

Page 143: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

143

Exemple de création de table CREATE TABLE RDV(

NumRdv Integer,

DateRDV Date,

NumDoc Integer,

NumPat Integer,

Motif Varchar(200),

CONSTRAINT Clé_Primaire_RDV PRIMARY KEY (NumRdv),

CONSTRAINT Référence_DOC FOREIGN KEY (NumDoc) REFERENCES

DOC,

CONSTRAINT Référence_PAT FOREIGN KEY (NumPat) REFERENCES PAT);

L'association d'un nom à une contrainte est optionnelle. Ce nom peut être utilisé

pour référencer la contrainte (ex: messages d'erreurs).

• Exercice 1

– Donnez l’expression SQL de la création des tables DOC et DET

Page 144: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

144

Index, modification du schéma

• Création d’index

– CREATE [UNIQUE] INDEX nom_index ON nom_table (<nom_colonne> * );

• Suppression

– DROP TABLE <nom_table>

– DROP INDEX <nom_index>

• Modification

– ALTER TABLE <nom_table> ADD COLUMN <def_colonne>

– ALTER TABLE <nom_table> ADD CONSTRAINT <def_contrainte_table >

– ALTER TABLE <nom_table> MODIFY <def_colonne>

– ALTER TABLE <nom_table> DROP COLUMN <nom_colonne>

– ALTER TABLE <nom_table> DROP CONSTRAINT <nom_contrainte >

• Exemples

– CREATE INDEX Index_date_RDV ON RDV (DateRDV) ;

– ALTER TABLE RDV ADD COLUMN Commentaires varchar(300);

– ALTER TABLE RDV ADD CONSTRAINT MotifNN NOTNULL(Motif);

• Exercice 2

– Créez un index sur le nom du docteur

– Supprimez l’attribut Motif de la table RDV

– Ajoutez une contrainte de clé primaire à la table MED (sur NumMed)

Page 145: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

145

Le Langage SQL (2/3)

LMD : Langage de Manipulation des Données

(INSERT, DELETE , UPDATE)

Page 146: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

146

Insertion de données : INSERT

INSERT INTO < nom_table >

[( attribute [,attribute] … )]

{VALUES (<value spec.> [, <value spec.>] … ) |

<query specification>} ;

• Exemples :

– INSERT INTO DOC VALUES (1, ‘Dupont’, ‘Paris’);

– INSERT INTO DOC (NumDoc, NomDoc) VALUES (2, ‘Toto’);

– INSERT INTO PAT (NumPat, NomPat, VillePat)

SELECT NumDoc, NomDoc, VilleDoc FROM DOC;

• Exercice 3

– Insérez un ensemble cohérent de tuples dans chaque table

Page 147: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

147

Mise à jour : UPDATE

SYNTAXE :

UPDATE <relation_name>

SET <attribute> = value_expression [, <attribute> = value_expression ] …

[WHERE <search condition> ];

EXEMPLES :

Mettre “Inconnue” quand VilleDoc n’est pas renseignée

UPDATE DOC SET VilleDoc = “Inconnue” WHERE VilleDoc IS NULL

Mettre en majuscule le nom des docteurs qui n’ont jamais prescrit

UPDATE DOC SET NomDoc = UPPER(NomDoc) WHERE NumDoc NOT IN

(SELECT NumDoc FROM ORD)

ATTENTION AUX CONTRAINTES D’INTEGRITE REFERENTIELLES !!!

EXERCICE 4

• Augmenter le prix des aspirines de 10%

• Fixer le prix des médicaments non prescrits à 100 euros

Page 148: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

148

Suppression : DELETE

SYNTAXE :

DELETE FROM <relation_name>

[WHERE <search_condition>];

EXEMPLES :

Supprimer les docteurs quand VilleDoc n’est pas renseignée

DELETE FROM DOC WHERE VilleDoc IS NULL

Supprimer les docteurs qui n’ont jamais prescrit

DELETE FROM DOC WHERE NumDoc NOT IN (SELECT NumDoc FROM ORD)

ATTENTION AUX CONTRAINTES D’INTEGRITE REFERENTIELLES !!!

EXERCICE 5

• Supprimer les patients de moins de 10 ans

• Supprimer les médicaments non prescrits

Page 149: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

149

Correction exercice 1

CREATE TABLE DOC(

NumDoc integer,

NomDoc char(30),

VilleDoc varchar(50),

CONSTRAINT Clé_Primaire_Doc PRIMARY KEY (NumDoc)) ;

CREATE TABLE DET(

NumOrd integer,

NumLig integer,

NumMed integer,

Qté integer,

CONSTRAINT Clé_Primaire_DET PRIMARY KEY (NumOrd, NumLig),

CONSTRAINT Référence_ORD FOREIGN KEY (NumOrd) REFERENCES ORD,

CONSTRAINT Référence_MED FOREIGN KEY (NumMed) REFERENCES MED);

Donnez l’expression SQL de la création des tables DOC et DET

Page 150: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

150

Correction exercice 2 Créez un index sur le nom du docteur CREATE INDEX Index_nom_docteur ON DOC (NomDoc) ; Supprimez l’attribut Motif de la table RDV

ALTER TABLE RDV

DROP COLUMN Motif; Ajoutez une contrainte de clé primaire à la table MED (sur NumMed) ALTER TABLE MED ADD CONSTRAINT cle_prim_MED PRIMARY KEY (NumMed) ;

Page 151: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

151

Correction exercice 3

• INSERT INTO DOC VALUES (11, ‘Dupont’, ‘Paris’);

• INSERT INTO PAT VALUES (23,’Toto’, ‘Paris’, 25)

• INSERT INTO MED VALUES (17, ‘Aspirine’, 4)

• INSERT INTO MED VALUES (18, ‘Feroxite’, 19)

• INSERT INTO RDV VALUES (45, #20/11/2006#, 11, 23, ‘mal de tête’)

• INSERT INTO ORD VALUES (38, #20/11/2006#, 11, 23)

• INSERT INTO DET VALUES (38, 1, 17, 3)

• INSERT INTO DET VALUES (38, 2, 18, 1)

Insérez un ensemble cohérent de tuples dans chaque table (1 par table)

Page 152: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

152

Exercices 4 et 5 : correction

• Augmenter le prix des aspirines de 10%

UPDATE MED

SET Prix = Prix * 1.1

WHERE NomMed LIKE “aspirine%”

• Fixer le prix des médicaments non prescrits à 100 euros

UPDATE MED

SET Prix = 100

WHERE NumMed NOT IN (SELECT NumMed FROM DET);

• Supprimer les patients de moins de 10 ans

DELETE FROM PAT

WHERE AgePat < 10;

• Supprimer les médicaments non prescrits

DELETE FROM MED

WHERE NumMed NOT IN (SELECT NumMed FROM DET);

Page 153: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

153

TD – Création d’une base,

modifications,

et chargement massif

Page 154: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

154

Le Langage SQL (2/3)

LMD : Langage de Manipulation des Données

(SELECT)

Page 155: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

155

EXEMPLE DE BASE DE DONNEES

Page 156: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

156

SELECT : forme générale

SELECT [DISTINCT| ALL] { * | <value exp.> [, <value exp.>]...}

FROM relation [alias], relation [ alias]…

[WHERE <search condition>]

[GROUP BY <attribute> [,<attribute>]...]

[HAVING <search condition>]

[ORDER BY <attribute> [{ASC | DESC}] [,<attribute>[{ASC | DESC}] ]...]

* EXPRESSION DE VALEURS

- Calculs arithmétiques

- Fonctions agrégats

* CONDITION DE RECHERCHE

- Sélection, projection, jointure

- Recherche textuelle

- Recherche par intervalle

- Recherche sur valeur nulle

Page 157: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

157

Forme générale de la condition de recherche

<search condition> ::= [NOT]

<nom_colonne> IS [NOT] NULL

<nom_colonne> constante <nom_colonne>

<nom_colonne> LIKE <modèle_de_chaîne>

<nom_colonne> IN <liste_de_valeurs>

<nom_colonne> (ALL ANY/SOME) <liste_de_valeurs>

EXISTS <liste_de_valeurs>

UNIQUE <liste_de_valeurs>

<tuple> MATCH [UNIQUE] <liste_de_tuples>

<nom_colonne> BETWEEN constante AND constante

AND OR <search condition>

avec

::= < = > <>

Remarques:

<liste_de_valeurs> et <liste_de_tuples> peuvent être déterminés par une requête

<tuple> ::= (<nom_colonne> [,<nom_colonne>]…)

Page 158: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

158

Projections et restrictions simples

Liste des médicaments de plus de 500 FF NomMed

SELECT NomMed FROM MED WHERE Prix> 500 ; Liste des médicaments de plus de 100 € NomMed (prix stocké en FF)

SELECT NomMed FROM MED WHERE Prix/6,55957 > 100 ; Nom des docteurs de LAON NomDoc

SELECT NomDoc FROM DOC WHERE VilleDoc = “Laon” Quelles ont été les motifs de consultations de 25/12/2006 Motif

SELECT DISTINCT Motif FROM RDV WHERE DateRDV = #25/12/2006# EXERCICE 6 • Liste des patients de plus de 40 ans NumPat, NomPat • Age des patients en mois (il est stocké en année) NomPat, AgeMois • Numéro des docteurs ayant consulté entre le 1/9 et le 31/12/06 NumDoc • Nom des patients niçois de plus de 36 ans NumPat, NomPat

Page 159: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

159

Restrictions complexes et jointures

Liste des patients ayant un RDV avec le docteur "Dupont" NomPat

SELECT DISTINCT PAT.NomPat FROM PAT, RDV, DOC WHERE PAT.NumPat = RDV.NumPat and RDV.NumDoc = DOC.NumDoc and DOC.NomDoc like “dupont”; Médicaments commençant par « ASPI » prescrits le 25/12/2006 NomMed

SELECT DISTINCT M.NomMed FROM MED M, DET D, ORD O WHERE M.NumMed = D.NumMed and D.NumOrd = O.NumOrd and O.Date = #25/12/2006# and NomMed like “ASPI%”; Docteurs ayant le même nom qu’un patient NomDoc

SELECT D.NomDoc FROM PAT P, DOC D WHERE P.NomPat = D.NomDoc; EXERCICE 7 • Docteurs ayant le même nom que leur patient NomDoc • Nom des médicaments prescrits le 25/12/2006 NomMed • Nom des docteurs ayant un RDV pour un motif commençant par

‘grippe’NomDoc • Liste des quantité distinctes prescrites du médicament Bubol Qté

Page 160: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

160

Requêtes imbriquées : IN et EXIST

Liste des patients ayant un RDV avec le docteur "Dupont" NomPat

SELECT DISTINCT P.NomPat FROM PAT P, RDV R, DOC D

WHERE P.NumPat = R.NumPat and R.NumDoc = D.NumDoc and D.NomDoc = “Dupont”;

SELECT P.NomPat FROM PAT P WHERE P.NumPat in

(SELECT R.NumPat FROM RDV R WHERE R.NumDoc in

(SELECT D.NumDoc FROM DOC WHERE D.NomDoc = “Dupont”));

SELECT P.NomPat FROM PAT P WHERE EXISTS

(SELECT * FROM RDV R WHERE P.NumPat = R.NumPat and EXISTS

(SELECT * FROM DOC D WHERE R.NumDoc=D.NumDoc and D.NomDoc = “Dupont”));

SELECT P.NomPat FROM PAT P WHERE EXISTS

(SELECT * FROM RDV R WHERE EXISTS

(SELECT * FROM DOC D WHERE P.NumPat = R.NumPat and R.NumDoc = D.NumDoc

and D.NomDoc = “Dupont”));

EXERCICE 8 (avec IN ou EXIST)

• Nom des docteurs ayant au moins un RDV pour une grippe NomDoc

• Nom des patients ayant eu des RDV avec "Dupont" et "Durand" NomPAT

• Nom des patients qui n'ont jamais eu de rendez-vous NomPAT

Page 161: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

161

Calculs d'agrégats

Les fonctions d’agrégation (Count, Sum, Avg, Min, Max) permettent de réaliser des calculs sur des ensembles de données

• Calcul de statistiques globales – Nombre de patients : SELECT count(*) FROM PAT

– Prix moyen des médicaments : SELECT avg(Prix) FROM MED

• Calcul de statistiques par groupe – Nombre de patients par ville :

SELECT VillePat, count(*) NbPatient FROM PAT GROUP BY VillePat

– Nombre de patients par ville ayant consulté pour un mal de tête

SELECT VillePat, count(DISTINCT(NumPat)) NbPatient FROM PAT, RDV

WHERE PAT.NumPat = RDV.NumPat and Motif = ‘mal de tête’ GROUP BY VillePat

– Ville où plus de 10 patients ont consulté pour un mal de tête

SELECT VillePat FROM PAT, RDV

WHERE PAT.NumPat = RDV.NumPat and Motif = ‘mal de tête’

GROUP BY VillePat

HAVING count(DISTINCT(NumPat)) > 10

Page 162: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

162

Agrégats : autres exemples et exercices • Nom du(des) médicament(s) le(s) moins cher(s)

SELECT NomMed FROM MED

WHERE Prix = SELECT MIN(Prix) FROM MED

• Total des prix des médicaments prescrits par patient

SELECT P.NomPat, sum(M.prix * D.Qté) PrixTotal

FROM PAT P, ORD O, DET D, MED M

WHERE M.NumMed = D.NumMed AND D.NumOrd = O.NumOrd AND O.NumPat = P.NumPat

GROUP BY P.NomPat

• Moyenne du : Total des prix des médicaments prescrits par patient …

SELECTAVG(TMP.PrixTotal)

FROM (

SELECT P.NomPat, sum(M.prix * O.Qté) PrixTotal

FROM PAT P, ORD O, DET D, MED M

WHERE M.NumMed = D.NumMed AND D.NumOrd = O.NumOrd AND O.NumPat = P.NumPat

GROUP BY P.NomPat

) TMP

EXERCICE 9

• Nombre total d’ordonnances

• Nombre d’ordonnances par docteur

• Age du plus jeune patient

• Nom du plus jeune patient

Page 163: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

163

Union/Intersection/Différence

<requêteSQL_A>

UNION | INTERSECT | EXCEPT

[ALL]

[CORRESPONDING [BY <liste_de_colonnes>]]

<requêteSQL_B>

[ALL] permet de conserver les doublons dans le résultat

[CORRESPONDING BY] n’est en général pas implanté

(mais peut etre remplacé par une jointure)

BY liste de colonnes précisée réduit « l’assiette » de

l’opération au sous-ensemble spécifié de colonnes…

CORRESPONDING précise que l’intersection se fait sur

le nom des colonnes et non sur leur position…

Page 164: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

164

Union/Inter°/Diff. : exemples et exercices

• Ensemble des personnes de la base médicale

SELECT NomDoc NomPers FROM DOC

UNION

SELECT NomPat NomPers FROM PAT

• Patients qui sont aussi médecins

SELECT NomPat PatDoc FROM PAT

INTERSECT

SELECT NomDoc PatDoc FROM DOC

• Patients qui ne sont pas médecins

SELECT NomPat Patient FROM PAT

EXCEPT

SELECT NomDoc Patient FROM DOC

EXERCICES 10

• Nom des médicaments jamais prescrits

• Villes mentionnées dans la base

• Villes où il y a au moins un docteur mais aucun patient

• Villes où il y a au moins un docteur et au moins un patient

Page 165: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

165

Des différences selon le SGBD…

Access SQL Server Oracle

GROUP BY Y Y Y

HAVING Y Y Y

UNION Y Y Y

INTERSECT N N Y

EXCEPT N N Y (MINUS)

CORRESPONDING BY N N N

Page 166: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

166

Jointure Interne / Externe

<Join_expression> ::=

<table-ref> [NATURAL] [<join_type>] JOIN <table-ref>

[ON <condition> USING <nom_colonne> *]

<table-ref> CROSS JOIN <table-ref>

<join_type> ::=

INNER

LEFT [OUTER]

RIGHT [OUTER]

FULL [OUTER]

Évite d’écrire la condition de jointure

(clause d’égalité sur les colonnes de même nom…)

Produit cartésien

(INNER JOIN avec clause toujours vrai)

USING precise le sous-ensemble des colonnes

communes à considérer dans la jointure

(NB: remplace le ON…)

OUTER est optionnel dans la syntaxe (même fonctionnalité)

…LEFT… UNION…RIGHT…

OUTER produit certains tuples ne joignant pas…

Page 167: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

167

Le Langage SQL (3/3)

Méthodologie

Page 168: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

168

Évaluation « sémantique » d’une requête SQL

1. FROM Réalise le produit cartésien des relations

2. WHERE Réalise restriction et jointures

3. GROUP BY Constitue les partitions (e.g., tri sur l’intitulé du groupe)

4. HAVING Restreint aux partitions désirées

5. SELECT Réaliser les projections/calculs finaux

6. ORDER BY Trier les tuples résultat

XXX

XXX

YYY

ZZZ

XXX

XXX

YYY

ZZZ

AGG1

AGG2

AGG3

XXX

ZZZ

AGG1

AGG3

AGG1 ZZZ

AGG3 XXX

Page 169: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

169

Example (1) • SELECT *

FROM PAT, RDV, DOC

1 Jules

2 Dupont

1 1 1

2 2 2

3 1 3

4 2 1

5 1 2

1 Jules 1 1

2 Dupont 1 1

1 Jules 2 1

2 Dupont 2 1

1 Jules 3 1

1 Dupont 3 1

2 Jules 4 1

1 Dupont 4 1

2 Jules 5 1

1 Dupont 5 1

1 Jules 1 1

2 Dupont 1 1

1 Jules 2 1

2 Dupont 2 1

1 Jules 3 1

1 Dupont 3 2

2 Jules 4 2

1 Dupont 4 2

2 Jules 5 2

1 Dupont 5 2

1 Jules 1 2

2 Dupont 1 2

1 Jules 2 2

2 Dupont 2 2

1 Jules 3 2

1 Dupont 3 2

2 Jules 4 2

1 Dupont 4 2

2 Jules 5 2

1 Dupont 5 2

DOC: RDV: 1

2

3

PAT:

DOC x RDV x PAT:

NumDoc NomDoc VilleDoc NumRDV DateRDV NumDoc NumPat Motif NumPat NomPat VillePat AgePat

NumPat NomPat VillePat AgePat NumRDV DateRDV NumDoc NumPat Motif NumDoc NomDoc VilleDoc

Page 170: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

170

Example (2) • SELECT *

FROM PAT, RDV, DOC

WHERE DOC.NomDoc like “dupont”;

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

Jules

Dupont

NumPat NomPat VillePat AgePat NumRDV DateRDV NumDoc NumPat Motif NumDoc NomDoc VilleDoc

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

Dupont

DOC.NomDoc like ‘Dupont’ (DOCxRDVxPAT): NumPat NomPat VillePat AgePat NumRDV DateRDV NumDoc NumPat Motif NumDoc NomDoc VilleDoc

DOC.NomDoc like ‘Dupont’ (DOCxRDVxPAT):

Page 171: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

171

Examples (3) • SELECT *

FROM PAT, RDV, DOC

WHERE DOC.NomDoc like “dupont” AND

PAT.NumPat = RDV.NumPat AND

RDV.NumDoc = DOC.NumDoc;

2 Dupont 1 1 1 1

2 Dupont 2 2 2 1

2 Dupont 3 1 3 1

2 Dupont 4 2 1 1

2 Dupont 5 1 2 1

2 Dupont 1 1 1 2

2 Dupont 2 2 2 2

2 Dupont 3 1 3 2

2 Dupont 4 2 1 2

2 Dupont 5 1 2 2

2 Dupont 1 1 1 3

2 Dupont 2 2 2 3

2 Dupont 3 1 3 3

2 Dupont 4 2 1 3

2 Dupont 5 1 2 3

DOC.NomDoc like ‘Dupont’ (DOCxRDVxPAT): NumPat NomPat VillePat AgePat NumRDV DateRDV NumDoc NumPat Motif NumDoc NomDoc VilleDoc

DOC.NomDoc like ‘Dupont’ (DOCxRDVxPAT): NumPat NomPat VillePat AgePat NumRDV DateRDV NumDoc NumPat Motif NumDoc NomDoc VilleDoc 2 Dupont 4 2 1 1

2 Dupont 2 2 2 2

Page 172: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

172

Utiliser l’algèbre relationnelle

• En s’entraînant un peu, il semble plus facile d’écrire une requête en algèbre puis de la traduire en SQL

– Cette traduction s’effectue de manière systématique et peut générer des expressions un peu ‘lourde’. Toutefois, elle permet de bien comprendre la requête

– Certaine requêtes ne peuvent s’exprimer en algèbre (Ex: contenant des calculs d’agrégats, groupements)

Toutefois, on peut souvent en exprimer une partie en algèbre…

– La traduction des opérateurs d’algèbre est assez simple (excepté pour la division)

• Sélection = <critère>(R) select * from R where <critère>;

• Projection = <liste>(R) select <liste> from R;

• Jointures (naturelle/théta) = R <critère>S = select * from R, S where <critere>;

• Union/Intersection/Différence opérateur UNION/INTERSECT/EXCEPT…

• Division double négation, expression relationnelle de la division…

Page 173: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

173

Traduction par double négation • On veut diviser R(A1,...,Ap,...,An)

par Q (A1, ..., Ap)

• Et obtenir S (Ap+1, ....., An)

Select Ap+1, ...., An from R R1

where not exists (

select * from Q

where not exists (

select * from R R2

where R2.A1 = Q.A1

and R2.A2 = Q.A2

and ....

and R2.Ap = Q.Ap

and R2.Ap+1 = R1.Ap+1

and ....

and R2.An = R1.An ))

• La logique sur un exemple…

• Nom des docteurs qui ont prescrit tous les médicaments

• NomDoc,NumMed(DOC VIS ORD MED) % NumMed MED

• Equivalent à: Nom des docteurs tels qu’il n’existe pas de médicaments tel qu’il n’existe pas de prescription de ces médicaments faites par ces docteurs

SELECT NomDoc,

FROM DOC WHERE NOT EXIST(

SELECT * FROM MED WHERE NOT EXIST(

SELECT * FROM VIS, ORD

WHERE DOC.NumDoc=VIS.NumDoc AND

VIS.NumVis=ORD.NumVis AND

ORD.NumMed=MED.NumMed

)

);

Page 174: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

174

Erreurs dans l’écriture de requêtes

• Mauvaise compréhension du schéma de la base

• Mauvaise compréhension de la question

• Oubli de clauses dans les prédicats

• Formulation de requêtes correspondant à des

négations

• Instances de la même table

• Doublons

• Base de tests

Page 175: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

175

Schéma et question

• Avant de se lancer dans l’écriture d’une requête, il faut bien

comprendre le schéma des tables sur lequel on va s’appuyer

• Si le schéma est complexe, il faut le dessiner, c.a.d. dessiner

les tables et les relations entre ces tables

• En lisant la question, on repère sur le schéma dans quelle(s)

relation(s) se trouve chaque donnée. On a alors une idée des

tables mises en jeu

• Si la question est complexe, il faut la reformuler et/ou la

décomposer.

• Une fois ce travail effectué, on peut commencer a écrire du

SQL.

Page 176: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

176

Oubli de clauses

• Il est assez facile d’oublier une clause dans les

prédicats de sélection, surtout lorsque l’on joint

plusieurs tables.

• Pour le vérifier, une règle simple pour les requêtes

plates (nécessaire mais non suffisante) :

– Une requête impliquant n tables doit posséder au moins (n-

1) prédicats de jointure (outre les prédicats de sélection).

Page 177: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

177

Reformulation d’une question (1)

• Paraphrasage :

– En exprimant de manière plus détaillée une requête, elle devient plus

claire... (ou plus facilement exprimable)

• Exemple : Qui est dans la base ?

Ensemble des personnes de la base médicale

Nom des médecins et nom des patients

Union des noms des médecins et des noms des patients

SELECT NomDoc NomPers FROM DOC

UNION

SELECT NomPat NomPers FROM PAT

Page 178: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

178

Reformulation (2) : Négation

• Souvent l’inverse de la requête est plus facile à exprimer. Cela est particulièrement

vrai lorsque la requête contient :

• Que

– Dans quelle ville n’y a-t-il QUE des patients de plus de 40 ans?

– Toutes les villes (où il y a au moins un patient de plus 40 ans), moins les villes où il y a un

patient de 40 ans ou moins

• Aucun

– Dans quelle ville n’y a-t-il AUCUN patient de plus de 40 ans?

– L’ensemble des villes, moins celles où il y a au moins un patient de plus de 40 ans

• Tous (conduisant à une division relationnelle…)

– Quels sont les patients qui ont RDV avec TOUS les médecins

– Les patients pour lesquels il n’existe pas de docteur avec qui ils n’ont pas de RDV

• Tous

– Quels sont les patients dont TOUS les motifs de rendez vous sont « mal de tête »

– L’ensemble des patients qui ont un RDV pour un « mal de tête », moins les patients qui ont

un RDV pour un motif différent de « mal de tête »

Page 179: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

179

Reformulation (3) : Décomposition

• En décomposant, on simplifie la compréhension et on diminue

les risques d’erreurs :

– Quels sont les patients dont tous les motifs de rendez vous sont « mal

de tête »

• Paraphrase :

– L’ensemble des patients qui ont un RDV pour un mal de tête moins ceux

qui ont un RDV pour un motif différent

• Décomposition :

– Create view V1 AS …. (patients qui ont un RDV pour un mal de tête)

– Create view V2 AS …. (patients qui ont un RDV pour un motif ≠ mal de

tête)

– SELECT NomPat FROM V1 EXCEPT SELECT NomPat FROM V2

Page 180: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

180

DOC (D2) Durand

Instance de tables

• Il faut parfois utiliser plusieurs instances de la même table Comment savoir?

• Lorsqu’une même table est utilisée pour obtenir deux informations de ‘sémantique différente’ (2 instances différentes d’entité) il faut prendre plusieurs instances de cette table

• Exemple : Nom des patients ayant eu des RDV avec les docteurs "Dupont" et "Durand"

SELECT DISTINCT P.NomPat FROM PAT P, RDV R1, DOC D1, RDV R2, DOC D2 WHERE P.NumPat = R1.NumPat AND R1.NumDoc = D1.NumDoc AND D1.NomDoc =

“Dupont” AND P.NumPat = R2.NumPat AND R2.NumDoc = D2.NumDoc AND D2.NomDoc =

“Durand”;

PAT (P)

RDV (R1)

RDV (R2)

DOC (D1) Dupont

Page 181: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

181

Doublons

• Deux types de doublons peuvent apparaître

– plusieurs réponses sont identiques

– plusieurs réponses sont ‘sémantiquement équivalentes’

• Les premiers s’éliminent en utilisant la clause distinct.

Attention toutefois à son utilisation...

• Le deuxième cas se produit lorsque l’on demande des

combinaisons (ex: couples de personnes, ensemble de 3

pièces etc...). Le résultat (A,B) est ‘sémantiquement

équivalent’ à (B,A).

– Dans ce cas, il suffit d’utiliser un prédicat > entre chaque

composantes afin de n’obtenir qu’une seule des combinaisons

équivalentes :

SELECT P1.Nom, P2.Nom

FROM Personne P1, Personne P2

WHERE P1.Nom > P2.Nom

Page 182: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

182

Base de tests (1) • Quand une requête est vraiment complexe, on peut, malgré

tout, avoir un doute sur la solution trouvée. Dans ce cas, il faut créer l’extension d’une base de test afin de vérifier la validité de la requête.

• Preuve par l’exemple : – Un résultat positif ne prouve rien (c’est probablement juste...)

– Un résultat négatif prouve que la requête est fausse

• Comment trouver l’extension la plus ‘sensible’ possible ? – C’est à dire, l’extension de taille minimum comportant tous les cas et

garantissant la validité de la requête

– Le problème est presque aussi complexe que la résolution de la requête elle-même (mais souvent le fait d’aborder la requête de cette manière permet de mieux la comprendre…)

Page 183: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

183

Base de tests (2)

• Exemple 1 : Les couples de parents ayant au moins deux enfants? – Dans la base de test il faut avoir :

• des couples de parents qui ont 1, 2 et 3 enfants

• et des parents seuls (ayant 2 et 3 enfants)

• Exemple 2 : Producteurs qui ne voient que les films qu’ils produisent – Les producteurs qui voient au moins 1 film qu’ils produisent, moins ceux qui voient au

moins 1 film qu’ils ne produisent pas

Réponse : SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom = S.Nom

MINUS

SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom != S.Nom

Est-ce correct ?

– Dans la base de test il faut avoir :

• un producteur qui ne voit aucun film

• un producteur qui ne voit que des films qu’il produit

• un producteur qui voit des films qu’il produit et d’autres

• Attention, cette base n’est pas forcément suffisante....

Page 184: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

184

Base de tests (3) SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom = S.Nom

MINUS

SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom != S.Nom

SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom = S.Nom

SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom != S.Nom

Le 2ème membre devrait être: SELECT Nom,Titre FROM Spectateur MINUS SELECT Nom,Titre FROM Producteur

Nom1 Titre1

Nom2 Titre1

… …

Spectateur.Nom Spectateur.Titre Producteur.Nom Producteur.Titre

Nom1 Titre1

Nom2 Titre2

… …

Producteur.Nom Producteur.Titre

Nom1 Titre1 Nom1 Titre1

Nom1 Titre1 Nom2 Titre1

Nom2 Titre2 Nom1 Titre1

Nom2 Titre2 Nom2 Titre1

Spectateur.Nom Spectateur.Titre

Producteur.Nom Producteur.Titre

Nom1 Titre1 Nom1 Titre1

Nom1 Titre1 Nom2 Titre1

Nom2 Titre2 Nom1 Titre1

Nom2 Titre2 Nom2 Titre1

Spectateur.Nom Spectateur.Titre

Resultat =

Un spectateur

voit le film du

producteur…

Producteur Nom1 qualifié, ne voit

que le film qu’il produit.

Producteur Nom2 non qualifié…

Page 185: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

185

Exercice 6 : correction • Liste des patients de plus de 40 ans NumPat, NomPat

SELECT NumPat, NomPat

FROM PAT

WHERE AgePat > 40

• Age des patients en mois (il est stocké en année) NomPat, AgeMois

SELECT NomPat, AgePat*12 AgeMois

FROM PAT

• Numéro des docteurs ayant consulté entre le 1/9 et le 31/12/06 NumDoc

SELECT DISTINCT NumDoc

FROM RDV

WHERE DateRDV BETWEEN #01/09/2006# AND #31/12/2006#

SELECT DISTINCT NumDoc

FROM RDV

WHERE DateRDV #01/09/2006# AND DateRDV #31/12/2006#

• Nom des patients niçois de plus de 36 ans NumPat, NomPat

SELECT NumPat, NomPat

FROM PAT

WHERE AgePat > 36 AND VillePat LIKE "Nice"

Page 186: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

186

Exercice 7 : correction • Docteurs ayant le même nom que leur patient NomDoc

SELECT DISTINCT D.NomDoc

FROM PAT P, RDV R, DOC D

WHERE P.NumPat = R.NumPat AND R.NumDoc = D.NumDoc

AND P.NomPat = D.NomDoc;

• Nom des médicaments prescrits le 25/12/2006 NomMed

SELECT DISTINCT M.NomMed

FROM MED M, DET D, ORD O

WHERE M.NumMed = D.NumMed AND D.NumOrd = O.NumOrd

AND O.Date = #25/12/2006# ;

• Nom des docteurs ayant un RDV pour un motif commençant par ‘grippe’NomDoc

SELECT DISTINCT D.NomDoc

FROM RDV R, DOC D

WHERE R.NumDoc = D.NumDoc

AND R.Motif LIKE “grippe%”;

• Liste des quantité distinctes prescrites du médicament Bubol Qté

SELECT DISTINCT D.Qté

FROM MED M, DET D

WHERE M.NumMed = D.NumMed

AND M.NomMed LIKE “Bubol”;

Page 187: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

187

Exercice 8 : correction (1/3)

• Nom des docteurs ayant au moins un RDV pour une grippe NomDoc

SELECT DISTINCT D.NomDoc FROM DOC D, RDV R

WHERE R.NumDoc = D.NumDoc AND R.Motif LIKE “grippe”;

SELECT D.NomDoc FROM DOC D WHERE D.NumDoc IN

(SELECT R.NumDoc FROM RDV R WHERE R.Motif LIKE “grippe”):

SELECT D.NomDoc FROM DOC D WHERE EXISTS

(SELECT * FROM RDV R WHERE R.NumDoc = D.NumDoc

AND R.Motif LIKE “grippe”):

• Nom des patients qui n'ont jamais eu de rendez-vous NomPAT

SELECT P.NomPat FROM PAT P WHERE P.NumPat NOT IN

(SELECT R.NumPat FROM RDV R )

SELECT P.NomPat FROM PAT P WHERE NOT EXISTS

(SELECT * FROM RDV R WHERE P.NumPat = R.NumPat)

Page 188: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

188

Exercice 8 : correction (2/3)

Page 189: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

189

Exercice 8 : correction (3/3)

Page 190: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

190

Exercice 9 : Correction (1/2) • Nombre total d’ordonnances

SELECT COUNT(*) FROM ORD

• Nombre d’ordonnances par docteur

SELECT DOC.NumDoc, DOC.NomDoc, COUNT(*)

FROM DOC, ORD where DOC.numDoc = ORD.NumDoc

GROUP BY DOC.NumDoc, DOC.NomDoc

• Age du plus jeune patient

SELECT min(AgePat) from PAT

• Nom du plus jeune patient

SELECT NomPat FROM PAT

WHERE AgePat = SELECT min(AgePat) from PAT

Page 191: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

191

Exercice 9 : Correction (2/2) • Nom des médicaments jamais prescrits

SELECT NomMED FROM MED WHERE NumMED NOT IN

(SELECT NumMed FROM ORD)

• Villes mentionnées dans la base

SELECT VilleDoc Ville FROM DOC UNION

SELECT VillePat Ville FROM PAT

• Villes où il y a au moins un docteur mais aucun patient

SELECT VilleDoc Ville FROM DOC MINUS

SELECT VillePat Ville FROM PAT

• Villes où il y a au moins un docteur et au moins un patient

SELECT VilleDoc Ville FROM DOC INTERSECT

SELECT VillePat Ville FROM PAT

Page 192: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

192

Le dictionnaire de données

Oracle

Page 193: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

193

Contenu du Dictionnaire Oracle

• Dictionnaire Oracle = tables systèmes en lecture seule

• Evolution du dictionnaire

– Généré au moment de la création de la DB

– Mis à jour automatiquement

• Contient des informations sur la structure de la BD

– Utilisateurs (privilèges, rôles)

– Noms et caractéristiques des objets (tables, vues, index, clusters, triggers, packages, ...)

– Contraintes d'intégrité

– Ressources physiques allouées à la base

– Valeurs par défaut pour des colonnes

– Les autres informations générales sur la base des données

• Structure

– Tables de base = tables fondamentales contenant les informations sur la BD

• Conservées dans le tablespace SYSTEM

– Vues de ces tables = présentation dépendant du rôle de celui qui consulte…

Page 194: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

194

Utilisation du dictionnaire

• Accès avec SQL

• Utilisé par le DBA et les utilisateurs

–Consultation d’informations sur la structure de la BD

–Seulement des droits en lecture sur des vues du dictionnaire

–NB: seulement par des requêtes SELECT (lecture seule)

• Utilisé par Oracle

–A la connexion et pendant l’exécution des requêtes

• Consultation d’informations sur les utilisateurs et leurs privilèges

• Consultation d’informations sur les objets de la BD

–Lors des requêtes SQL DDL (Data Definition Language)

• Modification du dictionnaire

Page 195: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

195

• La vue ‘DICTIONARY’ permet d’accéder aux noms/desc. des vues DBA, ALL, USER, V$...

Différentes vues

SQL> SELECT table_name, comments > FROM dictionary > WHERE table_name LIKE '%CONSTRAINTS%'; TABLE_NAME COMMENTS ----------------------------------------------------------------ALL_CONSTRAINTS Constraint definitions on accessible tables DBA_CONSTRAINTS Constraint definitions on all tables USER_CONSTRAINTS Constraint definitions on user's own tables 3 rows selected.

Page 196: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

196

Les vues USER

• Description des objets logiques créés par l’utilisateur connecté – Objets logiques = tables, index, vues, triggers, procédures…

• Exemples de vues USER_ – USER_TABLES

• Tables créées par l’utilisateur

– USER_INDEXES

• Index créés par l’utilisateur

– USER_CONSTRAINTS

• Contraintes créées par l’utilisateur

– USER_VIEWS

• Informations sur les vues créées par l’utilisateur

– USER_USERS

• Information sur l’utilisateur

SQL> SELECT table_name > FROM dictionary > WHERE table_name LIKE '%USER_%'; TABLE_NAME ------------------------------ … USER_VIEWS USER_HISTOGRAMS 115 row(s) selected.

Page 197: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

197

Les vues ALL

• Ces vues décrivent

– les objets créés par l’utilisateur connecté (comme dans user_tables)

– Et aussi tous les objets accessibles à cet utilisateur

• Exemples de vues ALL_

SQL> desc all_tables; Nom ------------------------------ OWNER … TABLE_NAME … …

SQL> desc user_tables; Nom ------------------------------ TABLE_NAME … …

Dans user_tables Dans all_tables

SQL> SELECT table_name FROM all_tables; … SQL> SELECT owner FROM all_users; … SQL> SELECT index_name FROM all_indexes; … SQL> SELECT table_name, constraint_name FROM all_constraints; …

Page 198: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

198

Les vues ALL : exemple

• La vue ALL_CONSTRAINTS

– Contraintes des tables accessibles à l’utilisateur

Page 199: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

199

Les vues DBA (1)

• Décrivent tous les objets de la base

– Sur certains objets, la description est plus complète

• Accessibles qu’aux utilisateurs

– Ayant le rôle SELECT_CATALOG_ROLE

– Ou ayant le privilège système SELECT ANY DICTIONARY

• Ex. La vue DBA_TABLES

SQL> SELECT table_name, num_rows, blocks, < empty_blocks, avg_space > FROM dba_tables > WHERE table_name=’Livre’; TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE ---------- -------- ------ ------------ --------- LIVRE 6764 180 19 861 1 row(s) selected.

Page 200: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

200

Les vues dynamiques V$

• Vues dont les informations sont «dynamiques»

– Evoluent du démarrage de l’instance jusqu’à son arrêt

– Décrivent l’activité de la DB et de l’instance

– Sont appelées «dynamiques» mais

• en fait, elle externalise l’état de variables internes à Oracle

• Usage de ces données

– Principalement pour l’amélioration des performances de la BD

• Ex. V$Session

– Le DBA peut déconnecter les utilisateurs avec la commande suivante

SQL> SELECT sid, serial#, username, type, status > FROM v$session; SID SERIAL# USERNAME TYPE STATUS ----- -------- ------------ ---------- ------- 1 1 BACKGROUND ACTIVE … 8 6 HEURTEL USER INACTIVE

SQL> ALTER SYSTEM KILL SESSION ‘8,6’ ;

Page 201: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

201

Table DUAL

• Elle permet de

– récupérer la date système (SYSDATE)

– tester le formatage de données de type DATE

– tester le bon «parenthésage» d'expressions

– etc.

• Possède une seule colonne (DUMMY) et un seul tuple

SQL> SELECT TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI') > FROM DUAL; TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI') ------------------------------------- 23-02-2004 22:05 SQL> SELECT 89456/562 FROM dual; 89456/562 ---------- 159.174377

Page 202: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

202

TD – Manipulation

des données

Page 203: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

203

Programmer avec un SGBD

Langages procéduraux dédiés

et API de communication

standards

(ODBC-JDBC)

Page 204: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

204

Programmation SGBD (1)

• Comment passer une commande dans la base telle que :

• Impossible en SQL pur (SQL n’est pas un langage complet)

– Pas de structure de contrôle : itérations, tests …

– Besoin d’un langage complet pour programmer des actions sur les BD

• Avec un langage traditionnel (C, C++, Java, Cobol, …)

– Qui puisse parler avec la BD (avec SQL grâce à SQL CLI, JDBC, ODBC, …)

• Avec un langage dédié au SGBD (PL/SQL pour Oracle, TSQL pour SQLServer, …)

– Types identiques aux types SQL

– Facilités de récupération/lecture des résultats de requêtes

– Adapté aux types de données BD

PROCEDURE COMM

Si le client n’est pas encore dans la base Insérer les informations du client dans la table client

Si l’article est disponible dans la quantité commandée ET le livreur disponible à la date de livraison désirée Insérer sa commande dans la base

Sinon abandonner la commande

Page 205: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

205

Programmation SGBD (2)

• Langage procédural propriétaires fournies par un éditeur de SGBD – Ex: PL/SQL (Oracle), PL/pgSQL (PostgreSQL), T-SQL (SQLServer, Sybase), …

– Extension de SQL à des éléments de programmation procédurale • instructions conditionnelles, itérations, variables, etc.

• API Propriétaires fournies par un éditeur de SGBD – Ex: OCI (Oracle), DB-Lib (Sybase), …

– Programme écrit dans un langage classique (C, C++, Cobol, etc.)

… avec des appels à ces API non standards fournies par l’éditeur du SGBD

• Embedded SQL (générateur de code - API propriétaires) – Ex: Pro*C (Oracle), ECPG (Postgres), Pro*Cobol (Oracle), etc…

– Programme écrit dans un langage classique (C, C++, Cobol, etc.)

… avec des instructions SQL directement dans le programme

– Précompilation : le source (ex: C+SQL) est transformé en code compilable (ex: C pur)

– Suivi d’une compilation classique (ex: C pur)

• API indépendantes du SGBD – SQL-CLI (Call Level Interface) popularisé par les médiateurs ODBC, JDBC

Page 206: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

206

206

Programmation SGBD (3)

• API indépendantes du SGBD (standardisées)

– SQL-CLI (Call Level Interface)

• Permet de se connecter et d’envoyer des requêtes SQL à tout serveur SQL, quel que soit son type, sa localisation, le mode de connexion ...

• API standardisée par X/Open depuis 1994

• Intégrée dans le standard SQL (SQL 1992, SQL 2003)

– ODBC (Open DataBase Connectivity)

• Créée par Microsoft

• Interface C de connection à un SGBD, administration via une interface Microsoft

• Pour chaque SGBD, un pilote ODBC est necessaire (Microsoft Access, SQLServer)

• Basée sur le standard SQL-CLI

• Disponible aussi sur plateformes autres que Windows : http://www.unixodbc.org/

– JDBC (Java DataBase Connectivity)

• Créée par SUN (racheté par Oracle)

• Interface JAVA de connection à un SGBD

• Pour chaque SGBD, un pilote JDBC est necessaire

• Basée sur le standard SQL-CLI

Page 207: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

207

Oracle PL/SQL

Procedural Language / Structured Query

Language

(Langage propriétaire Oracle)

Page 208: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

208

Langages procéduraux dédiés

• Stockage de procédures sur le serveur

– Chargement et compilation de la procédure sur le serveur

– Lancement à distance par appel de procédure (EXECUTE)

– Stocké comme un objet base de données

• Le créateur a les droits d’exécuter, modifier, re-compiler la procédure

• Partage les droits avec d’autres (GRANT/REVOKE EXECUTE)

Client

Serveur Oracle

BD Moteur

PL/SQL

Serveur

SQL Résultat exécution

COMM

PL/SQL Execute COMM

Page 209: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

209

Bloc PL/SQL

• Bloc de déclaration de variables:

• Suivi d’un bloc d’instructions et exceptions:

DECLARE

<liste des variables utiles au programme>

BEGIN

<liste d’instructions du programme PL/SQL>

[ EXCEPTION

<instructions exceptionnelles> ]

END;

/

Page 210: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

210

Types des variables PL/SQL (1)

• Types de base

– Types Oracle (CHAR, NUMBER, DATE...)

– Type Booléen : boolean

– Types référençant le dictionnaire de données : table.col%TYPE

• Types complexes

– Record

• TYPE monType IS RECORD (champ1 NUMBER, champ2

VARCHAR2);

– Table

• TYPE maListe IS TABLE OF NUMBER ;

– Curseurs (cf. plus loin)

Page 211: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

211

Types et variables PL/SQL (2)

• Déclaration des variables dans le bloc declare

• Affectation de valeur

– Dans toutes les sections avec l’opérateur :=

– Dans la section begin end avec l’opérateur into

• Appel de variables extérieures dans le bloc begin end

– Variables SQL*FORMS préfixées par :

– Variables SQL*PLUS préfixées par &

Select max(table.col) into maVar from table;

DECLARE

maVar VARCHAR2 DEFAULT ‘ROUGE’;

maVar Personne.nom%TYPE; -- type de l’attribut concerné

maVar Personne%ROWTYPE; -- type RECORD

maVar MonCurseur%ROWTYPE; -- type RECORD

maVar := 2;

Page 212: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

212

Structures de contrôle PL/SQL

• Traitement conditionnel

• Itérations

IF condition THEN traitement1

[ELSIF condition THEN traitement2]

[ELSE traitement3]

END IF;

WHILE condition LOOP

traitement

END LOOP;

FOR i IN 1..n LOOP

traitement

END LOOP;

LOOP

traitement

EXIT WHEN condition END LOOP;

Page 213: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

213

Curseurs PL/SQL : déclaration

• Résultat d’une requête SQL géré comme un fichier

séquentiel

• Déclaration

• Curseurs avec paramètres

– Paramètre fixés à l’ouverture du curseur

DECLARE

CURSOR monCurseur IS requête_SQL;

DECLARE

CURSOR monCurseur (nomRecherche IN VARCHAR2) IS

SELECT nom, adresse FROM Personne

WHERE nom = nomRecherche;

Page 214: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

214

Curseurs PL/SQL : manipulation (1)

• Attributs de curseur

– %NOTFOUND, %FOUND, %ISOPEN, %ROWCOUNT

– S’évaluent à true, false, null, ou au numéro de tuple

• commandes classiques d’ouverture, lecture, fermeture • OPEN, FETCH, CLOSE

DECLARE

CURSOR dept_10 IS SELECT Nom, Salaire

FROM employes WHERE NumDept = 10;

tuple dept_10%ROWTYPE;

BEGIN

OPEN dept_10;

LOOP

FETCH dept_10 INTO tuple;

.........

EXIT WHEN(dept_10%NOTFOUND) END LOOP;

CLOSE dept_10;

END;

Page 215: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

215

Curseurs PL/SQL : manipulation (2)

• Manipulation simplifiée

– Déclaration implicite du curseur

– Déclaration implicite de l’enregistrement récepteur

– Ouverture et fermeture du curseur implicites

– Ordre de lecture pas à pas fetch implicite

– Condition de sortie implicite

BEGIN

FOR tuple IN

(SELECT Nom, Salaire FROM employes WHERE NumDept = 10)

LOOP

.........

END LOOP;

END;

Page 216: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

216

• Augmente de 5% le salaire des employés du service

compta…

DECLARE

CURSOR Compta IS

SELECT nom, salaire FROM Employe WHERE service = ‘comptabilité’;

Emp Compta%ROWTYPE;

BEGIN

OPEN Compta;

FETCH Compta INTO Emp;

WHILE Compta%FOUND LOOP

IF Emp.salaire IS NOT NULL AND Emp.Salaire < 30.000 THEN

UPDATE Employe SET salaire = salaire*1,05 WHERE nom = Emp.nom;

END IF;

FETCH Compta INTO Emp;

END LOOP;

CLOSE Compta;

END;

Curseurs PL/SQL : exemple

Page 217: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

217

Exceptions prédéfinies (1)

• Levées automatiquement par le moteur PL/SQL

– CURSOR_ALREADY_OPEN, INVALID_CURSOR

– NO_DATA_FOUND, LOGIN_DENIED,

PROGRAM_ERROR

– ZERO_DIVIDE, DUP_VAL_ON_INDEX…

• Traitées par la procédure PL/SQL section begin end

BEGIN

EXCEPTION

WHEN CURSOR_ALREADY_OPEN THEN

BEGIN Affiche_Err (-20000, ‘problème…’) ; END;

END;

Page 218: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

218

Exceptions prédéfinies (2)

• Exemple de traitement lors de la levée de

l’exception oracle DUP_VAL_ON_INDEX

– Détecte les doublons sur la clé primaire dans la table

BEGIN

INSERT INTO employes VALUES (num, nom, salaire);

EXCEPTION

WHEN DUP_VAL_ON_INDEX THEN

INSERT INTO doublons VALUES (num, nom);

END;

Page 219: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

219

• Déclaration dans la section declare

• Levée dans la section begin end par l’instruction raise

• Traitement de l’exception dans la section begin end

– Dans la sous section exception

– Lors de la détection dans la clause when

• La clause when others traite les exceptions non traitées

Exceptions définies par l’utilisateur (1)

DECLARE

sal_nul EXCEPTION;

BEGIN

IF … THEN RAISE sal_nul;

END IF;

EXCEPTION

WHEN sal_nul THEN …

WHEN OTHERS THEN …

END;

Page 220: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

220

• Exemple

– Lève une exception quand la température du four dépasse

1000°…

DECLARE

Err_Temp EXCEPTION;

MaxTemp NUMBER;

BEGIN

SELECT Max(temp) INTO MaxTemp FROM Four;

IF MaxTemp > 1000 THEN RAISE Err_Temp END IF;

EXCEPTION

WHEN Err_Temp THEN

BEGIN Affiche_Err (-200, ‘le four va exploser’) ; END;

END;

Exceptions définies par l’utilisateur (2)

Page 221: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

221

Procédures et fonctions PL/SQL (1)

• Stockées sous forme compilée dans la base de données,

de la même façon qu’un objet de la base

– soumise aux mécanismes de sécurité ou de confidentialité

• Partagées par plusieurs applications et utilisateurs

– à condition d’avoir le privilège EXECUTE

• Procédure

– unité de traitement qui peut contenir des instructions

• SQL (sauf DDL), PL/SQL, variables, constantes, curseurs et

gestionnaire d’erreurs

• Fonction

– procédure qui retourne une valeur

Page 222: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

222

Procédures et fonctions PL/SQL (2)

• Création de procédure

• Création de fonction

• Re-compilation de procédure et fonction en cas de

modification du schéma de la BD

• Suppression de procédure et fonction

CREATE [OR REPLACE] PROCEDURE nom_procédure [(liste_arguments)]

<IS|AS> declaration_variables

bloc_PLSQL

liste_arguments ::= nom_argument_1 {IN | OUT | IN OUT} type,

nom_argument_2 {IN | OUT | IN OUT} type,

…...

nom_argument_n {IN | OUT | IN OUT} type

CREATE [OR REPLACE] FUNCTION nom_fonction [(liste_arguments)]

RETURN type {IS | AS} declaration_variables

bloc_PLSQL

ALTER <PROCEDURE | FUNCTION> nom COMPILE;

DROP {PROCEDURE | FUNCTION} nom;

Page 223: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

223

Procédures et fonctions PL/SQL (3)

• Exemple de procédure

– Modifie le prix d’un article d’un certain taux

• Exemple de fonction

– Calcule le chiffre d’affaire

CREATE FUNCTION chiffre_affaire (id IN NUMBER) RETURN NUMBER

IS

ca NUMBER;

BEGIN

SELECT SUM(montant) INTO ca FROM vendeurs WHERE id_vendeur = id;

RETURN ca;

END;

CREATE PROCEDURE modif_prix (id IN NUMBER, taux IN NUMBER)

IS

BEGIN

UPDATE article a

SET a.prix_unitaire = a.prix_unitaire*(1+taux)

WHERE a.id_article = id;

END;

Page 224: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

224

Package PL/SQL

• Package

– regroupement de programmes dans un objet de la BD

Visible par l’application

(public)

Interne au package (privé)

CREATE [OR REPLACE] PACKAGE nom_Package

<IS|AS>

déclaration_variables

déclaration_exceptions

déclaration_procédures

déclaration_fonctions

END nom_Package;

CREATE [OR REPLACE] PACKAGE BODY nom_Package

<IS|AS>

déclaration_variables_globales

corps_procédures

corps_fonctions

END nom_Package

Page 225: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

225

Package PL/SQL : exemple

CREATE PACKAGE traitements_vendeurs IS

FUNCTION chiffre_affaire (id_Vendeur IN NUMBER) RETURN NUMBER;

PROCEDURE modif_com (id IN NUMBER, tx IN NUMBER);

END traitements_vendeurs;

CREATE PACKAGE BODY traitements_vendeurs IS

FUNCTION chiffre_affaire (id_Vendeur IN NUMBER) RETURN NUMBER

IS

ca NUMBER;

BEGIN

SELECT SUM(montant) INTO ca FROM vendeurs WHERE id_vendeur = id;

RETURN ca;

END;

PROCEDURE modif_com (id IN NUMBER, taux IN NUMBER)

IS

BEGIN

UPDATE vendeur v

SET v.com = v.com*(1+taux)

WHERE v.id_vendeur = id;

END;

END traitements_vendeurs;

Page 226: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

226

Conclusion langages dédiés

• Les langages de type PL/SQL constituent le mode

d'utilisation le plus courant des bases de données

relationnelles

– Utilisé pour programmer des procédures stockées ou

des triggers

– Performant (réduit le transfert réseau)

– Bien adapté aux clients légers (ex: smartphone …) car

déporte des traitements sur le serveur

• Utilisé par les outils de développement de plus

haut niveau (SQLforms)

Page 227: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

227

OCI (Oracle)

et OCILIB

Introduction (projet/TP)

Page 228: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

228

Introduction à OCILIB

• Une librairie open source

• Pour coder une application en langage C… … qui interagit avec une base Oracle

• Pour toute plateforme (Windows, Unix, Linux, Mac....)

• La librairie encapsule les API OCI (Oracle)… … dans des fonctions simples

• Documentation en ligne : http://orclib.sourceforge.net/doc/html/modules.html

Page 229: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

229

#include "ocilib.h"

int main(void)

{

if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))

return EXIT_FAILURE;

/* ... application code here ... */

OCI_Cleanup();

return EXIT_SUCCESS;

}

1) Intitialiser la librairie

Initialiser la librairie

Libérer la librairie

Importer la librairie

Page 230: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

230

#include "ocilib.h"

int main(void)

{

OCI_Connection *cn;

if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))

return EXIT_FAILURE;

cn = OCI_ConnectionCreate("XE", "login", "pwd", OCI_SESSION_DEFAULT);

printf(OCI_GetVersionServer(cn));

printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));

printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));

printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));

printf("Connection version : %i\n", OCI_GetVersionConnection(cn));

OCI_Cleanup();

return EXIT_SUCCESS;

}

2) Ouvrir une connexion à la base

Déclarer une connexion

Ouvrir cette connexion

Afficher les propriétés

de la connexion

Nom du service Oracle (voir la doc Oracle)

Login/mdp Oracle

Page 231: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

231

#include "ocilib.h"

int main(void)

{

OCI_Connection *cn;

OCI_Statement* st;

if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))

return EXIT_FAILURE;

cn = OCI_ConnectionCreate("XE", "login", "pwd", OCI_SESSION_DEFAULT);

printf(OCI_GetVersionServer(cn));

printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));

printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));

printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));

printf("Connection version : %i\n", OCI_GetVersionConnection(cn));

st = OCI_StatementCreate(cn);

OCI_ExecuteStmt(st, "SELECT * FROM CLI");

OCI_Cleanup();

return EXIT_SUCCESS;

}

3) Exécuter une requête SQL

Déclarer une requête SQL

Créer la requête au travers

de la connexion Exécuter la requête

au travers de la connexion

La requête à exécuter

Page 232: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

232

4) Parcourir le résultat de la requête #include "ocilib.h"

int main(void)

{

OCI_Connection *cn;

OCI_Statement* st;

OCI_Resultset* rs;

int nb_col; int i=0; OCI_Column *col;

if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))

return EXIT_FAILURE;

cn = OCI_ConnectionCreate("XE", "login", "pwd", OCI_SESSION_DEFAULT);

printf(OCI_GetVersionServer(cn));

printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));

printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));

printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));

printf("Connection version : %i\n", OCI_GetVersionConnection(cn));

st = OCI_StatementCreate(cn);

OCI_ExecuteStmt(st, "SELECT * FROM CLI");

rs = OCI_GetResultset(st);

nb_col = OCI_GetColumnCount (rs);

for(i=0; i<nb_col; i++) {

col = OCI_GetColumn (rs, i+1);

printf("%s | ", OCI_ColumnGetName (col));

} printf("\n");

while (OCI_FetchNext(rs)) {

for(i=0; i<nb_col; i++)

printf("%s | ", OCI_GetString(rs,i+1));

printf("\n");

}

OCI_Cleanup();

return EXIT_SUCCESS;

}

Stockage du résultat

de la requête

Déclaration du résultat

Récupération du

nb de colonnes du résultat

Afficher les noms des colonnes

Déclaration d’une colonne

Récupérer la i+1eme colonne

Récupérer le nom de la ième colonne

Affichage des lignes du résultat

Récupérer la valeur de la ième

colonne

sous forme de chaîne de

caractère

Page 233: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

233

TD – Programmation SQL

PL/SQL et

interrogation depuis C

Page 234: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

234

Gestion de transactions

Problème de la concurrence d’accès

Page 235: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

235

Terminologie des transactions BD

• Définition

– unité de traitement faisant passer la base d'un état cohérent à autre

• Regroupe des opérations unitaires formant une action logique

• L’ensemble des opérations formant la transaction est délimité

– Begin transaction, commit, abort

– Fin avec succès : validation de la transaction

• Toutes les opérations unitaires ont été validées

• La base de donnée passe dans un nouvel état cohérent

• Les effets de la transaction ne seront jamais perdus

– Fin avec échec : abandon de la transaction

• Annuler tous les effets de la transaction

État cohérent État cohérent

Incohérences possibles Chronologie

Page 236: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

236

Exemple de transaction (BD bancaires)

• Évaluation du système : opérations bancaires par seconde

• Schéma de la base

• L’opération bancaire représentative à effectuer…

dépôt de sur le compte X par le caissier Y de l’agence Z à la date D *

Update COMPTE set Solde = Solde + where N°compte = X ;

Insert into HISTORIQUE (X, Z, Y, Bid, , D) ;

Update CAISSIER set Solde = Solde + where N°caissier = Y ;

Update AGENCE set Solde = Solde + where N°agence = Z ;

… est une transaction

N°agence

Solde

Nom

N°compte COMPTES

Adresse

Nom

N°agence AGENCES

N°agence

Adresse

Nom

N°caissier CAISSIER

N°caissier

N°agence

N°compte

N°opération HISTORIQUE

Page 237: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

237

Les propriétés des transactions

Atomicité

– Toutes les mises à jour doivent être effectuées ou aucune

Cohérence

– La base de donnée doit passer d'un état cohérent à un autre

Isolation

– Les résultats d’une transaction sont visibles une fois validés

Durabilité

– Les résultats de transactions validées ne sont jamais perdus

• Assurer l’ACIDité revient à résoudre les problèmes précédents

– Passer d’un état cohérent à un autre assurer la Cohérence

– Résoudre le problème de concurrence assurer l’Isolation

– Résister aux pannes assurer l’Atomicité et la Durabilité

Page 238: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

238

Problème de la concurrence d’accès

• Un problème transactionnel

• Les protocoles de concurrence sont nécessaires

– Sinon conduit le SGBD à des erreurs

• La difficulté : des protocoles performants

• Les techniques

– Degrés d’isolation

– Multi-versions

– Modification des programmes

• Leur utilisation sur des exemples

Page 239: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

239

Gestion du contrôle de concurrence

• Problèmes de concurrence de transactions

– Perte d’opération

– Observation d’incohérences

– Introduction d’incohérences

– Lectures non reproductibles

• Objectif : assurer l’Isolation des transactions tout en

– Permettant l’exécution simultanée d’un grand nombre de transactions

– Gardant de très bonne performance

– Évitant les blocages

• Pour cela on définit des protocoles de gestion de concurrence

– Verrouillage

– Estampillage

Page 240: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

240

Problème 1 : perte d’opération

A solde

A A +

Solde A

A solde

A A +

Solde A

tem

ps

transaction 1

Base de données

Terminal 1 Terminal 2

transaction 2

Perdu

Page 241: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

241

Problème 2 : observation d’incohérence

A solde1

A A -

Solde1 A

A Solde2

A A -

Solde2 A

A solde1

B solde2

solde1 A + 1

solde2 B + 1

tem

ps

transaction 1

Base de données

Terminal 1 Terminal 2

transaction 2

solde1 solde2

Intégrité : solde1 = solde2

Page 242: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

242

Problème 3 : introduction d’incohérence

A solde1

A A +

Solde1 A

A Solde2

A A +

Solde2 A

A solde1

B solde2

solde1 A x 2

solde2 B x 2

tem

ps

transaction 1

Base de données

Terminal 1 Terminal 2

transaction 2

solde1 solde2

Intégrité : solde1 = solde2

Page 243: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

243

Problème 4 : lectures non reproductibles

A solde

A A +

Solde A

A solde

A A +

A solde

A A +

tem

ps

transaction 1

Base de données

Terminal 1 Terminal 2

transaction 2

A A +

Page 244: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

244

Problème : transactions en parallèle

• Pas de problème si les transactions sont sérielles

Comment avoir une exécution exécution en série ?

• Exécution sérialisable

– une exécution en parallèle des transactions T1,...,Tn est dite sérialisable

si son résultat est équivalent à une exécution en série de ces mêmes

transactions.

• Actions permutables (ou commutables)

– les actions A et B sont permutables si toute exécution de A suivie par B

donne le même résultat que l'exécution de B suivie par A.

• Si une exécution de transactions est transformable par

permutations successives en une exécution en série, alors elle

est sérialisable.

Page 245: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

245

Exécution sérialisable ou non ?

• Exemple d’exécution sérialisable

• Exemple d’exécution non sérialisable

Comment détecter une exécution non sérialisable ?

Chronologie

T1 - lit solde1 T2 - lit solde2 T3 - lit solde2 T1 - lit solde2 T2 - modif. solde2

T1 - lit solde1 T1 - lit solde2 T3 - lit solde2 T2 - lit solde1 T2 - modif. solde2

T1 - lit solde1 T2 - lit solde2 T3 – modif. solde2 T1 - lit solde2 T2 - modif. solde2

T2 - lit solde1 T2 - modif. solde1 T1 - lit solde1 T1 - lit solde2 T3 - modif. solde2

Chronologie

T1 - lit solde1 T1 - lit solde2 T2 - lit solde2 T2 - modif. solde2 T3 - modif. solde2

etc.

T3 - modif. solde2 T2 - lit solde2 T2 - modif. solde2 T1 - lit solde1 T1 - lit solde2

Page 246: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

246

• Graphe de précédence de l’exécution sérialisable ou non – Sur chaque objet, deux actions non permutables impliquent une relation

de précédence entre les transactions correspondantes

– Définition de la précédence

• Si :

– Une transaction T1 applique une action A1 avant que T2 applique A2

– A1 et A2 sont non permutables

• Alors : T1 précède T2 (i.e., arc de précédence de T1 vers T2)

• Graphe de précédence sans boucle exécution sérialisable

• Exemple (précédent)

Comment faire pour rendre cette exécution sérialisable ?

T1 - lit solde1 T2 - lit solde2 T3 – modif. solde2 T1 - lit solde2 T2 - modif. solde2

Détection de la non sérialisabilité

T1

T2

T3 précède T1

T3

T3 précède T2 T2 précède T3

Chronologie

Page 247: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

247

Rendre l’exécution sérialisable

• Protocole d’estampillage : stratégie curative

– Exécute les transactions en avance, annule celles en retard

• T3 attend T2 (en avance) T3 s’exécute

• T1 attend T3 et T2 attend T3 (en retard) T1 et T2 abandonnées

• Protocole de verrouillage : stratégie préventive

– Exécute les transactions non conflictuelles, bloque les

transactions conflictuelles, annule les cycles

• T3 attend T2 et T1 attend T3 (conflits) T3 et T1 bloquées

• T2 attend T3 (cycle) : T2 cause un cycle abandonnée

T1 - lit solde1 T2 - lit solde2 T3 – modif. solde2 T1 - lit solde2 T2 - modif. solde2 T3 – fin T1 - restart T2 - restart

T1 - lit solde1 T2 - lit solde2 T3 – modif. solde2 T1 - lit solde2 T2 - modif. solde2 T3 – modif. solde2 T1 – lit solde 2

T1 en retard sur T3 T2 en retard sur T3

T1 attend T3 Cycle ! T3 attend T2

Page 248: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

248

L’estampillage : principe

– Associer un numéro à chaque transaction (une estampille)

• Attribuée au lancement de la transaction avec un compteur

• Plus le numéro est petit, plus la transaction est ‘vieille’

• Chaque élément accédé (granule) conserve l’estampille du lecteur et

de l’écrivain les plus récents

– Assurer que les accès non permutables aux granules se font

dans l’ordre des estampilles

• Éliminer les transactions qui veulent traiter un granule en cours de

traitement par une transaction plus récente

Granule e lecture

e écriture

Page 249: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

249

L’estampillage : bilan ?

• Arcs du graphe de précédence dans l’ordre des estampilles

Graphe de précédence sans circuit

• Ordonnancement équitable

– Dans l’ordre d’arrivée des transactions

• Algorithme simple

• Problèmes

– Abandon en cascade (solution : mises à jour différées)

• une transaction ayant fait une modification est abandonnée, toutes celles qui

on vu cette modification le sont aussi…

– Abandon inutile (optimisations : règle de Thomas, estamp. multiversion)

• On abandonne une transaction vieille qui veut écrire une donnée lue par une

plus jeune. Pourtant, la jeune allait terminer, l’exécution était sérialisable…

– Risque de privation

• Une transaction longue indéfiniment abandonnée…

Page 250: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

250

Le verrouillage • Exécution simultanée des opérations commutables

– Des opérations sur des objets différents sont commutables

– Pour des opérations concurrentes sur un même objet :

• Mise en œuvre par pose de verrous

– Les transactions posent des verrous sur chaque objet accédé

• En lecture : partagé ou S (Shared), autorise les lectures concurrentes

• En écriture : exclusif ou X

Les transactions effectuant une opération non commutable attendent…

– Les verrous sont relâchés à la fin de la transaction

Operation1

Operation2 Lecture Écriture

Lecture Commutable Non commutable

Écriture Non commutable Non commutable

Verrou détenu

Verrou demandé S X

S Accordé Mise en attente

X Mise en attente Mise en attente

Page 251: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

251

Les 2 phases du verrouillage • 2 phases bon fonctionnement

1. La transaction pose des verrous

2. La transaction libère les verrous

(plus de pose possible)

• Permet d’assurer l’isolation

• Mais engendre des problèmes

– Verrou mortel (cycle)

• Transactions inter-bloquées

(s’attendent mutuellement)

– Performance

• Petit granule (tuple)

verrouillage coûteux

• Gros granule (page, table)

temps d’attente important

• Cohabitation avec le décisionnel

• Solutions

– Au problème du verrou mortel

• Prévenir, détecter, éviter

– Au problème de performance

• Degrés d’isolation

• Verrouillage hiérarchique

– Granule variable

• Protocoles multi-versions

No

mb

re d

'ob

jets

Phase de verrouillage

Phase de libération

Temps

Page 252: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

252

Protocole de Verrouillage à 2 Phases

• Règle 1 : verrouillage – Avant d'accéder à une donnée D, une transaction doit acquérir un

verrou sur D. Si D est déjà verrouillée dans un mode non compatible, la transaction attend.

• Règle 2 : deux phases – Dès qu'une transaction relâche un verrou, elle ne peut plus acquérir

de nouveau verrou => bon fonctionnement, assure l’isolation

• Verrouillage 2 phases stricts – Les verrous sont gardés jusqu’au commit

• Des problèmes : verrou mortel, performances

verr

ous

temps

T Lecture Ecriture

Lecture

Ecriture

Page 253: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

253

T1 - lit solde1 T2 - lit solde2 T1 – modif. solde2 T2 - modif. solde1

Le verrou mortel – détection

• Exemple

• Détection : graphe des attentes

– Ti attend Tj si Ti demande un verrou détenu par Tj

– Des qu’un cycle apparaît dans le graphe verrou mortel

– Sur l’exemple :

• Comment résoudre le problème ?

Chronologie

Attend T2 Solde1: verrou S Solde2: verrou S Attend T1

T1 T2

Page 254: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

254

Le verrou mortel – résolution

• Par prévention :

1. Attente ou mort (« wait-die »)

• Si Ti demande un verrou accordé à Tj et Ti est plus vieille

– alors Ti peut attendre

– sinon elle est annulée

• les jeunes ne peuvent attendre les vieux

2. Assassinat ou attente (« wound-wait »)

• Si Ti demande un verrouillage accordé à Tj et Ti est plus jeune

– alors Ti peut attendre

– sinon Tj est annulée

• les jeunes ne peuvent bloquer les vieux

• Par abandon :

– Abandon de transactions une fois le verrou motel détecté

En quoi différent de l’estampillage?

On « résout » les cas de

verrous mortels (cycles)

Page 255: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

255

Optimisation des transactions

• L'objectif, en termes de performances, est de réduire :

– les blocages : une transaction est bloquée en attente d’un verrou

– les inter-blocages : un ensemble de transactions s’attendent

mutuellement

• Solutions existantes

– Degrés d’isolation

– Protocoles multiversions

– Modification des données / programmes

T1 T2

T3 T4

Page 256: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

256

L’optimisation de la concurrence par l’exemple

• Scénario 1 : – Joe consulte son compte (lectures) au moment où sa banque le crédite de 500 euros (écritures)

Blocker le crédit ? Le montrer à Joe ?

• Scénario 2 : – Joe retire 200 euros (écritures) au même moment où sa banque le crédite de 500 euros (écritures)

Blocker le crédit ? Ne pas le perdre !

• Scénario 3 : – Une analyse des ventes (lectures) est faite dans un supermarché alors que les caisses sont ouvertes

(écritures)

La lecture ne doit pas bloquer les caisses !

• Scénario 4 : – Les places de la finale de la coupe du monde sont mises en vente sur Internet le lundi à 8h (conflits

massifs)

conflits massifs !

• Scénario 5 : – Réservation SNCF (lectures (choix) puis écritures (achat))

Comment éviter de bloquer tout le monde ?

• Objectif : Chacun doit travailler en isolation i.e. comme si il était seul utilisateur de la base de données

Page 257: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

257

Degrés d'isolation SQL – normalisés SQL2

• Objectif: accroître le parallélisme en autorisant certaines

transactions à violer la règle d'isolation

• Degrés standardisés SQL2

(Set Transaction Isolation Level)

– Degré 0 (Read Uncommitted) • Lecture de données sales – Interdiction d’écrire.

• Ex. lecture sans verrouillage

– Degré 1 (Read Committed) • Lecture de données propres – Ecritures autorisées

• Ex. Verrous court en lecture, long en écriture

– Degré 2 (Repeatable Read) • Pas de lecture non reproductible

• Ex. Verrous longs en lecture et en écriture

– Degré 3 (Serializable) • Pas de requête non reproductible (fantôme)

Page 258: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

258

Degrés d'isolation SQL : exemples

T1(°2, Repeatable read) T2(°3, serializable)

Begin

Select count(*) from Voit

where couleur="rouge"

Begin

Insert into Voit

values (R4, "rouge")

Commit

Select count(*) from Voit

where couleur="rouge"

Commit

T1(°2, Repeatable read) T2(°3, serializable)

Begin Begin

Lit CC ( 100)

Lit CC ( 100)

Ecrire CC, CC+10

Lit CC ( 100)

Lit CC ( 100)

Commit

Ecrire CC, CC+20

T1(°1, Read commited) T2(°3, serializable)

Begin Begin

Lit CC ( 100)

Lit CC ( 100)

Ecrire CC, CC+10

Lit CC ( bloque)

Ecrire CC, CC+20

Commit

( 130)

T1(°0, Read uncommited) T2(°3, serializable)

Begin Begin

Lit CC ( 100)

Lit CC ( 100)

Ecrire CC, CC+10

Lit CC ( 110)

Ecrire CC, CC+20

Lit CC ( 130)

Commit

bloque

Page 259: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

259

Protocoles multiversions (Oracle)

• Objectif : faire cohabiter sans blocage des transactions conflictuelles

en les faisant travailler sur différentes versions des données

T1(°1, Read commited) T2(°3,serializable)

Begin Begin

Lit CC ( 100)(V1)

Lit CC ( 100)(v1)

Ecrire CC, CC+10 (V2)

Lit CC ( 100)(V1)

Ecrire CC, CC+20 (V2)

Commit

Lit CC ( 130)(V2)

T1 (°3, serializable) T2(°3,serializable)

Begin Begin

Lit CC ( 100)(V1)

Lit CC ( 100)(v1)

Ecrire CC, CC+10 (V2)

Lit CC ( 100)(V1)

Ecrire CC, CC+20 (V2)

Commit

Lit CC ( 100)(V1)

T1 (°3, serializable) T2(°3,serializable)

Begin Begin

Lit CC ( 100)(V1)

Lit CC ( 100)(v1)

Ecrire CC, CC+10 (V2)

Ecrire CC, CC-50 (V?)

Ecrire CC, CC+20 (V2)

Commit

Erreur !

bloque

T1 (°1, Read commited) T2(°3, serializable)

Begin Begin

Lit CC ( 100)(V1)

Lit CC ( 100) (v1)

Ecrire CC, CC+10 (V2)

Ecrire CC, CC-50 (V?)

Ecrire CC, CC+20 (V2)

Commit

Ecriture faite (CC = 80)

bloque

Page 260: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

260

Modifications des données / Programmes

• Scénario 4 : Les places de la finale de la coupe du monde sont mises en vente sur Internet le lundi à 8h

• Une seule donnée Trop de conflits

• Exemple de solution : – Idée : partitionner le stade :

– Chaque utilisateur se connectant est aléatoirement dirigé vers 1 des partitions.

– Le degré de parallélisme est multiplié par le nombre de partitions.

• Scénario 5 : Réservation SNCF (choix puis achat) – Si verrouillage dès le début, beaucoup de conflits

– Sinon, risque de perdre la place convoitée

– C’est le deuxième choix qui est implanté …

Page 261: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

261

261

Conclusion sur le verrouillage

• Scénario 1 : Compte Joe : lecture / écriture

Multiversion + Joe en degré Repeatable Read ou Read Commited

• Scénario 2 : Compte Joe : écriture / écriture

Conflit inévitable quelque soit la méthode (mais rare)

• Scénario 3 : lectures massives / écritures (supermarché)

Multiversion + degré Read Commited (peu de versions)

• Scénario 4 : écritures massives (coupe du monde)

Partitionnement du stade

• Scénario 5 : réservations SNCF (lectures puis écritures)

Transaction 1 = Phase de choix en Multiversion et Read Commited

Transaction 2 = Phase d’achat en Multiversion et Repeatable Read

Il est donc particulièrement important de maîtriser les degrés d’isolations et

les notions transactionnelles

Page 262: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

262

Vrai ou faux ?

• Les protocoles de concurrence assurent entre autre l’Atomicité

et la Cohérence des données

• On a besoin de protocole de concurrence seulement si

plusieurs utilisateurs sont connectés en même temps à la base

• Le verrouillage assure la sérialisabilité des transactions

• Le verrouillage deux phases génère des verrou mortel

• Si un protocole de concurrence abandonne ma transaction, le

système doit lui-même la relancer et la faire passer

Non, seulement l’isolation

Vrai… Faux: 1 utilisateur = N sessions, le système effectue aussi des traitements…

Par définition

Non, c’est l’application, le système renvoie simplement une erreur. Ca n’a pas de sens que

le système s’en charge. Ex: contrainte levée ne passera jamais; après abandon la base

peu avoir changée l’utilisateur plus forcément d’accord pour faire passer la transaction

Oui

Page 263: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

263

Vrai ou faux ?

• T1 a un verrou en lecture sur D. T2 veut modifier cette donnée.

Il demande un verrou en écriture. T1 est alors mise en attente

et T2 obtient le verrou

• T1 démarre avant T2 mais se termine après T2. En cas de

conflit, un algorithme de verrouillage sérialise T1 avant T2.

• Un verrou mortel ne met en jeu que deux transactions (et

jamais plus)

• Un verrou mortel peut apparaître si une seule transaction lit et

modifie des données, les autres ne faisant que lire

• En verrouillage deux phases, l’abandon d’une transaction peut

entraîner l’abandon d’autres transactions

L’inverse

Dépend qui a posé le verrou le premier…

Un cycle peut avoir lieu entre N transactions…

T1 écrit D1, T2 lit D2, T2 lit D1 ( T2 attend T1), T1 écrit D2 ( T1 attend T2)

Pas d’abandon en cascade avec le verrouillage (mais avec l’estampillage!)

Page 264: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

264

TD – Expérimentation

sur la

concurrence

Page 265: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

265

Le problème de la confidentialité des

données dans les BD

Page 266: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

266

Sécurité : dimensions du problème

• Atteinte à la confidentialité

– Accès non autorisé à des informations

confidentielles

• Atteinte à la disponibilité

– Empêcher les utilisateurs autorisés d’utiliser

correctement un système/service

• Atteinte à l’intégrité des données

– Créer, modifier ou supprimer des informations

de façon illégale

Page 267: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

267

Besoins de protection (1)

• Omniprésence des bases de données

– Grands systèmes d’information (publics ou privés)

– BD PME

– BD personnelles (agenda, carnet d’adresses, bookmarks …)

– BD "ambiantes" (capteurs, aware home …)

• L’organisation des données est un facteur de risque

– L’analyse d’une collection d’informations insignifiantes peut

générer des résultats sensibles

• L’inter-connexion croissante en est un autre

– Connexions permanentes, accès ubiquitaires, objets

communicants

– Perméabilité domicile / travail

Page 268: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

268

Besoins de protection (2)

• Hébergement de données (DSP)

– Hébergement de site Web, sous-traitance de la gestion du système d’information d’une PME, équipes virtuelles, dossiers personnels …

– caspio.com, quickbase.com, cyberworker.com, primadoctor.com …

• Nombreuses violations de chartes de privacité [voir AKS02]

• Divulgation compulsive

– Blogs, Facebook, Gmail, Snapchat, WhatsApp etc.

– 94% des citoyens EU font part d’incidents de confidentialité liés à l’usage des réseaux sociaux

• Vulnérabilité des serveurs de données (ex: wikileaks)

– Source CSI/FBI : coût des attaques BD $100 milliards/an, 50% des attaques sont internes

– Source ZATAZ (musée des sites français piratés)

• Jeunes militants de l´UMP : 1806 comptes piratés (injection SQL) (nov 2011)

• Plusieurs milliers de données confidentielles appartenant a des policiers diffuses sur Internet (dec 2011)

– Source Clusif (Club de la Sécurité des Systèmes d'Information Français)

• Photos perso de Mark Zuckerberg piratés sur facebook (dec 2011)

Page 269: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

269

Besoins de protection (3)

• Indexation des bases de données

– "Google entre vie privée et secret défense" (source : confidentiel.net)

• Négligence

– Mise en ligne des recherches AOL (US), perte de support CD (UK)

– Craquage d'un système bancaire US (mots de passe trop courts par rapport au nb de comptes gérés)

– Consultation de la facture détaillée d’autrui (télécom brésil)

– DatalossDB : 126.749.634 enregistrements exposés en 2011

• Croisement de bases de données

– CAPPS-II (Computer Assisted Passenger Pre-Screening System) croise des BD pour lutter contre le terrorisme

Ron Rivest : « La révolution digitale inverse les défauts : ce qui était autrefois difficile à copier devient facile à dupliquer, ce qui était oublié devient mémorisé à jamais et ce qui était privé devient

public »

Page 270: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

270

Quelques exemples marquants:

croisement de données publiques

Page 271: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

271

Quelques exemples marquants:

croisement de données publiques

Page 272: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

272

Quelques exemples marquants :

espionnage entre bons citoyens

Que voulez-vous savoir sur vos amis, voisins, nourrice, employés …?

Page 273: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

273

Quelques exemples marquants :

espionnage entre bons citoyens

« The data within the report is compiled from thousands of different sources that

include government, property, and other public record repositories. »

Page 274: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

274

Exemples d’attaques connues de SGBD

• Injection de code SQL

– Attaque des listes de login/pwd

– Attaque de données outrepassant les droits de l’usager

• Attaques contre des bases statistiques

• Attaques de bases Oracles

– Oracle Unbreakable

– Origines des failles connues

(projet)

Page 275: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

275

Attaque contre des BD statistiques (1)

• Base de données statistique

– Permet d'évaluer des requêtes d'agrégation

• totaux, moyennes, etc.

• Ex. La requête « quelle est la moyenne du taux de leucocytes des patients

ayant plus de 30 ans ? » est permise

– Mais pas les requêtes qui dérivent des infos particulières

• Ex. La requête « quel est le taux de leucocytes de Dupont ? » est interdite

• Ex. de base de données statistique

– Relation Analyse(Patient,H/F,Age,Mutuelle,Leucocyte)

Patient H/F Age Mutuelle Leucocyte

...

Durand F 25 LMDE 3000

Dulac F 35 MMA 7000

Duval H 45 IPECA 5500

Dubois H 55 MGEN 3500

...

Page 276: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

276

Attaque contre des BD statistiques (2)

• Exemple d’attaque simple :

– U veut découvrir le taux de Leucocyte de Dubois

– U sait que Dubois est un adhérent masculin de la MGEN

• Requête 1

SELECT COUNT ( Patient )

FROM Analyse

WHERE H/F =’H'

AND Mutuelle =’MGEN' ;

Résultat : 1

Le système doit refuser de répondre à une requête pour

laquelle la cardinalité du résultat est inférieure à une

certaine borne b

• Requête 2

SELECT SUM ( Leucocyte )

FROM Analyse

WHERE H/F =’H'

AND Mutuelle =’MGEN' ;

Résultat : 3500

Page 277: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

277

Attaque contre des BD statistiques (3)

• Requête 3

SELECT COUNT ( Patient )

FROM Analyse

Résultat : 10

• Requête 4

SELECT COUNT ( Patient )

FROM Analyse

WHERE NOT ( H/F =’H'

AND Mutuelle =’MGEN’ ) ;

Résultat: 9 ; 10 - 9 = 1

• Conséquence :

– Le système doit aussi refuser de répondre à une requête pour laquelle la cardinalité du résultat est inférieure à N - b

– N est la cardinalité de la relation initiale

• Requête 5

SELECT SUM ( Leucocyte )

FROM Analyse

Résultat : 54300

• Requête 6

SELECT SUM ( Leucocyte )

FROM Analyse

WHERE NOT ( H/F =’H'

AND Mutuelle =’MGEN’) ;

Résultat : 50800 ; 54300 –

50800 = 3500

Page 278: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

278

Attaque contre des BD statistiques (4)

• Problème :

– On peut montrer que limiter les requêtes à celles pour lesquelles le résultat a

une cardinalité c telle que b c N - b n'est pas suffisant pour éviter la

compromission

– Exemple : si b = 2, les requêtes auront une réponse si c est telle que 2 c 8

• Requête 7

SELECT COUNT ( Patient )

FROM Analyse

WHERE H/F =’H' ;

Résultat : 6

• Conséquence

– U peut déduire qu'il existe exactement 1 homme qui a la MGEN comme

mutuelle,

il s’agit de Dubois, puisque U sait que cette description correspond à Dubois

• Requête 8

SELECT COUNT ( Patient )

FROM Analyse

WHERE H/F =’H'

AND NOT (Mutuelle =’MGEN’) ;

Résultat : 5

Page 279: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

279

Attaque contre des BD statistiques (5)

• Conséquence (suite)

– Le taux de Leucocyte de Dubois est facilement découvert de la façon

suivante :

• Requête 9

SELECT SUM ( Leucocyte )

FROM Analyse

WHERE H/F =’H' ;

Résultat : 30300

• Requête 10

SELECT SUM ( Leucocyte )

FROM Analyse

WHERE H/F =’H'

AND NOT (Mutuelle =’MGEN’) ;

Résultat : 26800 ; 30300 - 26800 = 3500

Page 280: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

280

Les attaques de bases Oracle

• peu nombreuses jusqu’à récemment

– plus de serveurs Web que de bases Oracle

– connaissance d’Oracle limitée

– difficile d’obtenir une version d’Oracle

– bases souvent protégées par un firewall

• de nos jours, intérêt croissant des pirates

– De plus en plus de topics Oracle sur les forums de

hackers

– Téléchargement et installation d’Oracle faciles

• Et…

Page 281: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

281

Protection : Solution Oracle ?

• Engouement du défi « Oracle Unbreakable »

– Oracle 9i declared 'Unbreakable' by Larry Ellison

Page 282: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

282

Protection : Solution Oracle ?

• Boast Attracts Hackers

– Hack attempts on the company's website have increased from 3,000

to 30,000 per week.

• Some days after ….

– 'When they say their software is unbreakable, they're lying.'

-- Bruce Schneier

– U.K. security researcher David Litchfield revealed that a common

programming error -- a buffer overflow -- was present in Oracle's

application server (and many other shortcomings…)

• Paper : “Hackproofing Oracle Application Server (A Guide to Securing

Oracle 9)” by David Litchfield

• Link = http://www.nextgenss.com/papers/hpoas.pdf

Page 283: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

283

Attaques : origines des failles...

• Bug constructeur (corrigés par des patchs)

– Ex. Oracle Listener (OL)

• Ecoute les commandes des clients et les transmet au serveur Oracle

• Contacte Oracle via le protocole TNS (Transparent NetWork Substrate)

• Attaque du listner par overflow

– Si un paquet contient plus d’1 Ko de données, le listener plante.

– Dans certains cas, génére un core dump (qui est visible...)

– .T.......6.,...............:................4.............(CONNECT_DATA=XXXXXXXX/0x5/0x34/0x12/0x54/

0x5/0x34/0x12/0x54/0x5/0x34/0x12/0x54/0x5/0x34/0x12/0x54/0x5/0x34/0x12/0x54/0x5/0x34)

• Bug configuration (pb de paramètres)

– Ex. Attaque OL par script de commandes TNS

• Certaines commandes ne demandent aucune autorisation

– Ex. demande de version (tnscmd version -h adresse_du_serveur -p 1521); de statut (tnscmd

status -h adresse_du_serveur -p 1521)

• Le pirate obtient les infos suivantes: version d’Oracle, système d'exploitation, chemins vers les

logs, options du Listener (Ex. option security), environnement complet (variables système) dans

lequel Listener a été lancé

– Pour se protéger : Activer l'option security dans listener, utilisation d’une authentification

forte, etc.

• Bug architectural (pb de conception de l’appli)

• Etc.

Page 284: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

284

DBMS : qui attaque ?

• Pirate externe – capable de s’infiltrer sur le serveur

BD et de lire ses fichiers

– capable de casser une clé de chiffrement avec un texte connu

• Pirate utilisateur – est reconnu par le SGBD et a accès

à une partie des données

– suivant le mode de chiffrement, il a accès à certaines clés

• Pirate administrateur (DBA) – employé peu scrupuleux ou pirate

s’étant octroyé ces droits

– a accès à des données inaccessibles aux autres pirates (journal)

– peut espionner le SGBD pendant l’exécution

Client C2

Pirate utilisateur

Client C3

Client C1

Pirate administrateur

BD P.M.E.

Serveur BD

BD

Pirate externe

Page 285: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

285

Principales défenses

0- Tolérance aux pannes

Page 286: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

286

1 – Authentification

• Base : login + password

• Assuré par le SGBD ou l’OS

• Nombreux protocoles

– Certains à base de systèmes matériels sûrs (carte à

puce)

Serveur BD

BD

Utilisateur

Page 287: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

287

Authentification

• Authentification par le SGBD ou par le système d’exploitation

• Profile utilisateur : permet d’associer différents paramètres au

protocole d’authentification et à la gestion des mots de passe

• Par exemple, sous ORACLE

– REMOTE_OS_AUTHENT = True : l’authentification aura lieu par l’OS

• Risque : un protocol non sûr (comme TCP) peut être utilisé pour se logger à

L’OS…

– FAILED_LOGIN_ATTEMPTS : nombre d’échecs de tentative d’accès avant que

le compte ne soit verrouillé

– PASSWORD_LIFE_TIME : durée de vie en jours d’un mot de passe

SGBD BD

Authentification par l’OS

Profil des

utilisateurs

Page 288: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

288

Attaques au mécanisme

d’authentification • Utilisateurs par défaut d’une base de données

– Possibilité d’attaques contre ces comptes s’ils n’ont pas été reconfigurés

– Exemple : utilisateur SCOTT (mot de passe TIGER) sous ORACLE

• Plus de 200 avec des droits importants …

• http://www.pentest.co.uk/documents/default-user.htm

– Audit HSC (2005 FR) : 80% des firmes laissent les utilisateurs par

défaut...

• Mauvaise implantation d’un mécanisme pourtant sûr

– Génération des login…

• Gestion des mots de passe

– Distribution du mot de passe lors de la création du compte

– Transmission du mot de passe entre le client et le serveur à la connexion

– Réutilisation de mot de passe (2009: 56% des français ont 1 seul mot de

passe…)

Page 289: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

289

2 – Chiffrement des communications

• Technologie éprouvée

– ex: SSL, y compris par carte à puce

• Techniques cryptographiques

– Confidentialité et intégrité des messages

– Non répudiation des transactions

Serveur BD

BD

Utilisateur

Page 290: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

290

Confidentialité et intégrité des messages

• Risques lors de la transmission des requêtes et des résultats entre le client et le serveur

• Chiffrement et signature – Ex: sous Oracle, utilisation de Oracle Advanced Security (OAS)

• Chiffrement (avec OAS) – Chiffrement de bout en bout

• Chiffrement symétrique

• Supporte le triple DES avec clés de 168 bits

– Pas de chiffrement des données stockées

• Signature – Pour éviter des manipulations des données lors de la transmission

– Message Digest Value

SGBD

BD

Ecoute

Interception

Altération

Rejeu

Page 291: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

291

3 – Autorisation (contrôle d’accès)

• Contrôle d’accès très sophistiqué dans les SGBD

– Autorisations affectées à des utilisateurs, groupes ou rôles

– Peut porter sur des objets d’une granularité très variée : tables,

vues, procédures stockées …

• Mais : ne résiste pas à une attaque sur les fichiers du

serveur ou à une attaque du DBA !

Serveur BD

BD

Utilisateur

Page 292: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

292

Droits d'accès : Syntaxe de base et rôles

• Syntaxe de base

– Grant <droits> on <objet> to (<usager>*) [with grant option]

– Revoke <droits> on <objet> from (<usager>*)

– <droits> ::= all | select | insert | delete |update | alter

– <objet> ::= relation | vue | procedure

– <usager> ::= public | nom d'usager

• Rôles (SQL3):

– Create role <nom_role> : Création d’un nouveau rôle

– Drop role <nom_role> : Suppression d’un rôle

– Les instructions Grant et Revoke s’appliquent sur des rôles

– Grant <liste roles> to (<usager>*) : Affectation de rôles aux usagers

– Set role <liste_roles> : Activation de rôle(s) pendant une session

Page 293: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

293

Droits d'accès : droits évolués

• Règles indépendantes du contenu :

– Ex. la secrétaire a accès aux infos administratives

– grant ou revoke sur relation ou vue

• Règles dépendantes du contenu :

– Ex. Le médecin a accès aux dossier de ses patients

– Utilisation de vues paramétrées (e.g. avec Current_User)

• Règles dépendantes du contexte :

– Ex. en l’absence du médecin traitant, tout médecin a accès

au dossier du patient

– Utilisation de vues paramétrées avec tables contextuelles

– Ex. Les salaires ne peuvent être modifié que le 1er du mois

– Utilisation de procédures stockées

Page 294: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

294

Droits d'accès dépendant du contenu

Le médecin a accès aux dossier de ses patients

• Définition d ’une vue

Create view dossier_patient_du_medecin as

Select * From dossier_patient

Where dossier_patient.medecin_traitant = CURRENT_USER ;

• Création du rôle médecin :

Create role medecin

• Affectation du rôle aux médecins :

Grant medecin to jean, jeanne

• Affectation des droits au rôle médecin

Grant all on dossier_patient_du_medecin to medecin

Page 295: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

295

Conclusion sur le contrôle d’accès

• Expression de règles dépendant du contenu et du

contexte

• Intérêt des concepts de vue et de rôle

– Les vues permettent de structurer la gestion des objets

– Les rôles permettent de structurer la gestion des sujets

• Intégration de l’hypothèse de programmes malveillants – Des olution basées sur la sécurité multi-niveaux

– Ex: Base de donnée privée virtuelle (VPD)

• Illusion d'une base de données privée

• Complexe à mettre en œuvre

• Conclusion

– Suppose que l'utilisateur passe par la « porte d'entrée »

– Ne résiste pas aux attaques sur les fichiers du serveur ou du DBA !

Nécessaire mais insuffisant !!

Page 296: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

296

T4 : Chiffrement de la BD

• Principe : chiffrer l’empreinte disque de la BD

• Seule solution pour résister aux attaques sur les fichiers

• Solutions commerciales basées sur l’approche serveur – Oracle Obfuscation Toolkit (<=8i)

– Protegrity Secure.Data : adjonction d’un serveur de sécurité • Oracle, Informix, Sybase, SQL Server, IBM DB2

• Difficultés technologiques liées au chiffrement d’une BD

• Solutions commerciales récentes (toujours basées sur l’approche serveur) – Oracle Transparent Data Encryption (>=9)

• Chiffrement niveau attribut (>=10)

• Chiffrement niveau tablespace (>=11)

Serveur BD

BD

Utilisateur

Page 297: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

297

Oracle Obfuscation Toolkit

• Fourniture d’un « package » permettant le chiffrement /

déchiffrement de données

– Le serveur stocke les données

– L’application BD stocke les clés de chiffrement

– L’application BD fait des appels aux librairies Oracle pour

chiffrer/déchiffrer

• Problèmes :

– Gestion et partage de clés à la charge de l’application

– Système non résistant à un pirate administrateur

• Les packages peuvent être substitués,

• Les données apparaissent en clair lors de l’exécution des requêtes

– ORACLE : « DBA has all privileges » !!

Page 298: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

298

Protegrity Secure.Data

• Solution basée sur 2 modules :

– Secure.Manager : gestion des utilisateurs, droits et clés

– Secure.Server : module de chiffrement intégré au noyau SGBD

• … et 2 personnes physiques différentes …

– Database Administrator (DBA) / Security Administrator (SA)

• Isolation DBA/SA ?

• Données toujours en clair à un moment de l’exécution...

SGBD +

Secure Server

BD

Utilisateur

Secure Manager

Clés Utilisateurs Privilèges

Page 299: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

299

Chiffrement d’un grand volume de données

• Mode ECB => attaque par analyse de fréquence

– ECB : Motif en clair identiques => motif chiffré identique

• Mode CTR => attaque par comparaisons successives

– CTR : m XOR m’ = DK(m) XOR DK(m’) => information sur le contenu des

MAJ !

Les spécificités du contexte BD doivent être prises en compte…

Quid des “concessions” faites à la sécurité pour raisons de perf.?

3DES + Mode opératoire ECB

3DES + Mode opératoire CBC

Réponse : NON…

Puis-je chiffrer une BD avec un algorithme sûr?

Page 300: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

300

• Vers des solutions de chiffrement transparent

– Intégrées à la syntaxe SQL

• L’exemple d’Oracle

– Transparent Data Encryption (TDE) :

• SQL étendu à la gestion du chiffrement

• Master key : chiffrée par un mot de passe (admin.) ou stockée dans un

HSM

• Chiffrement niveau attribut (10g)

– Colonnes chiffrées : dans les tablespaces (même temporaires), SGA,

logs/backups…

– Indexation des prédicats d’égalité (NO_SALT)

attaque par analyse de fréquence

• Chiffrement niveau tablespace (11g)

– Tablespaces complets chiffrés sur disque, déchiffrés en SGA

– Indexation classique (indexes chiffrés fabriqués sur le clair)

• SQL server 2008 TDE : même types de solutions

Chiffrement SGBD

Solutions commerciales (suite)

Page 301: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

301

Conclusion sur la sécurité

• La base de donnée a besoin de protection – Les lois responsabilisent les entreprise / toute lacune de

sécurité de leur SI

• Ces protections existent…. /!\ mise en œuvre... – 1 - authentification

– 2 - chiffrement des communications client/serveur

– 3 - droits d’accès aux données

– 4 - chiffrement des données

– 5-6-7-8 => d’autres mesures présentes… (cours C1-3)

• Beaucoup de perspectives – Les éditeurs sont en pleine phase de recherche

– Des moyens sont dégagés actuellement sur ces thèmes

– D’autant que le législateur rend l’hébergeur des données responsables des fuites

Page 302: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

302

Perspectives

• Approches client – Le serveur stocke les données et le client détient les clés et

participe à l’exécution

– Mais : le chiffrement reste transparent pour l’application

• Modèle P3P et SGBD hippocratiques – Le serveur s’engage sur un contrat avec le client

• Publication anonymes – Généralisation/suppression avant publication

– Confidentialité différentielle

• Suppression « réelle » – Étude de la rémanence des données dans un SGBD

• Etc…

Page 303: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

303

Questions ?

Page 304: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

304

Mode opératoire ECB

(Electronic Code Book)

• Les blocs sont chiffrés indépendamment

• Remarque : : P1=P2 => EK(P1)=EK(P2)

Plain-text 2 (P2)Plain-text 1 (P1) …

80

by tes

16

Cipher-text 2 (C2) …Cipher-text 1 (C1)

EK (P2)EK (P1)

Page 305: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

305

Mode opératoire CBC

(Cipher Block Chaining)

Init. Vector (IV)

Plain-text 2 (P2)Plain-text 1 (P1) …

80

by tes

16

Cipher-text 2 (C2) …Cipher-text 1 (C1)

EK (IV P1) EK (C1 P2) EK (…)

• les blocs chiffrés intégrent la valeur des

précédents

Page 306: Bases de données IN206 - smisanciaux/ENSTA/IN206/1-cours/IN206.pdf · • Merise • UML • Suivre son intuition peut conduire à des erreurs ±Redondances ±Valeurs nulles ±Difficulté

306

Mode opératoire CTR

• Résultat du XOR entre le clair et un mot aléatoire

Init. Vector (IV)

Plain-text 2 (P2)Plain-text 1 (P1) …

80

by tes

16

Cipher-text 2 (C2) …Cipher-text 1 (C1)

EK (IV+1) P1+1

EK (IV+2) P2+2 +3