Adloun

Bases de données : le modèle relationnel

Cours complet · NSI (terminale), chapitre 11 · terminale, spécialité numérique et sciences informatiques

Travailler ce chapitre sur Adloun Exercices corrigés de ce chapitre

L'informatique moderne repose massivement sur le stockage, l'organisation et l'exploitation de grandes quantités de données : annuaires, comptes bancaires, catalogues de produits, réseaux sociaux, dossiers médicaux, etc. Manipuler ces données « à la main » dans de simples fichiers texte devient vite ingérable : les informations se dupliquent, deviennent incohérentes et difficiles à interroger. Pour répondre à ces difficultés, on utilise des bases de données structurées selon un modèle rigoureux : le modèle relationnel, proposé par Edgar F. Codd en 1970.

Dans ce chapitre, nous découvrons les concepts fondamentaux de ce modèle : relations (tables), attributs, domaines, n-uplets, ainsi que les notions de clé primaire et de clé étrangère qui permettent de relier les données entre elles. Nous étudions ensuite le schéma relationnel, les contraintes d'intégrité qui garantissent la qualité des données, et le rôle du système de gestion de bases de données (SGBD). Ce chapitre est la base indispensable avant d'apprendre à interroger une base avec le langage SQL.

11.1 Données et bases de données

11.1.1 De la donnée brute à l'information organisée

Une donnée est une valeur élémentaire : un nombre, une chaîne de caractères, une date. Isolée, une donnée n'a guère de sens : le nombre 1789 peut désigner une année, un identifiant de client ou un prix. C'est l'organisation et le contexte qui transforment des données en information exploitable.

Définition 11.1Base de données

Une base de données est un ensemble structuré de données, mémorisées de façon persistante, organisées pour être consultées et modifiées par plusieurs utilisateurs ou programmes, tout en évitant la duplication inutile des informations.

Exemple 11.2Limites d'un simple fichier

Imaginons une association qui gère ses adhérents et leurs inscriptions à des activités dans un seul fichier texte :


Dupont;Marie;Tennis;Mardi 18h;0612345678
Dupont;Marie;Natation;Jeudi 19h;0612345678
Martin;Léo;Tennis;Mardi 18h;0698765432

Le numéro de téléphone de Marie Dupont est répété sur deux lignes. S'il change, il faut penser à modifier toutes les lignes : c'est une source d'erreur. De plus, répondre à une question comme « combien d'adhérents font du tennis ? » nécessite un traitement manuel. Une base de données relationnelle résout élégamment ces deux problèmes.

11.2 Le modèle relationnel

11.2.1 Relations, attributs et domaines

Le modèle relationnel organise les données en relations, que l'on représente concrètement sous forme de tables (tableaux à deux dimensions).

Définition 11.3Relation (table)

Une relation, représentée par une table, est un ensemble de données portant sur un même type d'objet (par exemple les élèves, les livres, les commandes). Chaque ligne décrit un objet et chaque colonne une propriété de ces objets.

Définition 11.4Attribut et domaine

Un attribut est le nom d'une colonne de la relation : il désigne une propriété des objets décrits. Le domaine d'un attribut est l'ensemble des valeurs qu'il peut prendre (par exemple les entiers, les chaînes de caractères de longueur bornée, les dates, un booléen).

Définition 11.5N-uplet (enregistrement)

Un n-uplet (ou enregistrement, ou ligne) est un élément de la relation : il associe à chaque attribut une valeur appartenant au domaine correspondant. Une relation est un ensemble de n-uplets : il n'y a donc pas deux lignes identiques, et l'ordre des lignes n'a pas de signification.

Exemple 11.6La relation `Eleve`

Considérons la relation Eleve décrivant des élèves :

idnomprenomannee_naissance
1DupontMarie2007
2MartinLéo2008
3NguyenChloé2007

Ici :

  • les attributs sont id, nom, prenom, annee_naissance ;
  • le domaine de annee_naissance est l'ensemble des entiers (par exemple compris entre 1900 et 2100) ;
  • la ligne (2, Martin, Léo, 2008) est un n-uplet.
