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 :

Langage d'interrogation d'une base de données.

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). Il n'est pas au programme de TNSI de créer une base de données.

Nous utiliserons plusieurs bases de données pour travailler cette partie :

Quelques commandes du langage SQL

Les commandes d'interrogation de la base

Il existe plusieurs types de requêtes pour interroger une table.

La projection

La projection d'une table permet d'obtenir une partie des champs (=colonnes) de la table .
Elle utilise la commande SELECT suivi des colonnes voulues ainsi que le mot clé FROM suivi du nom de la table.

On sélectionne avec SELECT des colonnes de la table.

Un considère la base de données Tournoi, téléchargeable ici.

Relation : Joueur(IdJoueur, nomJoueur, pnomJoueur)

Quelques requêtes SQL :

Relation : Partie(Idpartie, #idJoueur1, #idJoueur2, score1, score2, #idvainqueur)

Un visuel de l'affichage du contenu des deux tables grâce à SELECT :

La sélection

La sélection d'une table permet de choisir une partie des lignes de la table.
On utilise le mot clé WHERE suivie du (ou des) critère(s).

Un exemple :

Dans le code SELECT idvainqueur, idpartie FROM partie WHERE idvainqueur = 3; :

Voici une liste d'opérateurs utiles pour préciser la condition écrite dans le WHERE :

Commande Explications
<,>, <=,>= Utilisables sur des données numériques.
Exemple : WHERE score1 >= 50
AND Intersection : ET.
Exemple : WHERE score2 >= 10 AND score2 < 20
OR Union : OU.
Exemple : WHERE idJoueur1 = 6 OR idJoueur2 = 6
NOT Négation.
Exemple : WHERE NOT idvainqueur = idJoueur1
LIKE Comme.
Exemple : WHERE nomJoueur LIKE 'Terez'
BETWEEN Entre.
Exemple : WHERE date BETWEEN '2020-01-01' AND '2025-12-31'
IN Dans
Exemple : WHERE nomJoueur IN ('Terez', 'Leponge', 'Gosse')
% Symbole qui représente une chaîne de caractères.
Exemple : WHERE nomJoueur LIKE '%e'
(nomJoueur peut être ici Melusine ou Leponge ou Gosse mais pas Kalité)
_ Symbole qui représente un caractère.
Exemple : WHERE pnomJoueur LIKE 'B_'
(pnomJoueur peut être ici Bo mais pas Bob)

Relation : personne(Id,nom,pNom,ville,tel,email)

La jointure

Vous pouvez revisiter le cours sur les tables et les jointures de première : accès direct aux jointures sur les tables (pour rappel)

La jointure permet de mettre en relation plusieurs tables. La jointure utilise les clés primaires et étrangères des tables qu'elle met en relation. Elle utilise les mots clés JOIN ... ON :

Dans cet exemple, nous allons utiliser une base de données tournoi définie comme ceci :

Avec les tables :

Vous remarquerez qu'il y a des erreurs d'informations concernant les vainqueurs. Nous allons voir un peu plus loin comment modifier ces erreurs.

Schéma relationnel :

Dans la table partie, les clés idJoueur1, idJoueur2 et idvainqueur sont des clés étrangères reliées à la clé primaire idJoueur de la table joueur.

Je cherche à connaître les identifiants des parties gagnées par Bob LEPONGE (idjoueur=3).

Première requête :

J'aimerais que soit affiché le nom du gagnant et non pas son identifiant. Pour cela il faut que je relie les tables joueur et partie car le nom des joueurs est une information de la table joueur mais l'id du vainqueur est une information de la table partie :

En cas de conflit possible entre les noms des attributs, on peut préfixer les noms par le nom des tables :

Les calculs et fonctions sur un champ ou plusieurs champs

Nous conservons notre base de données tournoi.

Nous vous proposons soit des requêtes, soit des résultats de requêtes.

Pour répondre vous pouvez retourner aux tables ci-dessus.

  1. Donner les résultats de la requête.

  2. Écrire la requête.

  3. Donner les résultats de la requête.

  4. Donner les résultats de la requête.

  5. Écrire la requête.

Code de déblocage de la correction :

Les commandes de modification de la base

Mise à jour des données

Il est possible d'insérer, de supprimer ou de mettre à jour des données.

Les syntaxes sont les suivantes :

Commande/mot-clé Explications/syntaxe
INSERT INTO nom table (champ1,champ2, ...) VALUES (valeur1,valeur2, ...) ; Insertion des données. On ajoute un $n$-uplet.

Exemple :
INSERT INTO joueur (idJoueur,nomJoueur,pnomJoueur) VALUES (6,'Smatik','Karim')

UPDATE nom_table SET ... WHERE ... Modifier des données suivant le mot-clé SET au niveau des lignes suivant la condition du WHERE.

Exemple :
UPDATE partie SET idvainqueur = 1 WHERE idpartie = 1

DELETE FROM nom_table WHERE .... Suppression des données. On supprime toute la ligne identifiée par le critère qui suit le mot-clé WHERE.

Exemple :
DELETE FROM partie WHERE idpartie = 10

Dans notre base de données tournoi, il y a des erreurs de déclaration des vainqueurs :

  1. Proposer une modification de la table pour corriger ces erreurs.

  2. Insérer le nouveau joueur avec un id=7 de nom 'Bros' et de prénom 'Mario'.

  3. Vérifier la présence par une requête de votre nouveau joueur.

  4. Supprimer ce nouveau joueur.

Code de déblocage de la correction :

Tableau synthétique des mots clés

Certaines commande du langage SQL ne font pas des attendues du programme de terminale NSI. En cas de doute, remontez à la section : "demandez le programme !".

Commandes exigibles : SELECT, FROM, WHERE, JOIN, UPDATE, INSERT, DELETE, DISTINCT, ORDER BY, fonctions d'agrégations (COUNT, MAX, MIN, AVG, SUM).

Commande/mot-clé Explications/syntaxe
SELECT attribut1,attribut2, ... FROM nom_table Sélection en projection.
Exemple : SELECT * FROM joueur
SELECT DISTINCT attribut1,attribut2, ... FROM nom_table Idem commande précédente en évitant de retourner des doublons
JOIN ... ON Jointure pour relier deux ou plusieurs tables.
Exemple : SELECT nomJoueur,idpartie FROM joueur JOIN partie ON idjoueur=idvainqueur WHERE idvainqueur=3;
AS Renommer une colonne.
SELECT nomJoueur AS Vainqueur FROM Joueur WHERE idVainqueur=3
ORDER BY attribut Trier par ordre croissant.
ORDER BY attribut DESC Trier par ordre décroissant.
SUM(attribut) Fonction d'agrégations : additionner les valeurs d'un champ numérique.
AVG(attribut) Fonction d'agrégations : calculer la moyenne des valeurs d'un champ numérique.
MIN(attribut) et MAX(attribut) Fonction d'agrégations : obtenir la valeur maximale ou minimale d'un champ numérique.
COUNT(Attribut) Fonction d'agrégations : compter des enregistrements
LIKE Comme. Exemple nomJoueur LIKE 'Terez'
BETWEEN Entre
IN Dans
AND Intersection
OR Union
NOT Négation
<,>, <=,>= Utilisables sur des données numériques
% Symbole qui représente une chaîne de caractères.
_ Symbole qui représente un caractère
INSERT INTO nom table (champ1,champ2, ...) VALUES (valeur1,valeur2, ...) ; Insertion des données. On ajoute un $n$-uplet.
Exemple : INSERT INTO joueur (idJoueur,nomJoueur,pnomJoueur) VALUES (6,Smatik,Karim)
UPDATE nom_table SET ... WHERE ... Modifier des données.
Exemple : UPDATE partie SET idvainqueur = 1 WHERE idpartie=1
DELETE FROM nom_table WHERE .... Suppression des données. On supprime toute la ligne identifiée par le critère qui suit le mot-clé WHERE.
Exemple : DELETE FROM partie WHERE idpartie=10

Le même nom d'attribut pour être utilisé dans deux tables différentes : il est nécessaire alors de préciser le nom de la table que l'on considère en préfixant le nom de l'attribut par celui de la table : table.attribut.
De plus, il est possible d'utiliser des alias au lieu du nom complet de la table grâce à l'instruction AS, ce qui permet par exemple de réduire la longeur de la requête.

Si nous voulons connaître l'ensemble des artistes ayant réalisé un film aux États-Unis en utilisant la base de données films.

On commence par analyser le schéma relationnelle suivant : .
Nous avons besoin de joindre à la table artiste celle pays en "passant" par celle film.
Or, les tables artiste et pays possèdent chacune un attribut nommé nom.
On doit donc utiliser ces attributs en précisant les tables : artiste.nom ou pays.nom.

Comme cela alourdit les codes SQL, il est possible de remplacer par exemple artiste par A avec artiste AS A.

On peut donc écrire la requête pour obtenir l'ensemble des prénoms et noms des artistes ayant réalisé un film aux États-Unis par la requête :

SELECT concat(A.prénom," ",A.nom," a réalisé un film aux Etats-Unis") 
	FROM artiste AS A 
		JOIN film AS F ON (A.idArtiste=F.idRéalisateur)
    	JOIN pays AS P ON (P.code=F.codePays)
            WHERE P.code="US";

On obtient ainsi la réponse suivante (sur phpMyAdmin) :

On peut réduire artiste AS A en seulement artiste A, AS étant sous-entendu.
On peut ainsi seulement écrire :

SELECT concat(A.prénom," ",A.nom," a réalisé un film aux Etats-Unis") 
	FROM artiste A 
		JOIN film F ON (A.idArtiste=F.idRéalisateur)
    	JOIN pays P ON (P.code=F.codePays)
    WHERE P.code="US";

Des accès pour vous entraîner

Il existe quelques bases de données accessibles sur le web pour vous entraîner dans vos requêtes.

Exercices

Dans ce TP, vous utiliserez la base de données sante avec le mode d'utilisation de votre choix : ligne de commande, raspberry, phpMyadmin. Si votre niveau le permet, vous pouvez tester différentes approches.

Voici une liste de requêtes à exécuter. À vous d'écrire la requête en langage SQL et d'indiquer vos (ou une partie) réponses.

  1. Nom des patients habitant la ville de Reims. (2150 noms attendus)

    Code de déblocage de la correction :

  2. Compter le nombre de médecins dans la base. (211 attendu)

    Code de déblocage de la correction :

  3. Recherche des patients n'ayant pas de médecin. (3 attendus)

    Code de déblocage de la correction :

  4. Afficher la liste des médecins dans l'ordre alphabétique des prénoms. (211 attendus, avec comme Caca Roger et Camon Maria comme deux premiers médecins de la liste)

    Code de déblocage de la correction :

  5. Rechercher l'ensemble des patients de Reims nés entre 1970 et 2010. (741 attendus)

    Écrire la date comme une chaîne de caractères de la forme AAAA-MM-JJ (année-mois-jour).

    Code de déblocage de la correction :

  6. Rechercher les patients nés en 2009, qui habitent Reims. Le résultat est trié dans l'ordre alphabétique du nom du patient. (7 attendus, de Falanra Timothée à Vefahou Laurent)

    Code de déblocage de la correction :

  7. Rechercher le nom et prénom des patients suivis par le docteur Vecanror. (20 attendus)

    Code de déblocage de la correction :

  8. Rechercher les noms de remèdes permettant de soigner la grippe. (2 attendus)

    La grippe est nommée "Grippe" comme maladie.

    Code de déblocage de la correction :

  9. Rechercher les médecins des patients ('Cadan','Zuhan','Jatova'). (5 attendus)

    Code de déblocage de la correction :

  10. Rajouter à la table sejour_hospitalisation le patient identifié par idPat='1524', dont le médecin est identifié par idMed='103' qui a été hospitalisé du 13 novembre 2023 10 heure 30 au 17 novembre 2023 à 13 heure dans le service identifé par idServ='1624'.
    On admet que ce sejour hospitalier est identifié par idSejour='2870'.

    Une date après précision de l'horaire peut être notée comme chaîne de caractères de la forme AAAA-MM-JJ hh:mm:ss.

    Code de déblocage de la correction :

Code de déblocage de la correction et plus:

Allez à cette adresse sur le site Capytale.
Vous y retrouverez la base de données tournoi. Proposer des requêtes SQL pour afficher, modifier, insérer ou supprimer des données, ... directement dans un Jupyter-notebook.

Cet exercice porte sur les bases de données et le langage SQL.

L’énoncé de cet exercice utilise les mots du langage SQL suivants :

SELECT FROM, WHERE, JOIN ON, INSERT INTO VALUES, UPDATE, SET, DELETE, COUNT, AND, OR

Pour la gestion des réservations clients, on dispose d’une base de données nommée gare dont le schéma relationnel est le suivant :

Les attributs soulignés sont des clés primaires. L’attribut précédé de # est une clé étrangère. La clé étrangère Reservation.numT fait référence à la clé primaire Train.numT.

Les attributs horaireDepart et horaireArrivee sont de type TIME et s’écrivent selon le format "hh:mm", où "hh" représente les heures et "mm" les minutes.

  1. Quel nom générique donne-t-on aux logiciels qui assurent, entre autres, la persistance des données, l’efficacité de traitement des requêtes et la sécurisation des accès pour les bases de données ?

    1. On considère les requêtes SQL suivantes :

      DELETE FROM Train WHERE numT = 1241 ;
      DELETE FROM Reservation WHERE numT = 1241 ;

      Sachant que le train n°1241 a été enregistré dans la table Train et que des réservations pour ce train ont été enregistrées dans la table Reservation, expliquer pourquoi cette suite d’instructions renvoie une erreur.

    2. Citer un cas pour lequel l’insertion d’un enregistrement dans la table Reservation n’est pas possible.

  2. Code de déblocage de la correction :

  3. Écrire des requêtes SQL correspondant à chacune des instructions suivantes :

    1. Donner tous les numéros des trains dont la destination est « Lyon ».

    2. Ajouter une réservation n°1307 de 33 € pour M. Alan Turing dans le train n°654.

    3. Suite à un changement, l’horaire d’arrivée du train n°7869 est programmé à 08 h 11.
      Mettre à jour la base de données en conséquence.

  4. Code de déblocage de la correction :

  5. Que permet de déterminer la requête suivante ?

    SELECT COUNT(*) FROM Reservation
    WHERE nomClient = "Hopper" AND prenomClient = "Grace";
  6. Écrire la requête qui renvoie les destinations et les prix des réservations effectuées par Grace Hopper.

Code de déblocage de la correction :

N'hésitez pas à découvrir ou à vous replonger dans la biographie de ces deux grandes personnes de l'histoire de l'informatique :

Cet exercice traite principalement du thème « traitement de données en tables et bases de données ». Nous nous interrogerons dans cet exercice sur la modélisation et l'utilisation des données nécessaires aux fonctionnements de sites de vente en ligne

Partie A : Modèle relationnel

Voici le modèle relationnel qui sera utilisé dans cet exercice :

Lecture :

  1. Donner les clés primaires des relations Clients et Articles.

  2. Les commandes ci-dessous ont été utilisées pour créer ces deux relations.
    Donner le domaine (c'est-à-dire le type) des attributs Email et Quantite.

    CREATE TABLE Clients (
    IdClient INT PRIMARY KEY,
    Nom VARCHAR(50),
    Prenom VARCHAR(50),
    Email VARCHAR(50)
    );
    
    CREATE TABLE ArticlesCommande (
    IdCmd INT,
    IdArticle INT,
    Quantite INT,
    PRIMARY KEY (IdCmd,IdArticle)
    FOREIGN KEY(IdArticle) REFERENCES Articles(IdArticle)
    );
  3. En vous inspirant des commandes ci-dessus, recopier et compléter la commande suivante qui permet de créer la relation Commandes en précisant sa clé étrangère.

    CREATE TABLE Commandes (
    IdCmd INT PRIMARY KEY,
    IdClient INT,
    Date DATE,
    AdresseLivraison VARCHAR(90),
    PaiementValide BOOLEAN,
    LivraisonFaite BOOLEAN,
    FOREIGN KEY(........................) REFERENCES ................. ........
    (...................................)
    );

Code de déblocage de la correction :

Partie B : Site web

La plateforme de vente en ligne possède un site web pour ses clients qui passent des commandes en remplissant un formulaire.

  1. Expliquer pourquoi, lorsqu'un formulaire contient une quantité importante de données, il est préférable d'utiliser la méthode POST plutôt que GET.

  2. Pour la validation du paiement, est-il préférable d'utiliser le protocole HTTP ou HTTPS ? Pourquoi ?

  3. Expliquer l'intérêt de vérifier, avant la validation du formulaire, le format des informations saisies (par exemple qu'il n'y a pas de chiffre dans le nom ou qu'il y a bien un @ dans l’adresse de courriel).

Code de déblocage de la correction :

Partie C : Requêtes SQL

  1. Écrire une requête SQL permettant de récupérer l'identifiant et le libellé de tous les articles coûtant moins de 15 euros.

  2. Expliquer ce que fait la requête SQL suivante.

    SELECT u.IdClient, u.Email, v.IdCmd, v.AdresseLivraison
    FROM Clients as u JOIN Commandes as v
    ON u.IdClient = v.IdClient
    WHERE v.PaiementValide = False;
  3. Écrire une requête SQL permettant de récupérer le libellé des articles de la commande 1345.

  4. On suppose que l’attribut IdArticle de la table Articles est auto-incrémenté et ne doit donc pas être précisé lors de l'ajout d'un nouvel article.
    Écrire une requête SQL permettant d'ajouter dans la base ce nouvel article.

Code de déblocage de la correction :

Partie D : Adaptation du modèle relationnel

Le propriétaire du site souhaite une adaptation du modèle relationnel afin de :

  1. Préciser, pour chaque relation que vous jugez nécessaire de modifier, les attributs ajoutés ainsi que leurs domaines.

  2. À l’arrivée d’une nouvelle commande d’un client, l’algorithme de mise à jour de la base de données ci-dessous est exécuté.
    Indiquer l’erreur présente dans cet algorithme.

    Algorithme nouvelle_commande (commande)
    Début
        Pour chaque article de la commande Faire
            Si Quantité ≤ Stock Alors
                Stock ← Stock – 1
            Sinon
                annuler l’achat de cet article
            FinSi
        FinPour
    Fin

Code de déblocage de la correction :

Code de déblocage de la correction :

Exercice de type bac

Dans le cadre de votre entraînement aux épreuves du baccalauréat, il faut vous attendre à un exercice sur ce chapitre sans la possibilité de manipulation informatique.

Il faut donc traiter cet exercice sur votre cahier sans vous donner la possibilité de traitement informatique.

Partie informations

Imaginons une société de surveillance qui possède un parc de véhicules de fonction ainsi qu'un ensemble de talkie-walkie (émetteur-récepteur radio longue portée). Le but est de modifier une base de données parc_auto qui permette d'associer un véhicule de fonction et un talkie-walkie à un employé de la société.

Voici le schéma relationnel de la base :

Quelques commentaires :

On considère que la structure de la base de données est existante et que vous avez accès à cette base par l'intermédiaire d'un SGBD avec un utilisateur ayant tous les droits sauf celui de suppression, à part sur la table enFonction .

Voici une liste d'informations :

  1. Véhicule 1 (idVeh=1) immatriculé AB-001-CD
  2. Véhicule 2 (idVeh=2) immatriculé AZ-012-CD
  3. Véhicule 3 (idVeh=3) immatriculé KH-012-CD
  4. talkie_walkie 1 (idTalk=1)
  5. talkie_walkie 2 (idTalk=2)
  6. talkie_walkie 3 (idTalk=3)
  7. talkie_walkie 4 (idTalk=4)
  8. Employé 1 (id=1) TEREZ Paskual
  9. Employé 2 (id=2) MONTAIGNE Juan
  10. Employé 3 (id=3) GERALD Juany
  11. Employé 4 (id=4) LOURDES Toma
  12. Toma commence un nouveau service avec le véhicule 3 et la talkie-walkie 2 sur le canal 30
  13. Junay est en service avec le véhicule 2 et la talkie-walkie 1 sur le canal 50

Partie Questions

  1. Écrire la requête qui permet d'ajouter à la base de données gérant le parc de véhicules le véhicule 2, en utilisant l'information n°2.

  2. Le prénom de l'employé TEREZ était mal orthographié dans la base de données.
    Écrire la requête qui permet de corriger cette erreur en utilisant l'information n°8.

  3. Écrire la requête qui traite l'information n°12.

  4. Toma vient de rentrer d'intervention. Écrire la requête qui permet de supprimer de la table enFonction le n-uplet correspondant à son utilisation d'un véhicule.

  5. Un employé vient de partir en intervention en prenant le véhicule 1 ; le directeur aimerait savoir quel employé est en intervention.
    Écrire la requête qui permet de savoir quel employé utilise un véhicule identifié par 1. (On attend son nom et son prénom).

  6. À la fin de l'année, le directeur de l'entreprise veut connaître le nombre d'interventions réalisées par Juan sur l'année.
    Le gestionnaire de la base de données lui indique que cela n'est pas possible avec la base de données telle qu'elle est structurée jusqu'à présent.
    Comment modifier la structure pour permettre l'an prochain de connaître le nombre d'interventions annuelles d'un employé ?

Code de déblocage de la correction :

La base de données blanchisserie vient de la formation DIU que nous avons suivie de l'université de Reims. Certaines requêtes sont difficiles.

A vous d'utiliser la base de données blanchisserie et de formuler les requêtes suivantes (ce sont les requêtes proposées dans le cadre du DIU) :

Pour vous aider, voici le dictionnaire des données :

Ainsi que le modèle physique des données :

Code de déblocage de la correction :

Voici un simulateur de requêtes proposé par un collègue de la liste de diffusion NSI : Jacques Le Coupanec

Accès direct à la ressource

Pour les élèves intéressés, dans le cadre d'un projet, vous pouvez étudier la source qui permet de créer ce simulateur : accès direct.

Un projet à développer après les écrits :

Reprenez l'exercice 3 sur la santé et inventez vos propres requêtes. Vous pouvez les soumettre avec la correction à vos enseignants en message privé, dans un seul fichier au format sql.

Si nous récoltons un nombre suffisant de requêtes, nous pourrions organiser une "bataille de requêtes en équipes".

  1. Inventez une requête, testez la, conservez un screen de la solution. Donnez un nombre de points à votre requête (entre 1 et 3 selon la difficulté).

  2. Constituez une équipe (entre 2 et 4) pour tester vos requêtes.

  3. Inventez des règles simples pour un jeu éventuel.

Un projet à développer dans le mois qui vient :

Vous allez par groupe :

A vous de créer votre base de données (vous pouvez utiliser une base d'exercices déjà traités). Attention, la création d'une base de données n'est pas un attendu du programme.

Un outil pour créer vos diagrammes : dbdiagram

There has been a murder in an American city: the famous SQL City!
The local police and the FBI have been unable to find who committed this crime for more than five years.

The FBI is looking for people able to conduct this police investigation successfully so this case doesn’t become a cold one. The NSA has identified you as very competent in the computing field.

So the FBI asks you to try to find who committed this murder.
If you accept this mission, enter the secret code below; then you will access all the information that the investigators have collected since the beginning of the inquiry.
If you think you have found who the murderer is, the local police and the FBI will question them and give you all the information they have confessed to.

Secret code to enter here:

The US department of Justice gives you a trip during these holidays to thank and congratulate you for your success in the difficult investigation. How lucky you are! To discover an another country, another culture, to meet people, ... You are so pleased!

So you are flying, happy ... when suddenly the plane loses altitude and crashes on an island.
By luck, you are safe but your aim is to find how to leave this unknown island. You quickly realize that people speak either English or German or Portuguese on this island.

Your last chance to go back home may be reduced to a secret code! Why not? Try it!

Secret code to enter here :

Bibliographie et sitographie

Vu sur "Lumni lycée"

Sur le site Lumni, vous avez des ressources et des vidéos dans le cadre de la "nation apprenante". Voici celles concernant les bases de données :

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