Bases de données relationnelles
On introduit dans ce chapitre le modèle relationnel qui sert de fondation à la conception de bases de données.
Les différents modèles utiles en représentation des connaissances reposent sur des notions de base de la théorie des ensembles :
1 Structures de données
1.1 Production des données
Tout commence par une fiche à remplir…
Un formulaire se présentant sous la forme d’un ensemble de rubriques à remplir.
Le modèle de fiche définit le format des données à enregistrer:
A toute fiche remplie correspond un jeu de valeurs (ou mesure) :
Un jeu de valeurs sert à décrire :
une personne réelle : assuré, client, étudiant, auteur, plaignant, contribuable,…
une personne morale : fournisseur, prestataire, direction, section, promotion,…
un objet physique : article, véhicule, composant, ingrédient, pièce,…
un objet contractuel ou administratif : fiche de paye, contrat, procès verbal, billet, dossier…
un lieu : salle, local, manufacture, entrepôt, ligne de production,…
un événement : transaction, jugement, achat, vente, acte administratif, appel téléphonique,…
etc…
1.2 Stockage des données
D’un point de vue informatique, un jeu de valeurs recueilli est appelé un enregistrement
Une structure de données définit les données de manière logique,
Exemples de structures de données (cours d'algorithmie):
listes,
listes de listes,
dictionnaires,
arbres,…
Tuples
Le Tuple est la structure de données de base servant pour le recueil, le transport et le stockage des données.
Un Tuple est une liste, finie, ordonnée et de taille fixe contenant une suite de valeurs.
Chaque valeur peut obéir à un format différent
On note m la taille du tuple (nombre de valeurs)
t=(a1,...,am)
Exemple :
("Dubois", "Martine", 22, "29/10/1994", "Orléans")
<!--
=== Données brutes ===
*Textes,
*comptes rendus,
*série de notes, de valeurs sans format précis :
-> format texte en général.
<note>
Le format ''txt'' désigne des données non structurées de type “texte” regroupant différents modes d’encodage :
* ASCII (caractères sans accent),
* utf8 (caractères accentués et spéciaux),
* ...
</note>
=== Données vectorielles===
* Chaque jeu de valeurs est codé sous la forme d’un **vecteur**
* constitué de grandeurs entières ou réelles :
* toutes les valeurs sont quantitatives (numériques).
* C’est un encodage adapté aux grandeurs physiques :
* chaque champ du formulaire est codé dans un format numérique
* il est possible de représenter les données dans un espace vectoriel
<note important> Un **vecteur** est une séquence (ordonnée et finie) de valeurs quantitatives, chaque valeur obéissant au même format numérique.
</note>
<note tip>
**Exemple** :
Considérons une station météorologique enregistrant à intervalle réguliers les données de ses capteurs :
* thermomètre,
* baromètre,
* hygromètre
* et anémomètre.
Un jeu de valeurs sera constitué de //5 réels double précision// décrivant
* la température,
* la pression,
* l’humidité,
* la vitesse
* et la direction du vent.
</note>
=== Tuples===
**NB**:
* Les données sont organisées sous la forme d’une liste de valeurs qualitatives ou quantitatives.
* Le tuple est la structure de base servant pour la transmission des données (simple, facile à coder et à échanger).
-->
NB: un tuple est une séquence (ordonnée et finie) de valeurs, chaque valeur pouvant être de type qualitatif ou quantitatif, et pouvant obéir à un format numérique différent.
Exemple : considérons une fiche servant à décrire un étudiant. L’étudiant doit remplir les rubriques nom, prénom et âge, numero de voie, nom de la voie, code postal, ville. Chaque rubrique correspond à un composant d’un 7-tuplet tel que:
les composants 1, 2, 5 et 7 sont des chaînes de caractères
les composants 3, 4 et 6 sont des entiers
Le format csv - “Comma Separated Values”
Chaque enregistrement est codé sur une ligne, chaque valeur étant séparé par un caractère séparateur (virgule, point-virgule, tabulation,…).
Exemple :
Dubois,Martine,"28, rue des Lilas, 45000 Orléans",45
Remarques :
les données sont des chaînes de caractères
les guillemets sont nécessaires lorsque la valeur contient le caractère séparateur (ici la virgule)
les noms des attributs sont éventuellement indiqué sur une ligne séparée
Données indexées
Exemple :
Considérons une fiche servant à décrire un étudiant. L’étudiant doit remplir les rubriques nom, prénom et âge, numero de voie, nom de la voie, code postal, ville.
Chaque rubrique correspond à un attribut, où:
nom, prenom, voie, et ville sont des attributs de type chaîne de caractères
age et numero et code_postal sont des attributs de type entier
La structure de données sous-jacente est le dictionnaire, où l’attribut est la clé permettant d’accéder à la valeur.
Un dictionnaire est une liste non ordonnée de valeurs, chaque valeur étant associée à une clé unique (ici la clé est le nom de l’attribut).
Le format json - JavaScript Object Notation
Exemple :
{"nom" : "Dubois", "prénom" : "Martine", "adresse" : "28, rue des Lilas, 45000, Orléans", "âge" : 45}
Remarques :
Données Hiérarchisées
Organisation des données correspondant à une structure d’arbre.
Dans le cas d’un recueil de données, correspond à la définition de rubriques et sous-rubriques.
Exemples :
La rubrique adresse peut contenir les sous-rubriques numero, voie, code_postal et ville.
Un document contient des chapitres, des sections, des sous-sections etc…
Formats xml, xhtml, json, …
Pour les données organisées de manière hiérarchique. Des balises servent à séparer les différents attributs.
Ex :
<nom> Dubois </nom>
<prénom> Martine </prénom>
<adresse>
<num> 28 </num>
<voie> rue des Lilas </voie>
<code postal> 45000 </code postal>
<ville> Orléans </ville>
</adresse>
<âge> 45 </âge>
remarque : le format json
permet également de définir des hiérarchies
{
"nom" : "Dubois",
"prénom" : "Martine",
"adresse" :
{
"numero" : 28,
"voie" : "rue des Lilas",
"code_postal" : 45000,
"ville" : "Orléans"
},
"âge" : 45
}
Tableaux de données
Un tableau de données est une liste (finie et ordonnée) de tuples, chaque tuple obéissant à un même schéma R.
2. Schéma et relation
2 approches en modélisation :
Le Modèle relationnel sert à représenter logiquement les tableaux de données.
Tableau de données
Un tableau de données est une liste (finie et ordonnée) de tuples, chaque tuple obéissant à un même schéma R.
Rappel:
Soit R(A1,...,Am) un schéma.
On note dom(Ai) le domaine associé à l'attribut Ai.
On dit d'un tuple t qu'il obéit au schéma R si les valeurs qu'il contient correspondent aux domaines des attributs du schéma.
Définition
Soit R=(A1,...,Am) un schéma de données
Une relation r obéissant au schéma R est un sous-ensemble du produit cartésien dom(A1)×...×dom(Am)
Corollaire : une relation est un
ensemble de tuples :
r={t1,...,tn}={(a11,...,a1m),...,(an1,...,anm)}
Remarque :
Le schéma R représente le niveau abstrait (modélisation)
La relation r représente un cas concret de réalisaton (à un schéma R peuvent correspondre une infinité de réalisations possibles : r, r′, r″, etc. )
Exemples de schémas relationnels :
Étudiant(nom, prénom, adresse, INE)
Ouvrage(titre, auteur, éditeur, prix, date_édition)
Véhicule(immatriculation, marque, modèle, couleur)
3. Dépendances fonctionnelles
Au sein d'un schéma R,
Il peut exister un ensemble de contraintes, noté F,
On parle de contraintes d’intégrité.
Rappels d’algèbre de base:
Dépendance fonctionnelle
Soit r une relation définie selon R(A1,...,Am)
Soient X et Y deux sous-ensembles de R
On dit que la relation r définit une dépendance fonctionnelle de X vers Y,
Exemple 1 :
Soit la relation r:
A | B | C |
1 | a | e |
2 | b | f |
2 | c | f |
3 | d | k |
4 | d | k |
Exemple 2 :
F={num_client, date→num_article, quantité, prixnum_article, quantité→prix}
La première contrainte indique qu'il ne peut y avoir deux factures émises pour un même client à une date donnée.
La seconde contrainte indique que le prix payé dépend de l’article et de la quantité commandée.
Exemple 3 :
Soit le schéma :
Ouvrage (titre, auteur, éditeur, prix, date_edition)
et la contrainte :
La contrainte signifie :
“pour une oeuvre chez un certain éditeur, une seule édition est possible (pas de réédition à une date ultérieure)”
“politique du prix unique”
Exercice :
Soit le schéma :
Exprimer la dépendance fonctionnelle :
Il importe donc de bien réfléchir, au moment de l'étape de conception,
du réalisme et du caractère limitant de certaines dépendances fonctionnelles,
et du caractère éventuellement limitant du choix des attributs.
Ainsi, le schéma décrivant les commandes (exemple 2)
ne permet pas de commander des articles de nature différente au sein d'une même commande
(un client, pour commander deux râteaux et une truelle, doit donc effectuer deux commandes, qui plus est à des dates différentes!).
Exercice
Soit le schéma relationnel suivant :
Billet(num_train, type_train, num_voiture, num_place, date, id_passager, nom_passager, prénom_passager, date_naissance, gare_départ , horaire_départ, gare_arrivée, horaire_arrivée, classe, tarif)
Définir des dépendances fonctionnelles sur cet ensemble d'attributs
4. Clé d'une relation
4.1 Définitions
Remarques :
Si un schéma R possède une clé K, alors tous les éléments d’une relation r de schéma R sont discernables : la valeur de la clé permet d’identifier de façon unique chaque élément de l’ensemble.
Au sein d'un schéma, il est souvent possible de définir plusieurs clés à partir des attributs. Le concepteur du modèle choisit une clé parmi les clés possibles. Cette clé est appelée clé primaire.
Graphiquement, les attributs constituant la clé sont soulignés:
Exemple 1 :
Exemple 2 :
Représentation UML :
4.2 Axiomes d'Amstrong
Soit K une clé candidate. On démontre que K→R à l'aide des axiomes d'Amstrong à partir d'un ensemble de DF connues:
Axiomes d'Amstrong
Réflexivité : Y⊆X⇒X→Y
Augmentation : X→Y⇒X,Z→Y,Z
Transitivité : X→Y et Y→Z⇒X→Z
Pseudo-transitivité : X→Y et Y,W→Z⇒X,W→Z
Union : X→Y et X→Z⇒X→Y,Z
Décomposition : X→Y,Z⇒X→Y et X−>Z
Exercice
Soit le schéma relationnel suivant :
Billet(num_train, type_train, num_voiture, num_place, date, id_passager, nom_passager, prénom_passager, date_naissance, gare_départ , horaire_départ, gare_arrivée, horaire_arrivée, classe, tarif)
Montrer que l'ensemble {num_train, num_voiture, num_place, date, gare_départ} est une clé primaire du schéma?
4. Normalisation d'un schéma
Tables mal construites
Exemple : fournisseurs de composants électroniques:
Fournisseur(nom_f, composant_,adresse_f, prix)
Problèmes :
Redondance : l’adresse des fournisseurs est répétée plusieurs fois
Inconsistance : mauvaise mise à jour ⇒ adresses différentes pour un même fournisseur.
Problème Insertion : on ne peut pas insérer dans la table un fournisseur qui ne fournit rien
Problème suppression : si un fournisseur ne fournit plus rien, on perd son adresse
Solution?
Fournisseurs(nom_f, adresse_f)
Catalogue(composant, prix)
–> Impossible de retrouver les prix pratiqués par les différents fournisseurs.
Fournisseurs(nom_f, adresse_f)
Catalogue(nom_f, composant, prix)
–> Il est possible de reconstruire la table initiale en effectuant une jointure entre ces 2 tables sur l’attribut nom_f
.
Exercice : Les tables suivantes sont-elles bien ou mal construites?
Enseignement (id_enseignant, nom_enseignant, matière, id_élève, nom_élève)
Dépendance fonctionnelle élémentaire (DFE)
Soit R un schéma relationnel
Soit X un ensemble d’attributs ⊆ R
Soit A un attribut de R
Il existe une DFE entre X et A ssi :
Exemple :
Fournisseur(nom_f,composant_,adresse_f,prix)
nom_f→adresse_f
nom_f,composant→prix
⇒ Pas 2FN!!
5.2 Normalisation 2FN
Normalisation 2FN :
R(A1,...,Ai,...,An_,B1,...,Bj,...,Bm)
AiDFE→Bj
A1,...,Ai,...,AnDFE→B1,...,Bj−1,Bj+1...,Bm
R1(A1,...,Ai,...,An_,B1,...,Bj−1,Bj+1...,Bm)
R2(Ai_,Bj)
Attention
Même si aucun attribut ne dépend plus de la clé primaire initiale, il est important de la conserver dans une table spécifique (elle sert à “lier” les valeurs dispersées dans les différentes tables).
Exemple
Fournisseur(nom_f,composant_,adresse_f, prix)
nom_f→adresse_f
nom_f, composant→prix
Catalogue(nom_f,composant_,prix)
Fournisseur(nom_f_,adresse_f)
Remarque : le schéma est maintenant constitué de deux tables.
Dépendance Fonctionnelle Directe (DFD) :
La dépendance fonctionnelle entre 2 attributs Ai et Aj est directe s’il n’existe pas de Ak tel que :
Ai→Ak→Aj
3ème Forme Normale (3FN)
Un schéma est 3FN :
Exemple :
Commande(num_commande_,nom_f, adresse_f, composant, quantité)
num_commande→nom_f, composant, quantité
nom_f→adresse_f
Le schéma n’est pas 3FN!! (dépendance transitive entre num_commande et adresse)
5.4 Normalisation 3FN
* Lorsqu’un schéma relationnel n’est pas en troisième forme normale, il doit être normalisé:
Normalisation 3FN
Soit :
R(A1,...,Am_,B1,...,Bi,...,Bj,...,Bn)
avec :
A1,...,AmDFD→B1,...,Bi,...,Bj−1,Bj+1,...,Bn
BiDFD→Bj
Alors :
R1(A1,...,Am_,B1,...,Bi,...,Bj−1,Bj+1,...,Bn)
R2(Bi_,Bj)
Attention
Comme précédemment, il est important de conserver la clé primaire de la table initiale si elle permet d'associer les valeurs dispersées dans les tables.
Exemple :
Avant :
Commande (num_commande, nom_f, adresse_f, composant, quantité)
avec :
Après :
Commande (num_commande, nom_f, composant, quantité)
Client (nom_f, adresse_f)
L’attribut nom_f est maintenant clé primaire de la table Client et clé étrangère de la table Commande.
6. Modèle ensembliste
Pour leur conception, les bases de données sont ici vues comme des ensembles constitués de plusieurs populations d'objets en interaction, participant au bon fonctionnement d'un certain système. Établir un schéma de base de données consiste à décrire ces différentes populations d'objets, mais surtout et principalement à décrire les dépendances et les interactions entre ces populations.
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é/association
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.
Généralités
Une entité x
est une représentation d'un objet du monde réel,
appartenant au système/à l'organisation modélisée.
Une entité est décrite par une ou plusieurs valeurs caractéristiques, appelées attributs.
Les informations conservées au sujet des entités d'un ensemble sont les attributs.
Chaque attribut :
a un nom unique dans le contexte de cet ensemble d'entités : A, B, C, A1, A2, …, Am, …
prend ses valeurs dans un domaine bien spécifié,
Un attribut peut être :
simple ou composé.
Exemple : une adresse peut être décrite par une simple chaîne de caractères, ou peut être décomposée en rue , no, boîte, ville, code postal, pays.
obligatoire ou facultatif (Dj peut ou non contenir la valeur ø ).
atomique ou non (Un attribut peut posséder 0, 1 voire plusieurs valeurs…)
Un ensemble d'entités est un ensemble fini d'éléments :
E={x1,…,xn}
Il regroupe (ou associe) plusieurs entités ayant des caractéristiques communes (descriptibles à l'aide du même ensemble d'attributs).
Exemples :
les employés d'une firme,
les cours de Centrale Méditerranée,
une collection de disques,
etc…
R:X→D1×...×Dm
xi↦(A1(xi),…,Am(xi))
représentation graphique :
Exemples :
Définitions
Modéliser une base de données, c'est :
Les liens entre les différents ensembles sont appelés des associations
Association
Une association exprime des relations de dépendance entre deux ou plusieurs ensembles d’entités.
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 {...,(x1,…,xk),…} t.q. x1∈E1,…,xk∈Ek.
où k est le degré de l'association :
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é
Pour chaque ensemble participant à une association, on précise dans combien d'instances de l'association chaque entité peut apparaître.
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
Associations binaires
Associations ternaires
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".
On dit parfois que l’ensemble dont la participation est unique est dit “à gauche” de l’association fonctionnelle, et celui dont la participation est multiple est “à droite”, autrement dit la pointe de la flèche désigne l’ensemble de “droite”:
“à 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
Dans le cadre du modèle entité/association :
A:E→dom(A)
B:E×F→dom(B)
Mesures
Les mesures sont les données saisies sur les éléments d'un ensemble. Chaque mesure est associée à un attribut.
Le schéma de l'ensemble est l'ensemble des attributs servant à caractériser ses éléments
Les éléments de l'ensemble sont discernables ssi il existe un jeu de mesures différent pour chaque élément de l'ensemble
Une clé est un ensemble d'attributs minimal (permettant de distinguer les objets) appartenant au schéma
TODO
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
On peut ainsi mémoriser :
Exemple
"Monsieur Dupont a été employé au département logistique de tant à tant."…
Exemple
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. 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).
Lors de la réalisation d'une base de données, on passe en général par les étapes suivantes:
Conception de la base sous forme d'un modèle entité/association.
Traduction sous la forme d'un modèle relationnel.
-
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
Définition
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 :
On indique la présence d'une clé étrangère à l'aide de pointillés : {…, Clé étrangère, …}
Exemple
Schéma de base relationnelle :
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.
Traduction :
Pays (nom_pays, superficie, population, PIB )
Matière_première ( nom_matière, unité, prix )
Exportation (nom pays, nom matière, quantité)
Traduction :
Appareil (code_appareil, type, marque, modèle)
Séance (date, heure, local)
Réservation (code appareil,date, heure, local)
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.
Règle de traduction
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 :
Remarque : lorsque l’association est valuée, les attributs de l’association sont également injectés dans la table représentant l’ensemble de gauche.
Exemple
Traduction :
Groupe_TD( num_groupe, LV1, LV2)
Entreprise ( nom_entreprise, Adresse)
Etudiant ( num_etudiant, Nom, Prénom, Date_naiss, num groupe, intitulé, date, durée, nom entreprise)
Exemple complet
Schéma de base relationnelle :
Clients ( nom_client, adresse_client, solde)
Commandes ( num_Commande, nom client, composant, quantité, montant)
Fournisseurs ( nom_fournisseur, adresse_fournisseur)
Catalogue ( nom_fournisseur, composant, prix )
Réalisation :
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 |