Proposition 11.7Caractéristiques d'une relation

Dans le modèle relationnel :

  • chaque attribut possède un nom unique dans la relation ;
  • chaque attribut a un domaine fixé ;
  • toutes les valeurs d'une même colonne appartiennent à ce domaine ;
  • les n-uplets sont deux à deux distincts ;
  • l'ordre des lignes et l'ordre des colonnes sont sans importance.

11.3 Clés primaires et clés étrangères

11.3.1 Identifier de façon unique : la clé primaire

Définition 11.8Clé primaire

Une clé primaire est un attribut, ou un ensemble minimal d'attributs, dont la valeur identifie de façon unique chaque n-uplet d'une relation. Deux n-uplets ne peuvent jamais avoir la même valeur de clé primaire, et cette valeur ne peut pas être indéfinie (NULL).

Méthode : Choisir une clé primaire

Pour choisir une clé primaire dans une relation :

  • chercher un attribut (ou un petit groupe d'attributs) dont la valeur ne se répète jamais et est toujours renseignée ;
  • vérifier l'unicité : peut-il exister deux objets différents avec la même valeur ? Le nom d'un élève ne convient pas (homonymes possibles) ;
  • privilégier la stabilité : une clé ne devrait pas changer au cours du temps ;
  • à défaut d'un identifiant naturel fiable, créer un identifiant artificiel (un numéro, souvent appelé id).
Exemple 11.9Clé primaire de `Eleve`

Dans la relation Eleve précédente, l'attribut nom ne peut pas servir de clé (deux élèves peuvent s'appeler Dupont). L'attribut id, créé spécialement, est une clé primaire idéale : on souligne traditionnellement les attributs de la clé primaire dans le schéma :

11.3.2 Relier les tables : la clé étrangère

Définition 11.10Clé étrangère

