💻sciences

Bases de données NSI : maîtriser le modèle relationnel

11 octobre 2026 9 min de lecture

Tu entends parler de bases de données NSI et de modèle relationnel sans trop savoir par où commencer ? Pas de panique. Dans cet article, on va décortiquer ensemble cette notion essentielle du programme de Première et Terminale NSI. À la fin, tu sauras concevoir une base de données, écrire des requêtes SQL et même manipuler tout ça en Python. Prêt à devenir un as des données ? C'est parti !

Pourquoi les bases de données sont partout (et pourquoi tu dois les maîtriser)

Imagine un instant le site de ton lycée : il doit gérer des milliers d'élèves, de notes, de professeurs, de classes. Si tout était stocké dans un simple fichier texte, ce serait un vrai capharnaüm. Une base de données est un ensemble organisé d'informations permettant de stocker, retrouver et modifier des données efficacement. En NSI, on étudie principalement les bases de données relationnelles, c'est-à-dire organisées en tables liées entre elles. Ce modèle, imaginé par Edgar F. Codd en 1970, est encore aujourd'hui la colonne vertébrale de la majorité des applications : banques, réseaux sociaux, jeux vidéo... Tu vas donc apprendre un savoir-faire très concret, évalué au bac et utile dans plein de projets.

Le modèle relationnel : des tables, des lignes et des clés

Le modèle relationnel repose sur une idée simple : représenter les données sous forme de tables (aussi appelées relations). Chaque table possède des colonnes (les attributs) et des lignes (les enregistrements). Par exemple, une table Eleve peut avoir les colonnes id, nom, prenom, classe. Une table Note contiendra id_eleve, matiere, valeur.

Pour éviter les doublons et relier les tables, on utilise des clés :

  • Clé primaire : un attribut (ou un ensemble d'attributs) qui identifie de manière unique chaque ligne d'une table. Dans Eleve, c'est souvent id.
  • Clé étrangère : un attribut qui fait référence à la clé primaire d'une autre table. Dans Note, id_eleve est une clé étrangère pointant vers Eleve.id.

Grâce à ces clés, on peut faire des jointures : croiser les données de plusieurs tables pour répondre à des questions complexes, comme « quelles sont les notes de Julie en maths ? ». C'est toute la puissance du relationnel.

Les propriétés ACID (bonus culture)

Une base de données relationnelle garantit quatre propriétés fondamentales, résumées par l'acronyme ACID : Atomicité, Cohérence, Isolation, Durabilité. En NSI, on ne te demande pas de les implémenter, mais savoir les nommer peut impressionner ton correcteur. Retiens surtout que ces propriétés assurent que les transactions (séries d'opérations) sont fiables, même en cas de panne.

Passer à la pratique : SQL, le langage des bases de données

Pour interroger une base relationnelle, on utilise le SQL (Structured Query Language). En NSI, tu dois connaître les requêtes de base : SELECT, FROM, WHERE, JOIN, INSERT, UPDATE, DELETE. Voici un exemple simple :

-- Sélectionner les noms et prénoms des élèves de Terminale
SELECT nom, prenom
FROM Eleve
WHERE classe = 'Terminale';

-- Faire une jointure pour obtenir les notes de Julie
SELECT Note.matiere, Note.valeur
FROM Note
JOIN Eleve ON Note.id_eleve = Eleve.id
WHERE Eleve.prenom = 'Julie';

La première requête renvoie tous les élèves de Terminale. La seconde combine deux tables pour lister les notes de Julie. Remarque la clause JOIN ... ON qui précise la condition de jointure.

Manipuler une base avec Python : le module sqlite3

En NSI, on utilise souvent le langage Python pour interagir avec une base de données. Le module sqlite3 est parfait pour ça : il crée une base légère dans un fichier. Voici un exemple complet et testable :

import sqlite3

# Connexion (crée le fichier si inexistant)
conn = sqlite3.connect('lycee.db')
cur = conn.cursor()

# Création des tables
cur.execute('''CREATE TABLE IF NOT EXISTS Eleve (
    id INTEGER PRIMARY KEY,
    nom TEXT,
    prenom TEXT,
    classe TEXT
)''')
cur.execute('''CREATE TABLE IF NOT EXISTS Note (
    id INTEGER PRIMARY KEY,
    id_eleve INTEGER,
    matiere TEXT,
    valeur REAL,
    FOREIGN KEY (id_eleve) REFERENCES Eleve(id)
)''')

# Insertion de données
cur.execute("INSERT INTO Eleve (nom, prenom, classe) VALUES ('Dupont', 'Julie', 'Terminale')")
id_julie = cur.lastrowid
cur.execute("INSERT INTO Note (id_eleve, matiere, valeur) VALUES (?, 'Maths', 15.5)", (id_julie,))
conn.commit()

# Requête avec jointure
cur.execute('''SELECT Note.matiere, Note.valeur
               FROM Note
               JOIN Eleve ON Note.id_eleve = Eleve.id
               WHERE Eleve.prenom = ?''', ('Julie',))
for ligne in cur.fetchall():
    print(ligne)

conn.close()

