Contenus | Capacités attendues | Commentaires |
---|---|---|
Base de données relationnelle. |
Savoir distinguer la structure d'une base de données de son contenu. Repérer des anomalies dans le schéma d'une base de données. |
La structure est un ensemble de schémas relationnels qui respecte les contraintes du modèle relationnel. Les anomalies peuvent être des redondances de données ou des anomalies d'insertion, de suppression, de mise à jour. On privilégie la manipulation de données nombreuses et réalistes. |
Nous allons voir plus en détail ce que sont les bases de données relationnelles et mettre en évidence quelques anomalies qui peuvent être rencontrées.
Nous allons définir le vocabulaire de l'algèbre relationnelle inventée en 1970 par Edgar Frank Codd, et le mettre en relation avec le vocabulaire plus abordable des tableaux.
Dans le modèle relationnel, les données sont stockées dans des tables, aussi appelées relations.
L'illustration ci-dessus présente une relation appelée voiture
.
Le nom d'une colonne d'une relation est appelé attribut.
La relation voiture
possède trois attributs: marque
, couleur
et
plaque
.
Un enregistrement (ligne) d'une relation est appelé n-uplet.
ID voiture
, marque
de la table voiture.ID carburant
, type
de la table carburant.Le domaine d'un attribut est l'ensemble des valeurs qui peuvent être prises par cet attribut.
Une base de donnée sqlite il n'y a que cinq domaines de valeurs possibles:
NULL
. La valeur est une valeur NULL.INTEGER
. La valeur est un entier signé, stocké dans 1, 2, 3, 4, 6
ou 8 octets en fonction de l'amplitude de la valeur.REAL
. La valeur est une valeur à virgule flottante, stockée sous
forme de nombre à virgule flottante IEEE de 8 octets.TEXT
. La valeur est une chaîne de texte, stockée à l'aide du
codage de la base de données (UTF-8, UTF-16BE ou UTF-16LE).BLOB
. La valeur est une donnée binaire brute, stocké exactement
comme elle a été entrée.Dans le SGBD MariaDB il y a beaucoup plus de types avec notamment des formats pour les dates (voir doc).
Pour résumer, le tableau suivant montre celui, rigoureux, issu de l'algèbre relationnelle et celui, plus vague, correspondant à la représentation par table. Les termes de chaque ligne seront considérés comme équivalents, mais on privilégiera les premiers qui sont plus précis.
Terme de l'algèbre relationnelle | Terme de la représentation par table |
---|---|
Relation | Table |
n-uplet | ligne |
Nom d'attribut | Nom de colonne |
Valeur d'attribut | Cellule |
Domaine | Type |
[Philippe Rigaux sur sql.dbpedia.fr CC-BY-NC-SA]{.cite-source}
Chaque ligne de la table doit comporter un attribut qui l'identifie de façon unique, on l'appelle la clé primaire.
voiture
l'attribut plaque
pourrait constituer la
clé primaire.identifiant
unique pour créer votre ligne dans la base de données.On préférera utiliser une clé primaire complètement indépendante des données métier, afin de s'assurer que le champ est toujours rempli et n'évolue pas dans le temps.
Toutes les bases de données proposent des mécanismes prenant en charge une numérotation utilisable pour les clés primaires.
Une clé secondaire ou clé étrangère est une clé utilisée dans une table pour faire référence à un enregistrement d'une autre table.
L'ensemble constitué d'une clé primaire et d'une clé étrangère sert à établir des relations entre tables.
Les SGBD modernes permettent de garder les données conformes au modèle relationnel. Trois types de contraintes d'intégrité font partie intégrante du modèle de données relationnel:
Dans la table voiture
essayez d'ajouter la troisième voiture avec l'ID
2, l'ajout sera refusé, car ID voiture
a été déclaré comme clé
primaire
Si vous tentez de supprimer la ligne 2 de la table carburant
, le SGBD
vous le refusera en raison de sa présence dans la table des voitures à
la ligne de la BMW.
Il est aussi impossible d'ajouter dans la table voitures
un
id carburant
qui n'existe pas dans la relation carburant
.
S'assurer qu'une valeur est bien un email, un numéro de téléphone ou un code postal.
Le support des types dans sqlite étant relativement limité, vous pouvez
par exemple vérifier qu'on ne peut ajouter un id voiture
qui ne soit
pas un entier comme A
par exemple.
Une fois la contrainte déclarée, le SGBD refusera toute modification du contenu de la base de données qui violerait une de ces règles et casserait l'intégrité.
Télécharger la base de données sqlite voitures.db
à l'adresse
suivante: https://apps.lyceum.fr/sqlite/dbs/voitures.db.
L'ouvrir dans sqliteBrowser et vérifier que les trois contraintes d'intégrité sont bien gérées par le SGBD sqlite.
Nous allons montrer sur un l'exemple d'une base de donnée de DVD mal construite quels types d'anomalies peuvent apparaître.
[Mirian Halfeld-Ferrari Université d'Orléans]{.cite-source}
Comme vous le voyez cette table est mal construite:
Maintenant, intéressons-nous aux anomalies qui pourraient se présenter:
Elisabeth
est renommé Élisabeth
pour satisfaire les clients
francophones?〈102,1/1/99, Elisabeth, drama,110, PG13〉
123
?Une base de données bien structurée:
Le processus de conception peut-être scindé comme suit:
L'utilisation d'un diagramme relationnel aide à visualiser les relations entre les données.
Voici l'exemple de la base de données «Rock60» qui rassemble des données sur les albums de rock des années 60 ainsi que les musiciens et producteurs qui y ont participé.
Outre l'utilisation de clés primaires et secondaires, on a ajouté des tables particulières qui permettent de relier deux tables lorsque qu'on a une relation dite N:N.
Une personne peut jouer dans plusieurs groupes et un groupe est constitué de plusieurs personnes.
La table Joue Dans
permet d'exprimer cette relation en utilisant deux
clés étrangères.
En étudiant le schéma ci-dessus:
Joue Dans
.