Une clé étrangère est un attribut (ou un ensemble d'attributs) d'une relation dont les valeurs doivent correspondre à des valeurs de la clé primaire d'une autre relation (ou de la même). Elle établit un lien entre deux relations.

Exemple 11.11Lier des élèves à leur classe

Considérons deux relations :

idnom_classe
10TG1
11TG2
    
idnomid_classe
1Dupont10
2Martin11
3Nguyen10

Schéma associé :

L'attribut id_classe de Eleve (noté avec un #) est une clé étrangère qui référence la clé primaire id de Classe. La valeur 10 apparaît bien dans Classe : le lien est valide.

Proposition 11.12Notations usuelles d'un schéma

On note un schéma de relation par le nom de la relation suivi de la liste de ses attributs entre parenthèses. Les attributs de la clé primaire sont

soulignés, et les clés étrangères sont précédées d'un `#`

(ou suivies d'une indication du type « référence »).

11.4 Schéma relationnel

Définition 11.13Schéma relationnel

Le schéma relationnel d'une base de données est la description de l'ensemble de ses relations : pour chacune, le nom de la relation, la liste de ses attributs avec leur domaine, sa clé primaire et ses éventuelles clés étrangères. Le schéma décrit la structure de la base, indépendamment des données effectivement stockées.

Méthode : Concevoir un schéma relationnel

Pour modéliser un problème :

  • identifier les entités (les types d'objets) : elles deviendront des relations ;
  • pour chaque relation, lister les attributs et fixer leur domaine ;
  • choisir une clé primaire pour chaque relation ;
  • repérer les associations entre entités et les traduire par des clés étrangères (ou, pour une association « plusieurs à plusieurs », par une relation intermédiaire) ;
  • vérifier qu'aucune information n'est inutilement dupliquée.

11.5 Contraintes d'intégrité

Pour qu'une base de données reste fiable, les données doivent respecter des règles appelées contraintes d'intégrité. On en distingue trois grandes familles.

Définition 11.14Contrainte d'intégrité de domaine

La contrainte de domaine impose que chaque valeur d'un attribut appartienne au domaine défini pour cet attribut (par exemple un entier positif, une date valide, une chaîne d'au plus 30 caractères). Une valeur en dehors du domaine est refusée.

Définition 11.15Contrainte d'intégrité d'entité

La contrainte d'entité impose que toute relation possède une clé primaire et que celle-ci soit toujours renseignée (jamais NULL) et unique. Elle garantit que chaque n-uplet est identifiable de façon non ambiguë.

Définition 11.16Contrainte d'intégrité référentielle

La contrainte référentielle impose que toute valeur de clé étrangère corresponde à une valeur existante de la clé primaire référencée (ou soit NULL si l'attribut l'autorise). Elle interdit les références « pendantes » vers des objets inexistants.

Exemple 11.17Violation des contraintes

Avec les relations Classe et Eleve précédentes :

  • insérer un élève avec annee_naissance = "deux mille" viole la contrainte de domaine (ce n'est pas un entier) ;
  • insérer un élève sans id viole la contrainte d'entité ;
  • insérer un élève avec id_classe = 99 alors qu'aucune classe n'a l'identifiant 99 viole la contrainte référentielle ;
  • supprimer la classe d'id 10 alors que des élèves y sont rattachés violerait aussi l'intégrité référentielle.

11.6 Cohérence et redondance

Définition 11.18Redondance

Il y a redondance lorsqu'une même information est stockée plusieurs fois dans la base. La redondance gaspille de l'espace mais surtout met en danger la cohérence : si une copie est modifiée et pas les autres, les données se contredisent.

Exemple 11.19Éliminer une redondance

Reprenons l'association du début du chapitre. Le fichier unique répétait le numéro de téléphone de chaque adhérent à chaque inscription. En séparant les données en deux relations, la redondance disparaît :

Le téléphone n'est plus stocké qu'une seule fois, dans Adherent. S'il change, une seule modification suffit : la cohérence est garantie. Ici la clé primaire d'Inscription est composée de deux clés étrangères, ce qui modélise l'association « un adhérent s'inscrit à plusieurs activités, et une activité accueille plusieurs adhérents ».

Proposition 11.20Bénéfices d'une bonne modélisation

Une base bien conçue (peu redondante et bien contrainte) offre :

  • un gain de place (chaque information stockée une fois) ;
  • une cohérence forte (pas de versions contradictoires) ;
  • des mises à jour simples et sûres ;
  • des interrogations efficaces et fiables.

11.7 Le système de gestion de bases de données (SGBD)

Définition 11.21SGBD

Un système de gestion de bases de données (SGBD) est un logiciel qui permet de créer, stocker, organiser, interroger et modifier une base de données. Il fait l'intermédiaire entre les utilisateurs (ou les programmes) et les données stockées sur disque. Exemples : SQLite, PostgreSQL, MySQL, MariaDB, Oracle.

Proposition 11.22Rôles du SGBD

Un SGBD assure notamment :

  • la persistance des données (conservation sur disque) ;
  • le respect des contraintes d'intégrité (il refuse les opérations qui les violeraient) ;
  • l'interrogation des données via un langage dédié, le plus souvent SQL ;
  • la gestion des accès concurrents : plusieurs utilisateurs peuvent travailler simultanément sans corrompre les données ;
  • la sécurité (droits d'accès) et la reprise après panne.
Exemple 11.23Création d'une table avec un SGBD

En SQL, le langage des SGBD relationnels, on déclare une table en précisant ses attributs, leurs domaines (types) et ses contraintes :


CREATE TABLE Classe (
    id          INTEGER PRIMARY KEY,
    nom_classe  TEXT NOT NULL
);

CREATE TABLE Eleve (
    id               INTEGER PRIMARY KEY,
    nom              TEXT NOT NULL,
    prenom           TEXT NOT NULL,
    annee_naissance  INTEGER,
    id_classe        INTEGER,
    FOREIGN KEY (id_classe) REFERENCES Classe(id)
);

On retrouve les trois familles de contraintes : les types (INTEGER, TEXT) traduisent les domaines, PRIMARY KEY la contrainte d'entité, et FOREIGN KEY la contrainte référentielle.

Continuer sur Adloun : animation, QCM, fiches, exercices