Ce script crée deux tables, insère Julie et une note, puis affiche ses notes. Les ? sont des paramètres pour éviter les injections SQL (une faille de sécurité). Prends l'habitude de les utiliser !

Cas d'usage concret : gérer une bibliothèque

Mettons en pratique tout ce que tu as appris avec un exemple fil rouge : la gestion d'une bibliothèque municipale. Tu dois modéliser les livres, les adhérents et les emprunts. Voici une proposition de schéma relationnel :

  • Livre (id_livre, titre, auteur, annee)
  • Adherent (id_adherent, nom, prenom, email)
  • Emprunt (id_emprunt, id_livre, id_adherent, date_emprunt, date_retour)

Les clés primaires sont soulignées. id_livre et id_adherent dans Emprunt sont des clés étrangères. Tu peux alors répondre à des questions comme : « Quels livres sont actuellement empruntés ? » ou « Combien d'emprunts a réalisés tel adhérent ? ».

Pour t'entraîner, tu peux créer cette base avec SQLite et écrire des requêtes. Par exemple :

-- Liste des livres empruntés par Julie
SELECT Livre.titre
FROM Emprunt
JOIN Livre ON Emprunt.id_livre = Livre.id_livre
JOIN Adherent ON Emprunt.id_adherent = Adherent.id_adherent
WHERE Adherent.prenom = 'Julie' AND Emprunt.date_retour IS NULL;

Cette requête utilise deux jointures et une condition sur la date de retour (NULL signifie non rendu). C'est typique de ce qu'on peut te demander en exercice.

Méthode de révision et lien avec le bac NSI

Pour maîtriser les bases de données en NSI, il faut pratiquer régulièrement. Voici une méthode en 4 étapes :

  • Comprendre le modèle : savoir dessiner un schéma relationnel avec clés primaires et étrangères.
  • Écrire des requêtes SQL : commence par des SELECT simples, puis ajoute des WHERE, JOIN, GROUP BY.
  • Manipuler en Python : utilise sqlite3 pour créer des tables et insérer des données. C'est souvent demandé à l'épreuve pratique.
  • S'entraîner sur des annales : les exercices du bac portent souvent sur la création de requêtes ou l'interprétation de résultats.

Pour approfondir, consulte notre cours dédié au SQL et nos exercices corrigés. Si tu veux des révisions structurées, jette un œil à Allolycée qui propose des fiches et des quiz. Et pour des ressources générales, Allobac est une mine d'or.

Les erreurs fréquentes à éviter

En NSI, les correcteurs voient souvent les mêmes erreurs : oublier la clause ON dans un JOIN, confondre clé primaire et clé étrangère, ou mal paramétrer une requête Python. Pense à toujours vérifier la cohérence de ton schéma avant de coder. Et n'oublie pas : une base de données bien conçue, c'est 80 % du travail !

Conclusion : lance-toi !

Tu as maintenant toutes les cartes en main pour comprendre et utiliser les bases de données relationnelles en NSI. Le modèle relationnel n'aura plus de secret pour toi : tables, clés, jointures, SQL et Python. N'attends pas pour t'entraîner : crée une petite base pour tes mangas, tes jeux ou tes révisions. Plus tu pratiques, plus ça devient naturel. Et souviens-toi : en cas de doute, reviens sur nos cours et nos exercices. Allez, à toi de jouer !

📚 Pour aller plus loin

Questions fréquentes

Qu'est-ce qu'une clé primaire dans une base de données relationnelle ?

Une clé primaire est un attribut (ou un ensemble d'attributs) qui identifie de manière unique chaque enregistrement d'une table. Elle ne peut pas être NULL et doit être unique. Par exemple, dans une table Eleve, l'identifiant id_eleve est souvent la clé primaire.

Quelle est la différence entre une clé primaire et une clé étrangère ?

La clé primaire identifie une ligne dans sa propre table. La clé étrangère est un attribut qui fait référence à la clé primaire d'une autre table, créant ainsi un lien entre les deux tables. Elle peut contenir des doublons et des valeurs NULL.

Comment faire une jointure en SQL ?

On utilise la clause JOIN suivie de ON pour spécifier la condition de jointure. Par exemple : SELECT * FROM Note JOIN Eleve ON Note.id_eleve = Eleve.id; Cela permet de combiner les colonnes des deux tables.

Quel module Python utiliser pour manipuler une base de données en NSI ?

Le module sqlite3 est recommandé car il fait partie de la bibliothèque standard de Python. Il permet de créer, interroger et modifier une base de données SQLite sans installation supplémentaire.

Les bases de données relationnelles sont-elles au programme du bac NSI ?

Oui, elles sont au programme de Première et de Terminale NSI. Tu dois savoir concevoir un schéma relationnel, écrire des requêtes SQL et manipuler une base avec Python. C'est un point important pour l'épreuve écrite et pratique.

Comment éviter les injections SQL en Python ?

Il faut utiliser des requêtes paramétrées avec des marqueurs comme ? et passer les valeurs dans un tuple. Par exemple : cur.execute("SELECT * FROM Eleve WHERE nom = ?", (nom,)). Ne jamais concaténer directement les chaînes de caractères.

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
bases de données NSImodèle relationnelSQLPythonclé primaireclé étrangèrebac NSI
Pixel