Demandez le programme !

Le développement des traitements informatiques nécessite la manipulation de données de plus en plus nombreuses. Leur organisation et leur stockage constituent un enjeu essentiel de performance. Le recours aux bases de données relationnelles est aujourd’hui une solution très répandue. Ces bases de données permettent d’organiser, de stocker, de mettre à jour et d’interroger des données structurées volumineuses utilisées simultanément par différents programmes ou différents utilisateurs. Cela est impossible avec les représentations tabulaires étudiées en classe de première. Des systèmes de gestion de bases de données (SGBD) de très grande taille (de l’ordre du pétaoctet) sont au centre de nombreux dispositifs de collecte, de stockage et de production d’informations. L’accès aux données d’une base de données relationnelle s’effectue grâce à des requêtes d’interrogation et de mise à jour qui peuvent par exemple être rédigées dans le langage SQL (Structured Query Language). Les traitements peuvent conjuguer le recours au langage SQL et à un langage de programmation. Il convient de sensibiliser les élèves à un usage critique et responsable des données.

Les chapitres qui peuvent être mis en relation avec ce chapitre sont :

Base de données relationnelles

Nous avons défini le modèle relationnel dans le chapitre précédent. Pour utiliser concrètement ce modèle assez abstrait, on utilise un système de gestion de bases de données.

Un système de gestion de base de données (SGBD) est un logiciel servant d'interface entre l'utilisateur et les données.
Un SGBD permet de stocker, de trouver, de modifier, de trier, de transformer des données contenues dans une base de données.

Tout SGBD utilise un langage de requêtes qui permet d'interroger et de manipuler la base de données.
En NSI, nous utiliserons le langage SQL (Structured Query Language : langage de requêtes structurées).

Il existe différents types de SGBD : hiérarchiques, relationnels, orientés objet, etc.

Dans le programme de terminale NSI, nous nous intéressons aux SGBD relationnels.

Le vocabulaire utilisé dans un SGBD diffère du vocabulaire utilisé dans le modèle relationnel. Voici un tableau qui va vous permettre de vous y retrouver.
Attention toutefois, les notions ne sont pas équivalentes.

Modèle relationnel SGBD
relation table
attributs colonnes
$n$-uplet lignes

