Au sein d'une organisation, des données apparaissent à des instants différents, des endroits différents et sous des formes différentes. Ces données sont stockées dans de multiples fichiers, sur plusieurs supports physiques de stockage, gérées par de multiples applications et accessibles à plusieurs profils d'utilisateurs ayant des droits différents sur celles-ci.
La multiplicité des intervenants, des outils et des procédures conduit à des difficultés de gestion, des données possiblement incohérentes ou redondantes, des problèmes de confidentialité ou un manque de résilience.
Une base de données (BD) est un ensemble structuré d'informations élémentaires accessibles par une communauté d'utilisateurs. Son objectif est la centralisation et l'organisation correcte des données afin d'éliminer les redondances, optimiser leur gestion et assurer leur intégrité.
En première, nous avons vu comment structurer des données sous forme de
tables, enregistrées dans des fichiers au format CSV
.
Avec l'invention du
disque dur et le développement du web, la quantité de données a explosé et
il a fallu les structurer. Certaines BD sont immenses et atteignent des
pétaoctets de données organisées dans des milliers de tables. Il est alors
nécessaire de faire appel à un système de gestion de base de données
(SGBD).
Un SGBD est un logiciel permettant d'interagir avec une BD grâce à des requêtes. Il rempli plusieurs objectifs :
C'est le modèle relationnel qui est au programme de terminale car c'est celui qui est le plus répandu (environ 3/4 des bases de données actuelles).
Dans le modèle relationnel, les données sont structurées en
tables, appelée relations.
Chaque ligne d'une table
correspond à l'enregistrement d'une
entité qui peut être un objet, une action, une personne,
etc. du monde réel.
Chaque entité est caractérisée par un tuple de
valeurs associées à chaque attribut qui constitue les
colonnes de la table. Évidemment, tous les enregistrements d'une table ont
exactement les mêmes attributs, seules leurs valeurs changent.
En résumé :
nom | prénom | classe | ← les attributs |
---|---|---|---|
BOUDOT | Nathan | 705 | ← chaque ligne = un enregistrement |
PICHOU | Elvis | 703 | ← chaque ligne = un enregistrement |
ZITA JOAO | Brandy | 704 | ← chaque ligne = un enregistrement |
LAGUEB | Amine | 705 | ← chaque ligne = un enregistrement |
int
, string
, float
...
et non de types construits : list
, tuple
, dict
... Sinon, on parle de BD N-O-SQL pour «Not Only SQL».
De plus, afin d'assurer l'intégrité des données d'une BDR, il est souvent nécessaire de définir des contraintes de domaine afin de s'assurer que les données ajoutées à la BDR soient conformes.
Il est important de bien distinguer la structure d'une BDR et son contenu. En effet les relations, leurs attributs et leurs domaines de valeurs décrivent la structure d'une BDR tandis que les enregistrements en sont le contenu. La structure d'une relation est représentée par un schéma relationnel.
Exemple filé : Première ébauche du schéma relationnel de
la relation eleve
sous deux formes (schéma et texte) :
professeur
en établissant son schéma
relationnel.
Pour une BDR contenant plusieurs relations, celles-ci vont être liées par des clés de relations : primaires et étrangères.
Chaque enregistrement d'une relation doit pouvoir être identifié de
manière unique. Pour cela, il faut choisir un attribut ou un ensemble
d'attributs de la relation pour servir d'identifiant unique que l'on
appelera clé primaire de la relation.
Dans nos schémas relationnels, la clé primaire sera repérée par CP
ou sera soulignée.
Exemple : Le numéro de sécurité sociale peut servir de clé primaire pour un citoyen tandis qu'une adresse courrielle peut être la clé primaire pour un internaute car cela permet de les identifier de manière unique.
Exemple filé : Reprenons la relation eleve
. Quelle clé
primaire choisir ?
nom
:
mais cela risque de créer un problème si une fratrie (même nom) existe nom
+ prénom
:
mais il
n'est pas impossible que dans un grand établissement, il y ait deux
homonymes complets. id
,
spécifiquement pour être utilisé comme clé primaire. Celui-ci est
incrémenté automatiquement à chaque nouvel enregistrement afin d'assurer
son unicité dans la relation. id_eleve
ajouté à la relation pour lui servir de clé primaire.
CE
ou seront précédées d'un dièse #
.
Exemple filé : Complétons la BDR de notre établissement
scolaire, constituée de la seule relation eleve
, en ajoutant une
relation classe
. On obtient la structure suivante, qui est la
combinaison de deux schémas relationnels eleve
et classe
.
classe
de la relation eleve
a été
modifié en num_classe
afin de rendre évident son lien avec la clé
primaire de la relation classe
. classe
comprenant les attributs id_delegue1
et id_delegue2
.
id
est ajouté spécifiquement pour être utilisé comme clé primaire.
Celui-ci est incrémenté automatiquement à chaque nouvel enregistrement
afin d'assurer son unicité dans la relation.
Une relation peut pointer vers elle-même. En effet, dans cette exercice l'élève et son tuteur appartiennent à la même relation.
Valeur absente : Dans l'exercice précédent, tous les
élèves n'ont pas forcément un tuteur, or tous les enregistrements de la
relation eleve
doivent avoir une valeur pour l'attribut id_tuteur
.
La valeur NULL
permet de signifier l'absence de valeur dans la
table.
Attention : Pour assurer la
contrainte de relation d'une
BDR, une clé primaire ne pourra pas avoir la valeur NULL
.
professeur
?
Débloquer la situation avec une relation supplémentaire : Lorsqu'apparaît le besoin de créer n attributs identiques pour une relation, il faut envisager de créer une relation supplémentaire. Celle-ci peut être trouver en imaginant une action liant les deux relations déjà existantes et que l'on cherche à lier. Un outil appelé diagramme entité-association, permet de formaliser tout ce processus de conception d'une BD.
Rester clair : Toujours dans un but de clarté, il est
important d'éviter que des attributs, même de relation différentes, aient
exactement le même nom. C'était l'exemple ici des noms d'élèves et de
professeurs. Afin de les distinguer, ces attributs ont respectivement été
renommés en nom_eleve
et nom_prof
.
Clé de relation : Dans cet exercice, on constate qu'une clé primaire peut être composée de deux attributs et que ceux-ci peuvent être aussi des clés étrangères.
Le diagramme entité-association est un outil permettant d'établir la structure d'une BD en étant un pont entre le réel et le modèle logique (modèle relationnel). Il distingue les entités (objets) et leurs associations (interactions) :
Chaque association possède des cardinalités, c'est-à-dire le nombre d'entités associés. Les cardinalités les plus répandues sont :
Les cardinalités correspondent à des choix de fonctionnement dans le réel en permettant ou non certaines situations.
Passage du diagramme entité-association à la structure de la BD :
Deux cas doivent être considérés :
Une entreprise souhaite mettre en place une base de données relationnelle afin de simplifier sa gestion. Voici les données dont elle dispose :
Code de la donnée | Description | Type |
---|---|---|
Code_ven | Identifiant du vendeur | entier |
Nom_ven | Nom du vendeur | texte de 20 caractères maximum |
Ville_ven | Ville du vendeur | texte de 15 caractères maximum |
Code_cli | Code du client | entier |
Nom_cli | Nom du client | texte de 20 caractères maximum |
Rue_cli | Nom de la rue du client | texte de 30 caractères maximum |
Cp_cli | Code postal du client | entier |
Ville_cli | Ville du client | texte de 15 caractères maximum |
Dnaiss_cli | Date de naissance du client | date |
Email_cli | Adresse courrielle du client | texte de 255 caractères maximum |
num_fact | Identifiant de la facture | entier |
Date_fact | Date de facturation | date |
Num_prod | Identifiant du produit | entier |
Des_prod | Désignation du produit | texte de 30 caractères maximum |
Prix_prod | Prix unitaire du produit | réel |
Quantite | Quantité commandée | entier |
en français | en anglais |
---|---|
base de donnée (BD) | database (DB) |
système de gestion de base de donnée | database management system |
requête/requêtes | query/queries |
modèle relationnel | relational model |
relation / table | relation / table |
attribut / champ | attribute / field |
enregistrement / tuple | record / tuple |
ligne | row |
colonne | column |
clé primaire (CP) | primary key (PK) |
clé étrangère (CE) | foreign key (FK) |