7 - Bases de données relationnelles
7.1 Modèle ensembliste
Une base de donnée est constituée de plusieurs ensembles d'objets et d'opérateurs participant au bon fonctionnement d'un système:
Exemple 1 :
- Ensembles d'employés
- Ensembles de commandes
- Ensembles d'articles
- Ensembles de clients
Exemple 2 :
- Ensembles d'étudiants
- Ensembles de séances
- Ensembles de cours
- Ensembles de copies
On parle plus généralement d'ensembles d'entités.
Le modèle entité/associations est une méthode de description des relations entre ensembles d’entités. Il s’appuie sur le prédicat selon lequel tous les éléments des ensembles d’entités sont discernables.
Le modèle entités/associations repose sur un langage graphique de description des données, indépendant du support et de la mise en œuvre informatique.
Définitions
Modéliser une base de données, c'est :
- Identifier les différents ensembles en interaction
- Identifier les liens de dépendance entre les différents ensembles
Association
Définition : Une association entre les ensembles E1, …, Ek est un sous-ensemble du produit E1×...×Ek.
Il s'agit donc d'un ensemble de k-uplets {...,(t1,…,tk),…} t.q. t1∈E1,…,tk∈Ek.
où k est le degré de l'association :
- k=2 : association binaire
- k=3 : association ternaire
- etc…
Rôles des associations
- Attribution : propriété, réservation, participation, supervision, auteur, rôle, pilote, …
- Événements : achat, vente, séance, épreuve, appel, consultation, réunion, transaction, transport …
- Aggrégation/Composition : tout/parties, contenant/contenu, supérieur/subordonné, pays/région, …
- Relations entre membres : parenté, collaboration, cercle d'amis, …
- …
Contraintes de cardinalité
On donne en général un intervalle [binf,bsup] qui définit le nombre d'apparitions autorisées pour chaque rôle de l'association
Représentation graphique
Types d'associations
Associations de 1 à plusieurs (fonctionnelle)
Relation non symétrique entre les deux ensembles : […,1] d'un côté, […,N] de l'autre. Relation de type contenant/contenu, propriétaire/objet possédé, occupant/occupé, actif/passif etc… Il s'agit du type d'association le plus "courant".
“à gauche” → “à droite”
Associations de plusieurs à plusieurs (croisée)
Dans une association “croisée”, les tous les lien de l’association sont de cardinalité multiple […,N]
Modèles Entité Associations valués
- les attributs des ensembles d'entités sont des mesures:
- Soit A un attribut de l'ensemble d'entités E
A:E→D(A)
- les attributs des associations sont des opérateurs :
- Soit B un attribut de l'association sur E×F
B:E×F→D(B)
Mesures
- Plusieurs mesures peuvent être opérées sur les objets d'un ensemble. Chaque mesure est un attribut
- Le schéma de l'ensemble est l'ensemble des attributs servant à le mesurer
- Les éléments de l'ensemble sont discernables ssi il existe un jeu de mesures différent pour chaque objet de l'ensemble
- Une clé est un jeu de mesures minimal (permettant de distinguer les objets) appartenant au schéma
Ensembles discernables / non discernables
Opérateurs
- On s’intéresse ici aux associations qui représentent une “opération” (inscription, achat, embauche, affectation…).
- Lors d’une mise à jour de la base, certains événements tels que l’emprunt ou le retour d’un ouvrage, l’affectation d’un employé à un poste, ou la liste des anciens clients disparaissent.
- Il est possible de garder une trace des événements passés en mettant un (ou plusieurs) attributs sur une association.
- Ainsi, certaines associations peuvent être "datées", c'est à dire
- avoir lieu à une date
- ou prendre place sur une durée précise (prêt,accès temporaire, statut temporaire…)
- On peut ainsi mémoriser :
- "Monsieur Dupont a été employé au département logistique de tant à tant."…
- "L'étudiant X a été élève Centrale Méditerranée de telle année à telle année"…
- Chaque coureur est décrit par ses nom, prénom, nationalité et numéro de maillot.
- Chaque coureur appartient à une équipe qui possède un numéro, un sponsor associé.
- Chaque coureur participe à une ou plusieurs étapes. Une étape se caractérise par son numéro, son type (contre la montre/étape simple), ses points de départ et d'arrivée, sa date.
- A chaque étape est associée un classement d'arrivée pour chaque coureur, avec la durée totale de course.
7.2 Traduction vers le modèle relationnel
Il est possible de traduire un modèle entité/association vers un modèle relationnel (en perdant quelques propriétés).
- Conception de la base sous forme d'un modèle entité/association.
- Traduction sous la forme d'un modèle relationnel.
- Normalisation (voir Normalisation d'un schéma)
- Mise en œuvre informatique.
Un petit nombre de règles permettent de traduire un modèle entité/association vers un modèle relationnel.
- Selon ces règles, à la fois les ensembles d'entités et les associations sont transformés en schémas relationnels.
- Les liaisons et dépendances entre schémas de relation sont assurés par la définition des clés étrangères (attributs communs à plusieurs tables).
Schéma de base et clé étrangère
- Un schéma (ou modèle) de bases de données est un ensemble fini de schémas de relation.
- Une base de données est un ensemble fini de relations.
- Les liens et associations entre relations entre s’expriment sous la forme de clés étrangères
- Au sein d'un schéma relationnel R, Une clé étrangère est un attribut (ou un groupe d'attributs) qui constitue la clé primaire d'un schéma S distinct de R.
- La présence d'une clé étrangère au sein d'une relation r de schéma R introduit une contrainte d'intégrité sur les données :
- la valeur des attributs de la clé étrangère d'un tuple de r doit être trouvée dans la table s correspondante.
- On indique la présence d'une clé étrangère à l'aide de pointillés : {…, Clé étrangère, …}
Exemple
- Clients ( nom_client, adresse_client, solde)
- Commandes ( num_Commande, nom client, composant, quantité)
- Fournisseurs ( nom_fournisseur, adresse_fournisseur)
- Catalogue ( nom_fournisseur, composant, prix )
Traduction des associations de plusieurs à plusieurs
Une association croisée ne contient que des contraintes de cardinalité de type [..,N]. Soit R une telle association et E1, …, Ek les ensembles participant à l'association.
- Chaque ensemble Ei est traduit par un schéma relationnel (contenant les mêmes attributs)
- L'association R est traduite sous la forme d'un schéma relationnel contenant:
- les clés primaires des ensembles participant à l’association
- (éventuellement) les attributs propres à l'association,
Traduction des associations de un à plusieurs
Soit une association fonctionnelle R. On suppose qu'il existe au moins un ensemble A de cardinalité unique [1,1] participant l’association.
- Chaque ensemble participant est traduit sous forme de schéma relationnel
- L'association R est traduite sous forme de clé étrangère : l'ensemble A reçoit la clé primaire du (ou des) ensemble(s) dont la participation est multiple.
Exemple complet
- Clients ( nom_client, adresse_client, solde)
- Commandes ( num_Commande, nom client, nom fournisseur, composant, quantité, montant)
- Fournisseurs ( nom_fournisseur, adresse_fournisseur)
- Catalogue ( nom_fournisseur, composant, prix )
Clients :
nom_client | adresse_client | solde |
---|---|---|
Durand | 7, rue des Lilas | 335,00 |
Dubois | 44, av. du Maréchal Louis | 744,00 |
Duval | 5, place du marché | 33,00 |
Commandes :
num_Commande | nom client | composant | quantité |
---|---|---|---|
6674 | Dubois | micro controller | 55 |
6637 | Dubois | radio tuner | 2 |
6524 | Durand | transistor | 4 |
6443 | Duval | micro controller | 7 |
Fournisseurs :
nom_fournisseur | adresse_fournisseur |
---|---|
Sage | 33, College street, London |
MoxCom | 77 Ashley square,Mumbay |
Catalogue :
nom_fournisseur | composant | prix |
---|---|---|
Sage | transistor | 4,4 |
MoxCom | micro controller | 3,7 |
MoxCom | radio tuner | 7,0 |
SQL
CREATE TABLE Commande ( num_commande INTEGER NOT NULL, nom_client VARCHAR(30), nom_fournisseur VARCHAR(30), composant VARCHAR(30), quantité INTEGER, montant DECIMAL(12,2) NOT NULL, PRIMARY KEY (num_commande), FOREIGN KEY (nom_client) REFERENCES Client, FOREIGN KEY (nom_fournisseur, composant) REFERENCES Catalogue);
7.3 Interrogation des Bases de Données
Interroger une base de données , c’est sélectionner certaines données parmi l'ensemble des données proposés.
Exemples :
- Donner la liste des pays exportateurs de pétrole
- Liste des musiciens jouant à la fois du piano et du violon
- Liste des artistes français disque d'or en 1977
- Liste des suspects châtain taille moyenne présents à Poitiers la nuit du 12 au 13 février
C’est également croiser et recouper les informations présentes dans des bases
- pour faire ressortir des corrélations (exemple : type d'habitat/intentions de vote),
- pour des enquêtes de consommation, du marketing ciblé …
C’est enfin personnaliser l'accès à l'information : ne retenir que les informations utiles à un instant et pour une personne donnée.
- Emploi du temps de l'élève X pour la semaine Y.
- Factures impayées du client Z
- propose un certain nombre d’opérations ensemblistes :
- Intersection,
- Union,
- Projection,
- Différence,
- …
- qui, à partir d'un ensemble de relations, permettent de construire de nouvelles relations.
- La relation nouvellement construite contient le résultat de la requête
7.4 Opérateurs mono-table
Extraction d'information à partir d'une table unique :
- projection π = extraction de colonnes
- sélection σ = extraction de lignes
7.4.1 Projection : π
- Soit r une relation de schéma R.
- Soit S un ensemble d'attributs, avec S ⊆ R
La projection πS(r) est une nouvelle relation de schéma S obtenue à partir des éléments de r restreints au schéma S πS(r)={t(S)|t∈R}
(avec t(S) la restriction de t au schéma S)
nom_fournisseur | adresse_fournisseur | composant | prix |
---|---|---|---|
Sage | 33, College street, London | transistor | 4,4 |
MoxCom | 77 Ashley square,Mumbay | micro controller | 3,7 |
MoxCom | 77 Ashley square,Mumbay | radio tuner | 7,0 |
Requete : Donner la liste des fournisseurs (avec leur adresse): u=πnom_fournisseur, adresse_fournisseur(Catalogue)
→ u :
nom_fournisseur | adresse_fournisseur |
---|---|
Sage | 33, College street, London |
MoxCom | 77 Ashley square,Mumbay |
7.4.2 Sélection : σ
- On considère le schéma R(A1,…,An)
- Une condition F sur R :
- est un ensemble de contraintes sur les valeurs des attributs A1, …, An
- construites à l'aide d'opérateurs booléens classiques :
- ∧(et),
- ∨(ou),
- ¬(non),
- =, ≠, >,<, ≥ ,≤, …
- et de valeurs numériques ou de texte.
- Soit r une relation de schéma R
- Soit F une condition sur R
La sélection σF(r) est une nouvelle relation de schéma R , constituée de l'ensemble des enregistrements de r qui satisfont la condition F.
σF(r)={t∈r|F(t)est vrai}
Requête : Donner la liste des fournisseurs qui vendent des micro-controleurs
u=Πnom_fournisseur(σComposant = micro controller(Fournisseur)) u :
nom_f |
---|
Moxcom |
Pays :
nom_pays | superficie | population | PIB/hab |
---|---|---|---|
Algérie | 2.300.000 | 31.300.000 | 1630$ |
Niger | 1.200.000 | 11.400.000 | 890$ |
Arabie Saoudite | 2.150.000 | 24.300.000 | 8110$ |
Requête : Donner la liste des pays dont le PIB/hab est > 1000$ u=Πnom_pays(σPIB/hab > 1000 (Pays))
u :
nom_pays |
---|
Algérie |
Arabie Saoudite |
7.4.3 Structure d'une requête SQL
SELECT A1,A2, …, An // liste d’attributs FROM R // nom de la TABLE WHERE F // condition sur les attributs
cette requête est semblable à :
- une sélection algébrique σF
- suivie par une projection algébrique ΠA1,…,An
soit : ΠA1,…,An(σF(R))
Exemples :
- Qui fournit des transistors ?
SELECT nom_fournisseur FROM Fournisseur WHERE composant = ’transistor’;
- Liste de toutes les commandes de transistors :
SELECT * FROM Commandes WHERE composant = ’transistor’
- Qui fournit des micro-controleurs à moins de 5$?
SELECT nom_fournisseur FROM Catalogue WHERE composant = ’micro controller’ AND prix < 5
7.5 Opérateurs multi-tables
Principe : recoupement d'informations présentes dans plusieurs tables :
- Croisement des critères de sélection : Jointure
- Recherche ciblée : Division
7.5.1 La jointure : ⋈
- Soient les relations r et s de schémas R et S.
- On note R ⋂ S la liste des attributs communs aux deux schémas et R ⋃ S la liste des attributs appartenant à R ou à S.
- soit t ∈ r et q ∈ s tels que t(R ⋂ S) = q(R ⋂ S)
On note t ⋃ q le tuple formé des valeurs de t et de q étendues au schéma R ⋃ S
- Soient r et s (de schémas R et S), avec R ⋂ S = Ø
Le produit cartésien r × s est une nouvelle table de schéma R ⋃ S combinant les tuples de r et de s de toutes les façons possibles : r×s={t∪q:t∈r,q∈s}
- La jointure est une opération qui consiste à effectuer un produit cartésien des tuples de deux relations pour lesquelles certaines valeurs correspondent.
- Le résultat de l'opération est une nouvelle relation.
- Soient r et s (de schémas R et S), avec R ⋂ S ≠ Ø
- La jointure r ⋈ s est une nouvelle table de schéma R ⋃ S combinant les tuples de r et de s ayant des valeurs communes pour les attributs communs.
r⋈s={t∪q:t∈r,q∈s,t(R∩S)=q(R∩S)}
Matière_première :
nom_matière | unité | prix |
---|---|---|
pétrole | baril | 45$ |
gaz | GJ | 3$ |
uranium | lb | 12$ |
Exportations :
nom_pays | nom_matière | quantité |
---|---|---|
Algérie | pétrole | 180.000 |
Algérie | gaz | 20.000 |
Niger | uranium | 30.000 |
Arabie Saoudite | pétrole | 2.000.000 |
Arabie Saoudite | gaz | 750.000 |
Matière_première ⋈ Exportations :
nom_pays | nom_matière | quantité | unité | prix |
---|---|---|---|---|
Algérie | pétrole | 180.000 | baril | 45$ |
Algérie | gaz | 20.000 | GJ | 3$ |
Niger | uranium | 30.000 | lb | 12$ |
Arabie Saoudite | pétrole | 2.000.000 | baril | 45$ |
Arabie Saoudite | gaz | 750.000 | GJ | 3$ |
Exemples de requêtes
- “Donner la liste des PIB/hab des pays exportateurs de pétrole” :
ΠPIB/hab(σnom_matière = pétrole(Pays⋈Exportations))
- Clients ( nom_client, adresse_client, solde)
- Commandes ( num_Commande, nom client, nom fournisseur, composant, quantité, montant)
- Fournisseurs ( nom_fournisseur, adresse_fournisseur)
- Catalogue ( nom_fournisseur, composant, prix )
- “Donner le nom et l'adresse des clients qui ont commandé des micro controleurs” :
Πnom_client,adresse_client(σcomposant = 'micro-controller'(Client⋈Commandes))
7.5.2 Requêtes multi-tables en SQL
SELECT A1,A2, …, An // liste d’attributs FROM R1, …, Rm // liste de TABLES WHERE F1 AND … AND Fl // liste de conditions sur les attributs // (en particulier conditions sur les attributs // sur lesquel s’effectue la jointure)
Pour exprimer la jointure sur l’attribut 'Aj' commun aux tables 'R1' et 'R2', on écrira : 'R1.Aj = R2.Aj'
Exemples :
SELECT PIB_par_hab FROM Pays NATURAL JOIN Exportations WHERE nom_matiere = 'petrole'
SELECT PIB_par_hab FROM Pays, Exportations WHERE nom_matiere = 'petrole' AND Pays.nom_pays = Exportations.nom_pays
SELECT PIB_par_hab FROM Pays WHERE nom_pays IN ( SELECT nom_pays FROM Exportations WHERE nom_matiere = 'petrole' )
7.5.3 La division
- Soient r (de schémas R) et s (de schémas S), avec S ⊆ R :
La division r ÷ s est la relation (table) u de schéma R-S maximale contenant des tuples tels que u × s ⊆ r (avec × représentant le produit cartésien)
r÷s={t|∀q∈s,t∪q∈r}
→ on cherche les éléments de t qui “correspondent” à s
7.6 Recherches composées
- Certaines requêtes, peuvent être le résultat de la combinaison de plusieurs critères de recherche
- La combinaison de résultats est généralement réalisée à l'aide des opérations ensemblistes classiques (intersection, union…) pour exprimer «et», «ou», «non»…
- Pour alléger les formules, il est possible d'utiliser des tables intermédiaires.
- Soient r1 et r2 deux tables de schéma R.
L'union r1 U r2 est une nouvelle table de schéma R constituée de l'ensemble des enregistrements qui appartiennent à r1 ou à r2: r1∪r2=t∈r1∪t∈r2
- Soient r1 et r2 deux tables de schéma R.
L'intersection r1 ⋂ r2 est une nouvelle table de schéma R constituée de l'ensemble des enregistrements qui appartiennent à r1 et à r2: r1∩r2={t∈r1}∩{t∈r2}
- Soient r1 et r2 deux tables de schéma R.
La différence r1 - r2 est une nouvelle table de schéma R constituée de l'ensemble des enregistrements qui appartiennent à r1 mais pas à r2: r1−r2={t∈r1}−{t∈r2}
Exemples :
- Donner la liste des pays qui exportent à la fois du gaz et du pétrole :
πPaysσmatière = gaz(Exportations)∩πPaysσmatière = pétrole(Exportations) en SQL :
SELECT pays FROM Exportations WHERE matière = 'gaz' INTERSECT ( SELECT pays FROM EXPORTATIONS WHERE matière = 'pétrole');
- Donner la liste des pays qui exportent du gaz mais pas du pétrole :
πPaysσmatière = gaz(Exportations)−πPaysσmatière = pétrole(Exportations) en SQL :
SELECT pays FROM Exportations WHERE matière = 'gaz' EXCEPT ( SELECT pays FROM EXPORTATIONS WHERE matière = 'pétrole');
* Donner la liste des clients qui commandent uniquement des produits 'Moxcom' : πnom_clientClient−πnom_clientσfournisseur≠′Moxcom′Client⋈Commande en SQL :
SELECT nom_client FROM Client EXCEPT ( SELECT client FROM Client NATURAL JOIN Commande WHERE fournisseur <> 'Moxcom');