Il existe de nombreux SGBD. Certains SGBD sont payants, d'autres sont libres. Les différences entre les SGBD se font également en fonction du nombre de données traitées ainsi que son hébergement.
Certains SGBD sont des logiciels (voire une composante d'un logiciel), d'autres aussi des serveurs.
Voici une liste non exhaustive :

Vous pouvez faire une recherche sur l'historique des SGBD et sur ses enjeux.

Rôle et fonctions d'un SGBD

Un SGBD doit assurer un ensemble de fonctions :

Langage SQL pour la définition des données

Nous avons vu que notre base de données est un ensemble de schémas que nous pouvons implanter par la création de tables.

Créer une base de données n'est pas explicitement au programme de Terminale NSI, nous allons simplement étudier les ordres qui permettent d'implémenter d'un point de vue logiciel une base de données.

Le langage SQL utilise des mots clés et une syntaxe à respecter. Par exemple la commande qui permet la création de la table series :

    CREATE TABLE serie (
        idSerie int(11) NOT NULL,
        nomSerie varchar(30) NOT NULL,
        desSerie TEXT,
        AnneeSerie DATE,
        nbSaison int(11)NOT NULL,
        PRIMARY KEY (idSerie)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Vous remarquerez le ; à la fin de la commande. Les espaces et l'indentation n'ont pas d'incidence, cela facilite simplement la lecture.

En observant la syntaxe de la création de la table serie, indiquer les attributs, les domaines et les contraintes d'intégrité de cette table.

Code de déblocage de la correction :

Python et SQL

Nous utiliserons une autre architecture pour travailler les bases de données, mais regardons du côté du logiciel Python. Il existe une API (Application Programming Interface) en langage python qui s'appelle sqlite3 qui permet d'utiliser le langage SQL.

On considère le schéma relationnel : Artiste(idArtiste,nom,prénom,annéeNaiss) avec :

En utilisant le trinket (ou en copiant le code dans l'IDLE Python de votre choix), observer et analyser le code ci-dessous :

    Modifier le code Trinket ci-dessus :

  1. En ajoutant des enregistrements dans la liste data_artists pour ajouter des enregistrements dans la table Artiste.

  2. En modifiant la liste data_artists pour avoir deux fois le même enregistrement. Essayer d'insérer vos nouvelles données.
    Que se passe-t-il ? Expliquer pourquoi.

Code de déblocage de la correction :

Le langage SQL et la création de tables

Pour créer une table, on utilise les mots clés CREATE TABLE. La syntaxe est :

    CREATE TABLE nom_table( attribut_1 domaine_1 contrainte_1,
                            attribut_2 domaine_2 contrainte_2,
                            ...
                            attribut_n domaine_n contrainte_n,
                            ...
                            contrainte_globale);

Reprenez le Trinket ci-dessus et répondez aux questions suivantes :

  1. Quelles sont les contraintes des différents attributs ?

  2. Existe-t-il une contrainte globale ?

Code de déblocage de la correction :

les types de données en langage SQL

Nom du type/mot clé Description
SMALLINT Entier de 16 bits signés (valeur exacte)
INTEGER Entier de 32 bits signés (valeur exacte)
INT Alias pour INTEGER
BIGINT Entier de 64 bits signés (valeur exacte)
DECIMAL(t,f) Décimal signé de t chiffres dont f chiffres après la virgule (valeur exacte)
REAL Flottant de 32 bits (valeur approchée)
DOUBLE PRECISION Flottant de 32 bits (valeur approchée)
CHAR(n) Chaîne de $n$ caractères
VARCHAR(n) Chaîne d'au plus $n$ caractères
TEXT Chaîne de taille quelconque
BOOLEAN Type booléen parfois non supporté
DATE Date au format 'AAAA-MM-JJ'
TIME Heure au format 'hh:mm:ss'
TIMESTAMP Un instant (date et heure) au format 'AAAA-MM-JJ hh:mm:ss'
NULL Il existe une valeur NULL (comme None en Python)

SQL et la gestion des contraintes d'intégrité

Nous avons vu le caractère indispensable des contraintes d'intégrité dans le modèle relationnel. Voici la liste des mots clés qui permettent d'implémenter ces contraintes :

Nom Mot-clé Explications
Clé primaire PRIMARY KEY idEleve INT PRIMARY KEY
(lors de la déclaration de l'attribut)
ou PRIMARY KEY(idEleve)
(lors des contraintes globales)
Clé étrangère REFERENCES nom_table (parfois avec FOREIGN KEY) Nom_attribut domaine_ attribut REFERENCES nom_table (nom_attribut)
Unicité d'un attribut UNIQUE Parfois utiliser pour un attribut qui n'est pas une clé primaire (une adresse email par exemple).
Obliger à la non nullité NOT NULL Pour un nom par exemple.
Contrainte utilisateur CHECK Par exemple pour imposer un âge positif (ou la majorité).
Se déclare dans les contraintes globales.
Exemple : CHECK (age >=0)

SQL et la suppression de tables

La commande qui permet de supprimer une table est la commande DROP TABLE nom_table.

Il faut faire attention aux contraintes de référencement sous peine d'avoir un message d'erreur qui spécifie que la suppression n'a pas été effectuée. Cela arrive lorsque votre table sert de référence pour une clé étrangère dans une autre table.

SQL et l'insertion dans une table

Maintenant que nos tables sont créées, il faut insérer des valeurs ($n$-uplets). Pour insérer des valeurs, nous utiliserons la commande INSERT INTO nom_table VALUES (n-uplets).

Les contraintes d'intégrité sont vérifiées au moment de l'insertion.

Reprenez l'exercice Trinket en langage Python et repérer toutes les informations de ce cours et la manière dont Python gère les ordres SQL.

Code de déblocage de la correction :

Exercices

En utilisant Trinket ou votre IDLE préféré, réaliser une base de données dans laquelle des personnes (nom et prénom) sont associées à leur numéro de téléphone. Vous pouvez réaliser une base simple avec la création d'une seule table (personne) ou compliquer un peu les choses avec la création de deux tables (personne et numéros). Vous insèrerez quelques enregistrements dans votre base de données.

Code de déblocage de la correction :

Cet exercice vous permet de tester les contraintes d'intégrité. Le fichier jupyter est téléchargeable en fin de documents.

Fichier jupyter à télécharger

Code de déblocage de la correction :

Revenez sur votre base de données series et reprenez votre schéma relationnel. Implémentez ce schéma par l'API sqlite3 du langage python. enregistrez quelques $n$-uplets dans votre base.

Code de déblocage de la correction :

Accéder à une base de données en utilisant un SGBD

Il existe différentes méthodes pour accéder à une base de données par l'intermédiaire d'un SGBD

Bases accessibles sur un serveur hébergé sur le web

Pour avoir des exemples de requêtes, vous pouvez visiter cet espace pédagogique du cnam (conservatoire national des arts et métiers)

Base de données en français avec des exemples de requêtes sur le CNAM

Tester de nombreuses requêtes pour vous familiariser avec langage (que nous utiliserons dans bdd3)

Mode client-serveur sur votre propre environnement

Il faut créer un environnement qui permette d'utiliser le modèle client-serveur avec un client et un serveur sur votre ordinateur.

Cet environnement est constitué de différents outils :

Il existe des suites logicielles qui installent ces outils.

Nous allons utiliser le logiciel UwAmp : lien vers le site

Il faut installer ce logiciel sur votre ordinateur.

Installation et configuration de UwAmp

Il faut configurer UwAmp pour qu'il s'installe comme tache de fond, visible dans la barre des taches.

Une fois que les serveurs sont démarrés, et que les ports sont configurés, il faut démarre l'outil PHPMyAdmin.

Téléchargement des bases pour travailler

Quelques bases à télécharger pour vous entrainer.

Quelques bases accessibles sur le web :

Utilisation de phpMyAdmin

Vous devez une fois connecté à phpMyAdmin avoir une fenêtre qui ressemble à :

Une première vidéo de prise et main pour importer une base déjà construite.

Choisir un base dans le chapitre "Téléchargement des bases pour travailler" et l'importer à l'aide phpMyadmin.

Code de déblocage de la correction :

Vous avez déjà travaillé une requête par l'intermédiaire de l'api sqlite3.

Vous pouvez maintenant écrire et exécuter des requêtes dans phpMyadmin. Vous pouvez vous aider de la vidéo suivante, par exemple pour, dans la table film, faire afficher l'ensemble des lignes, puis seulement l'ensemble des titres de films avec leur genre et leur code pays présents dans la base de données :

Code de déblocage de la correction :

Une vidéo pour créer votre première base pour faire des tests.

Code de déblocage de la correction :

Quelques requêtes intéressantes sur la création d'utilisateurs avec des droits particuliers.

Si vous êtes en ligne de commandes, il faut penser à utiliser la commande

FLUSH PRIVILEGES

Dans certains SGBD en ligne, la commande DROP est désactivée

Un lien intéressant avec les commandes principales : Lien vers le site

A l'aide des commandes précédentes, vous devez créer des utilisateurs avec des profils particuliers :

Faire des essais en vous connectant avec ces différents profils

Code de déblocage de la correction :

Utiliser SQL en ligne de commande

Il peut être intéressant d'interroger et de travailler sur sa base en mode console.

Quelques commandes intéressantes :

Commande Explications
mysql -u root -p Se connecter à MySQl avec l'utilisateur root
source chemin_source Importer une base. Commande intéressante si la base est 'lourde' et ne passe pas en mode graphique.
Show databases Affichage des bases
use nom_base Connexion à la base
exit Quitter MySQL

Se connecter à Mysql en ligne de commandes

Attention vous ne devez pas laisser les bases que vous avez téléchargées dans Téléchargement(download), car il se trouve lui même dans le dossier Elève qui est écrit avec un accent, ce qui est bloquant. Je vous conseille de mettre vos tables directement dans le dossier UwAmp.

  1. Vérifier la présence de bases.
  2. Se connecter à une base. Vérifier les tables de cette base. Faire une requête sur une table (exemple select * from table;)
  3. Importer en ligne de commandes une base du chapitre "Téléchargement des bases pour travailler"

Code de déblocage de la correction :

Un lien intéressant avec les commandes principales : Lien vers le site

Interrogée une base de données en ligne de commande sur un serveur Linux distant (raspberry)

Dans un premier temps, demander à votre professeur l'adresse IP du Raspberry ainsi que des identifiants et mot de passe.

Ouvrer un terminal "invite de commandes" de windows (Vous pouvez également utiliser l'application Putty)

La commande ssh nom_utilisateur@adresse_ip

Connexion à mysql avec un utilisateur 'eleve'

Un utilisateur 'utilisateur' avec MDP 'utilisateur' a été créé avec des privilèges restreints pour une utilisation de toutes les bases.

Utilisation de vscode

Vscode peut vous permette d'accéder à vos bases de données. Il faut installer quelques extensions.

Vscode peut également vous permette de lire les fichiers SQL.

Prendre un ou plusieurs fichiers disponibles dans "Téléchargement des bases pour travailler" ( accès direct) et les ouvrir avec Vscode.

Observer la structure de la base de données ainsi que son contenu.

Modifier le contenu d'une base de données dans Vscode et réimporter la base avec la méthode de votre choix.

Faire des requêtes pour observer les modifications.

Bibliographie et sitographie

Savoir et Savoir faire

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International