Bases de Données Nouveau Programme Des CPGE
Bases de Données Nouveau Programme Des CPGE
Bases de Données Nouveau Programme Des CPGE
Vocabulaire des bases de données : relation, attribut, domaine, Ces concepts sont présentés dans une perspective applicative, à
schéma de relation ; notion de clé primaire. partir d’exemples.
Opérateurs usuels sur les ensembles dans un contexte de bases Ces concepts sont présentés dans une perspective applicative.
de données : union, intersection, différence. Les seules jointures présentées seront les jointures
Opérateurs spécifiques de l'algèbre relationnelle : projection, symétriques, simples (utilisant JOIN … ON …=...).
sélection (ou restriction), renommage, jointure, produit et
division cartésiennes ; fonctions d'agrégation : min, max,
somme, moyenne, comptage.
Concept de client-serveur. Brève extension au cas de On se limite à présenter ce concept dans la perspective
l’architecture trois-tiers. applicative d’utilisation de bases de données.
Programme officiel 3/3
La liste suivante énumère un choix non exhaustif d’exercices pratiques. Les bases de données
utilisées à des fins d’illustration concerneront de préférence des questions choisies au sein des
autres disciplines scientifiques et technologiques.
utiliser une application de création et de manipulation de données, offrant une interface graphique,
notamment pour créer une base de données simple, ne comportant pas plus de trois tables ayant chacune un
nombre limité de colonnes. L’installation et l’exploitation d’un serveur SQL ne fait pas partie des attendus.
lancer des requêtes sur une base de données de taille plus importante, comportant plusieurs tables, que les
étudiants n'auront pas eu à construire, à l’aide d’une application offrant une interface graphique ;
enchaîner une requête sur une base de données et un traitement des réponses enregistrées dans un fichier.
Les principales capacités développées dans cette partie de la formation sont :
utiliser une application offrant une interface graphique pour créer une base de données et l’alimenter,
utiliser une application offrant une interface graphique pour lancer des requêtes sur une base de données,
distinguer les rôles respectifs des machines client, serveur, et éventuellement serveur de données,
traduire dans le langage de l’algèbre relationnelle des requêtes écrites en langage courant,
concevoir une base constituée de plusieurs tables, et utiliser les jointures symétriques pour effectuer des
requêtes croisées.
Programme du cours
struct eleve{
nom : string;
notes : tableau [X] de int ; // ou quelque chose de plus compliqué
}
Stocker les données = définir un format de fichier et les procédures permettant de lire ou écrire des données.
Modifier les données = écrire un programme
Sécuriser les données = écrire (plusieurs) programmes
Etc.
1. Objectifs et principes
2. Le modèle Entité-Association (E/R)
3. Conclusion
Une Base de Données
naît d’un besoin
Stocker des (grandes quantités de) données
Quel type de données ?
Comment structurer les données conceptuellement ? Et « physiquement » ?
Modélisation Conceptuelle (E/R) puis traduction dans un modèle logique
(e.g. Relationnel, XML, Objet, etc.)
Stockage « physique » (on n’en parle pas du tout ici).
Interroger des (grandes quantités de) données
Faut-il écrire un programme pour chaque action spécifique (requête) qu’on
souhaite faire sur les données ?
Utilisation d’un langage de requêtes adapté au modèle logique
Exécution (on en parle un peu) et optimisation (on n’en parle pas) de ces
requêtes
Introduire le modèle relationnel
Réel
Indépendant du
Modèle modèle de données
Indépendant du
conceptuel SGBD Médecin effectue Visite
Dépendant du
Modèle modèle de données
Relationnel Objet XML
Indépendant du
logique SGBD
Dépendant du
Modèle modèle de données
Organisation physique des données
Structures de stockage des données
Dépendant du
Physique SGBD
Structures accélératrices (index)
1. Objectifs de la Modélisation
Un identifiant aussi appelé clé est un attribut qui permet de retrouver une
instance d'entité unique à tout instant parmi celles de la classe.
Exemple: NVeh dans Voitures, NSS dans Personnes
va identifier l’entité
B- Association
Association (Association)
Une relation entre des instances de deux (ou plus) classes
Lien (Link)
Une instance d'association
Rôle (Role)
Une extrémité d'une association
Attribut de lien (Link attribute)
Un attribut de l'association instancié pour chaque lien
Cardinalité (Multiplicity)
Le nombre d'instance d'une entité pour chaque instance de l'autre
Cardinalité (max) d'une association
1..* 0..7
Etudiant Passe Examen
Domaines
Les attributs non clé ne peuvent pas dépendre d’un sous-ensemble d’une clé candidate
3e forme normale
Les attributs non clé ne peuvent pas dépendre d’un sous-ensemble d’attributs non clé
Boyce-Codd NF
Les attributs clé ne peuvent pas dépendre d’un sous-ensemble d’attributs non clé.
« The key, the whole key, nothing but the key, so help me Codd »
Permet de réaliser un « bon » schéma relationnel (éviter les redondances, et donc les problèmes de mise
à jour).
Par contre ça demande de faire plus de jointures …
Exemple de Schéma
EXEMPLE
ETU(NE,1..1
NOM, DATENAISS, VILLE)
0..*
SECTION (NS, NOMSEC,
ETUDIANT INSCRITDEPARTEMENT)SECTION
INSCRIPTION(NE, NS, ANNEE, FRAIS)
NE CLES
NOMETRANGERES
DN NS DPT
INSCRIPTION.NE REFERENCES ETU.NE NOM
VILLE ANNEE FRAISSECTION.NS
INSCRIPTION.NS REFERENCES
CLES CANDIDATES
UNIQUE(SECTION.NOMSEC)
Synthèse :
Syntaxe SQL
CREATION DES TABLES EN SQL Les tables sont la plupart
CREATE TABLE <relation name>
(<attribute definition>+)
du temps créées via une
[{PRIMARY KEY | UNIQUE} (<attribute name>+)] interface.
avec :
<attribute definition> ::= <attribute name> <data type> Le code SQL sert à les
[NOT NULL [{UNIQUE | PRIMARY KEY}] ]
Exemple :
créer« automatiquement »
CREATE TABLE ETU
( NE INTEGER PRIMARY KEY,
NOM VARCHAR (32),
DATENAISS INTEGER NOT NULL,
VILLE VARCHAR(64) )
Pourquoi tout ce blabla sur le modèle
E/R ??
Méthodologie pour implémenter des entités et associations sous forme de
tables
e.g.
ne, nometu, date, ville | Etudiant(ne, nometu, date, ville) ns,
nomsec | Section(ns, nomsec) annee | Inscrit(ne, ns, annee)
Calcul Relationnel :
Atomes
Les formules atomiques (ou atomes) sont des formules terminales
(i.e. elles n’incluent aucune autre proposition)
Soit V un ensemble de variables (à valeurs dans l’ensemble des
tuples)
Les atomes autorisés sont les suivants :
si vV, wV, adom(v), bdom(w) alors v.a = w.b est un atome
e.numetu = i.numetu
si vV, adom(v), kD alors v.a = k est un atome
e.ville = Versailles
si vV, rR, dom(v)=h(r) alors r(v) est un atome
Etudiant(e)
La sémantique formelle est définie étant donnée une base de
données et une affectation des variables à des tuples.
Calcul Relationnel :
Formules et Requêtes
Les atomes peuvent être combinées en formules selon la
grammaire suivante :
Atome = {v.a = v.b | v.a = k | r(v)}
Formule = {Atome | Formule1 Formule2 | Formule1 Formule2 |
Formule1 | v:H (Formule1) | v:H (Formule1)}
∀ t : {ne, nom, prenom, ville} ( Etudiant(t) ∧ t.nom = « Toto » ∧ ¬ ( t.ville =
« Paris »)
Signifie : tous les étudiant s’appelant Toto habitent ailleurs qu’à Paris
Une requête est de la forme :
{v : H | Formule(v)}
{e : {nom} | t : {ne, nom, prenom, ville} (t.nom = e.nom ∧ Etudiant(t) ∧
t.ville = « Versailles »}
Signifie : Trouver le nom de tous les étudiants habitant Versailles
/!\ On ne gère pas les agrégats, il faut étendre le formalisme
A quoi ça sert ?
R=ETU × INFOVILLE
×
VERSAILLES
BERNARD 1993 PARIS PARIS 75
CELINE 1993 PARIS
DAVID 1991
R VERSAILLES NOM DN VILLE NOMV
DPT ANNE 1991 VERSAILLES VERSAILLES
78
ANNE 1991 VERSAILLES PARIS
75
BERNARD 1993 PARIS VERSAILLES
78
BERNARD 1993 PARIS PARIS
75
CELINE 1993 PARIS VERSAILLES
Projection
Relation Relation
notée: DN,VILLE (ETU)
A1,A2,...Ap (R) DN,VILLE(ETU) DN VILLE
1991 VERSAILLES
1993 PARIS
1993 VELIZY
Restriction
ETU NOM DN
VILLE ANNE 1991
VERSAILLES
BERNARD 1993 PARIS
CELINE 1993 PARIS
DAVID 1991
VERSAILLES
EMILIE 1993 VELIZY
DN>1992 (ETU)
ETU NOM DN
VILLE BERNARD 1993 PARIS
CELINE 1993 PARIS
EMILIE 1993 VELIZY
Jointure
Composition des deux relations sur un domaine commun
Relation X Relation ->Relation
notée
Critère de jointure
Attributs de même nom égaux :
Attribut = Attribut
Jointure naturelle
Se fait en principe en utilisant une clé étrangère !!!
Comparaison d'attributs :
Attribut1 Attribut2
Théta-jointure
La jointure peut se voir comme un produit cartésien, combiné à une
restriction sur l’attribut de jointure, puis d’une projection pour éliminer
l’attribut doublon.
Exemple de Jointure
ETU NOM DN
VILLE ANNE 1991
VERSAILLES
BERNARD 1993 PARIS
CELINE 1993 PARIS
DAVID 1991
VERSAILLES R=ETU INFOVILLE
INFOVILLE NOMV DPT
VERSAILLES 78 ETU.VILLE = INFOVILLE.NOMV
ETU.VILLE = INFOVILLE.NOMV
PARIS 75
À EXÉCUTER
Une expression de l’algèbre relationnelle peut se lire de manière
fonctionnelle comme un plan d’exécution de la requête. i.e. si on
a implémenté les opérateurs de l’algèbre relationnelle, et qu’on
utilise des structures de type relation il me suffit de les appeler en
passant en paramètre les relations en question !
Les plans sont souvent représentés sous forme d’arbre.
À OPTIMISER
Il est important de noter que certaines opérations sont
commutatives, c’est la base de l’optimisation des requêtes.
Pourquoi ça marche ?
Complétude Relationnelle
Théorème de Codd : l'algèbre relationnelle a un pouvoir expressif équivalent
à celui du calcul relationnel. (article Relational completeness of data base
sublanguages)
Les cinq (sept) opérations de base permettent de formaliser sous forme d'expressions toutes
les questions que l'on peut poser avec la logique du premier ordre.
Exemple :
Nom et Section des étudiants de Versailles nés en 1991 ?
Algèbre Relationnelle :
NOM, NOMSEC (DATEN=1991 ET VILLE=« VERSAILLES »(ETU INSCR SECTION)
Calcul Relationnel :
{t:{nom, nomsec} | e:{ne, nom, ville, datenaiss}, i:{ne, ns},s:{ns, nomsec} (t.nom = e.nom
t.nomsec = s.nomsec i.ne=e.ne i.ns=s.ns e.datenaiss = 1991 e.ville =
« Versailles »)
Et SQL ?
Une requête SQL (donc une description en langage « naturel ») peut se traduire sous la forme
d’une expression de l'algèbre relationnelle (en fait SQL va plus loin : en particulier avec les
agrégations)
Requête élémentaire :
SELECT A1, A2, …Ap
FROM R1, R2, …Rk
WHERE Q [{UNION |INTERSECT | EXCEPT } … ]
Sémantique du bloc select :
A1,A2,…Ap ( Q (R1 × R2 ×… × Rk) ) )
Jointure
Différence
R S _
R.a = S.b
R S
Produit
Cartésien Union
X U
R R S
S
Ex. Plan d’exécution candidat (1)
R
Requête
« Nom et prénom des patients nom_patient
prénom_patient
visités dans le Béarn à qui on a
prescrit des médicament du
laboratoire ROCHE de numéro de labo = “Roche"
label = 17 après le 20 août 2006 » ^ Region = “Béarn"
^ date > "20/08/2006"
^ label = 17
med_id med_id
=
vis_id vis_id
=
V P M
nom_patient nom_patient
prénom_patient prénom_patient
V P M
V P M
nom_patient nom_patient
prénom_patient prénom_patient
V P M
V P M
FONCTION
Fonction de calcul en ligne appliquée sur un ou plusieurs attributs
Exemple : MUTUELLE = FRAIS*15/100
AGREGAT
Partitionnement horizontal d'une relation selon les valeurs d'un groupe
d'attributs (Bi), suivi d'un regroupement par une (ou plusieurs)
fonction(s) Fi de calcul en colonne (SUM, MIN, MAX, AVG, COUNT,
…) sur les attributs Ci respectifs
NOTATION : gamma minuscule
B , B , … ,B
1 2 N F1(C1), (R)
F2(C2), …,FN(CN)
B. Nguyen
Ensemble des colonnes 70
Exemples d'agrégats
ETU NOM AGE
VILLE ANNE 21 VERSAILLES
BERNARD 19 PARIS
CELINE 19 PARIS
DAVID 20 VERSAILLES
AVG(AGE)(ETU)
VILLE MAX(AGE) (ETU)
SQL :
AVG(AGE) SQL :
SELECT AVG(AGE) 19.75
SELECT VILLE, MAX(AGE
FROM ETU;
VILE MAX(AGE)
FROM ETU
/!\ le HAVING se fait VERSAILLES 21 GROUP BY VILLE;
tout simplement avec un PARIS 19
Vue (HP)
Relation d'un schéma externe déduite des relations de la base par une question
Exemple : Etudiants Versaillais
Calcul de la vue
Une vue est une fenêtre dynamique sur la BD et est recalculée à chaque accès.
Une vue peut être matérialisée (vue concrète) pour accélérer les calculs l’utilisant. Dans ce
cas, le SGBD doit être capable de savoir quand recalculer la vue.
Déclencheur (Trigger) (HP)
Action base de données déclenchée suite à l'apparition d'un événement
particulier
Forme :
{BEFORE | AFTER} <événement> THEN <action>
Un événement peut être :
une opération sur une table (début ou fin)
un événement externe (heure, appel,etc.)
Une action peut être :
une requête BD (mise à jour)
Une annulation (abort) de transaction
l'appel à une procédure cataloguée
Déclencheur avec condition (Règle)
(HP)
Il est possible d'ajouter une condition afin de déclencher l'action
seulement quand la condition est vérifiée
Une condition est une qualification portant sur la base.
Exemples :
BEFORE UPDATE EMPLOYE
IF SALAIRE > 100.000
THEN ABORT TRANSACTION
4. CONCLUSION
Origines et Evolutions
SQL1 86: la base
SQL1 89: l'intégrité
Jim Melton (Oracle)
Editeur de la norme SQL
1. Origines et Evolutions
SQL est une manière simple d’écrire une formule (requête) du
calcul relationnel. Tout comme le calcul relationnel, une requête
SQL peut être traduite en un expression de l’algèbre
relationnelle.
Il existe plusieurs versions normalisées, du simple au complexe :
SQL-86 version minimale
SQL-89 addendum (intégrité)
SQL2 (92) langage complet
SQL3 (99) aspects objet, triggers
SQL:2003 introduction d’aspects XML
SQL:2006 intégration du début de XQuery
SQL:2008 modifications mineures (instead of, truncate)
SQL:2011 améliorations XQuery
La plupart des systèmes supportent SQL2 ou SQL3
Opérations
Opérations de base
SELECT, INSERT, UPDATE, DELETE
/!\ Seul le SELECT (ou « SFWGH ») correspond au Calcul
Relationnel. SQL est « relationnellement complet » (permet
d’exprimer toutes les requêtes du Calcul et de l’Algèbre.
Opérations additionnelles
définition et modification de schémas
définition de contraintes d'intégrité
définition de vues
accord des autorisations
gestion de transactions
Organisation du Langage
0..* RESU.
0..*
ETUDIANT
2. SELECT: Forme Générale
SELECT <liste de projection>
FROM <liste de tables>
[WHERE <critère de jointure> AND <critère de restriction>]
[GROUP BY <attributs de partitionnement>]
[HAVING <citère de restriction>]
Restriction :
arithmétique (=, <, >, <>)
textuelle (LIKE)
sur intervalle (BETWEEN)
sur liste (IN)
Possibilité de blocs imbriqués par :
IN, EXISTS, NOT EXISTS, ALL, SOME, ANY
Forme générale de la condition
<search condition> ::= [NOT]
<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
<search condition> AND OR <search condition>
avec
::= < = >
Remarque: <liste_de_valeurs> peut être dynamiquement déterminée par une requête
Exemples de Questions (1)
Q1: Liste des nom,(T:{NOM,
prenom des PRENOM}|E:{NOM,
étudiants PRENOM
(ETUDIANT(E) E.NOM =
SELECT NOM, PRENOM T.NOM
E.PRENOM=T.PRENOM)
FROM ETUDIANT E
Q2: Noms des étudiants inscrits en IN311 en 2007 ou 2008
SELECT NOM Projection
× (T:{NOM}|E:{NOM,
FROM ETUDIANTS E, COURSNE}(C:{NC,
C, INSCRIT I NE, CODE_COURS}(
Produit cartésien
I:{NC,
WHERENE, ANNEE}(ETUDIANT(E) COURS(C)INSCRI
E.NE = I.NE
T.NOM=E.NOM
AND I.NC = C.NC ATTRIBUTS DE JOINTURE
E.NE=C.NEC.NC=I.NCE.NE=I.NE
AND C.CODE_COURS LIKE '%IN311%' ATTRIBUTS
I.ANNEE=2007I.ANNEE=2008)
AND I.ANNEE IN (2007, 2008)
DE RESTRICTION
C.CODE_COURS=« IN311 »)))
Avec la jointure dans le FROM
t a u
e s
HAVING COUNT(DISTINCT R.NC) >= 5
O n
Pour les étudiants ayant suivi plus de 5 modules …
Exemples de requêtes agrégat
INSERT
Insertion de lignes dans une table
Via formulaire où via requêtes
UPDATE
Modification de lignes dans une table
DELETE
Modification de lignes dans une table
Commande INSERT
INSERT INTO <relation name>
[( attribute [,attribute] … )]
{VALUES <value spec.> [, <value spec.>] …| <query spec.>}
Exemples
INSERT INTO ETUDIANT (NE, NOM, PRENOM, VILLE, AGE) VALUES
(112, ‘MARTIN’, ‘THOMAS’ , ‘VERSAILLES’, 20)
EXEMPLE
DELETE FROM RESULTAT
WHERE NC IN
SELECT C.NC
FROM COURS C
WHERE C.CODE_COURS = ‘INF311’
4. Contraintes d'intégrité
Contraintes de domaine
Valeurs possibles pour une colonne
Contraintes de clés primaires
Clé et unicité
Contraintes référentielles(clé étrangères)
Définition des liens inter-tables
SQL1 - 89 : INTEGRITE