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é :
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.
@
tandis que pour une date de
naissance, celle-ci devrait obligatoirement être comprise entre le 1er
janvier 1900 et la date d'aujourd'hui.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
: nom
+ prénom
: 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.
eleve
pointant vers un
autre élève. id_eleve
. id_tuteur
. 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
?
professeur
pourraient être son nom, son prénom et la matière enseignée, sans
oublier un identifiant qui nous servirait de clé primaire. Cependant un
professeur peut être amené à enseigner plusieurs matières. On pourrait
alors imaginer créer autant d'attributs que de matières or on ne sait pas
à priori combien d'attributs seraient nécessaires. Ce genre de situation
signale un problème dans la structure prévue et signifie que l'on fait
fausse route dans la construction de notre BD.
enseigner
.
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.
enseigner
serait la même pour
ces deux matières, ce qui viole la
contrainte de relation.id_cours
à cette
relation, renommée pour l'occasion cours
.
evaluation
et notation
. En effet, un professeur peut donner plusieurs évaluations
à plusieurs élèves ce qui rend nécessaire la création d'une relation
evaluation
... De plus, plusieurs élèves obtiennent des résultats à
plusieurs évaluations ce qui rend nécessaire la création d'une relation notation
.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_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