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.
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 Terminale NSI. de créer une base de données.
Nous utiliserons plusieurs bases de données pour travailler cette partie :
Il existe plusieurs types de requêtes pour interroger une table.
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 :
Pour obtenir toutes les informations sur tous les joueurs :
SELECT * FROM joueur;
Pour obtenir seulement le nom et les prénoms des joueurs :
SELECT nomJoueur, pnomJoueur FROM joueur;
Relation : Partie(Idpartie, #idJoueur1, #idJoueur2, score1, score2, #idvainqueur)
Un visuel de l'affichage du contenu des deux tables grâce à SELECT
:
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;
:
SELECT
permet de "sélectionner" par projection les
deux colonnes voulues de la table : idvainqueur
en premier puis idpartie
,
WHERE
permet de sélectionner les lignes voulues de la
table : simplement celles correspond aux parties que le joueur identifié par le nombre 3 a gagnées.
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)
Quelques requêtes SQL :
Obtenir les noms et prénoms des personnes qui habitent Reims :
SELECT nom, pNom FROM personne WHERE ville = 'REIMS';
Obtenir le nom et les numéros de téléphone des personnes qui habitent Reims ou Saint-Dizier :
SELECT nom, tel FROM personne WHERE ville = 'REIMS' or ville = 'Saint-Dizier';
Obtenir le nom et les adresses mails des personnes ayant une adresse de type 'gmail' :
SELECT nom, email FROM personne WHERE email LIKE '%gmail.com';
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
:
Après le JOIN
est précisée la table mise en relation,
Après le code ON
est précisée la condition sur les
clés primaires et étrangères permettant la mise en relation.
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 :
joueur(idJoueur, nomJoueur, pnomJoueur)
partie(idPartie, #idJoueur1, #idJoueur2, score1, score2, #idVainqueur)
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 :
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.
Donner les résultats de la requête.
Écrire la requête.
Donner les résultats de la requête.
Donner les résultats de la requête.
Écrire la requête.
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 : |
UPDATE nom_table SET ... WHERE ... | Modifier des données suivant le mot-clé SET
au niveau des lignes suivant la condition du WHERE . Exemple : |
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 : |
Dans notre base de données tournoi
, il y a des erreurs de déclaration des vainqueurs :
Proposer une modification de la table pour corriger ces erreurs.
Insérer le nouveau joueur avec un id=7 de nom 'Bros' et de prénom 'Mario'.
Vérifier la présence par une requête de votre nouveau joueur.
Supprimer ce nouveau joueur.
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 longueur 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 États-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 États-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";
Il existe quelques bases de données accessibles sur le web pour vous entraîner dans vos requêtes.
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.
Nom des patients habitant la ville de Reims. (2150 noms attendus)
Compter le nombre de médecins dans la base. (211 attendu)
Recherche des patients n'ayant pas de médecin. (3 attendus)
Pour savoir si aucun médecin n'est attribué, la condition
idMed IS NULL
peut être utilisée.
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)
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).
Par exemple, le 3 janvier 1994 est notée '1994-01-03'
.
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)
Rechercher le nom et prénom des patients suivis par le docteur Vecanror. (20 attendus)
Rechercher les noms de remèdes permettant de soigner la grippe. (2 attendus)
La grippe est nommée "Grippe"
comme maladie.
Rechercher les médecins des patients ('Cadan','Zuhan','Jatova'). (5 attendus)
Pour rechercher dans un ensemble de chaînes de caractères, il suffit d'écrire en SQL :
soit ... IN ('element1', 'element2', ...)
soit ... = 'element1' OR ... = 'element2' ...
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.
Allez à cette adresse
sur le site Capytale. Le code d'accès à ce capytale est 22d0-90198
.
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.
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 ?
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.
Citer un cas pour lequel l’insertion d’un enregistrement dans la table Reservation
n’est
pas possible.
Écrire des requêtes SQL correspondant à chacune des instructions suivantes :
Donner tous les numéros des trains dont la destination est « Lyon ».
Ajouter une réservation n°1307 de 33 € pour M. Alan Turing dans le train n°654.
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.
Que permet de déterminer la requête suivante ?
SELECT COUNT(*) FROM Reservation
WHERE nomClient = "Hopper" AND prenomClient = "Grace";
Écrire la requête qui renvoie les destinations et les prix des réservations effectuées par Grace Hopper.
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 :
un symbole identifie une clé primaire,
un symbole entre deux attributs indique qu’ils doivent partager les mêmes valeurs. Ces valeurs sont prises de manière unique dans la relation du côté et zéro, une ou plusieurs fois du côté . à condition d’être présente du côté .
Donner les clés primaires des relations Clients
et Articles
.
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)
);
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 ................. ........
(...................................)
);
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.
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.
Pour la validation du paiement, est-il préférable d'utiliser le protocole HTTP ou HTTPS ? Pourquoi ?
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).
Partie C : Requêtes SQL
É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.
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;
Écrire une requête SQL permettant de récupérer le libellé des articles de la commande 1345.
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.
Partie D : Adaptation du modèle relationnel
Le propriétaire du site souhaite une adaptation du modèle relationnel afin de :
comptabiliser le stock pour chaque article,
pouvoir mémoriser, pour chaque client, une adresse de livraison par défaut de ses commandes.
Préciser, pour chaque relation que vous jugez nécessaire de modifier, les attributs ajoutés ainsi que leurs domaines.
À 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
Dans cette partie, on se place dans le cadre d’applications Web de jeux accessibles en ligne via un navigateur. L’éditeur commercialise plusieurs jeux et fait donc appel à un Système de Gestion de Base de Données (SGBD) qui utilise le langage SQL.
On pourra utiliser les mots clés suivants du langage SQL :
SELECT, FROM, WHERE, JOIN, ON, INSERT, INTO, VALUES, UPDATE, SET, DELETE, ORDER,
BY, ASC, DESC, AND
et OR
.
Le schéma relationnel de la base Jeux_WEB
est constitué de trois relations (ou tables) :
joueurs
(id_joueur, pseudo, mail, mot_de_passe)
jeux
(id_jeu, nom_jeu, type_jeu)
scores
(id_jeu, id_joueur, score_joueur)
Dans ce schéma relationnel, les clés primaires sont en gras et les clés étrangères n'y sont pas représentées.
Tous les attributs dont le nom est préfixé par id sont des nombres entiers ainsi que l’attribut score_joueur. Les autres attributs sont des chaînes de caractères.
Donner des services rendus par un système de gestion de bases de données relationnelles.
Indiquer, pour chacun des trois enregistrements ci-dessous, la table à laquelle ils appartiennent.
Enregistement 1 : 344OsmondiaAventure
Enregistement 2 : 34410343
Enregistement 3 : 1034THEBESTthebest@meilleur.frtheBest24
Indiquer un problème que peut poser le fait de stocker les mots de passe en clair des joueurs dans une table.
Indiquer si, avec le schéma relationnel proposé, deux joueurs peuvent ou non avoir le même pseudonyme.
Identifier les clés étrangères de la table scores
et pour chaque clé étrangère,
indiquer la table et l’attribut auxquels la clé étrangère fait référence.
Justifier s’il est possible ou non que dans ce schéma relationnel un joueur puisse jouer à plusieurs jeux.
Expliquer ce que l’on obtient si on exécute successivement les deux requêtes suivantes :
INSERT INTO joueurs
VALUES (1035, 'PAS2BOL', 'titi@mail.com', 'LoB2SaP');
INSERT INTO joueurs
VALUES (1035, 'SPECTRUS', 'titi@mail.com', 'LoB2SaP');
Écrire une requête SQL permettant d’ajouter un enregistrement à la table
scores
pour le joueur d’identifiant 1042 à un jeu d’identifiant 24 avec un score
initial de 0 point.
Ce joueur d’identifiant 1042
venant de terminer une partie au jeu d’identifiant 24
avec un score de 8 points, écrire une requête SQL permettant de mettre à jour son score.
Écrire une requête SQL qui permet d'obtenir l'adresse mail de tous les
joueurs ayant obtenu plus de 1000 points au jeu nommé SuperQuestLeague
.
Le joueur Test2024
, identifié par le numéro 618524036
, a
joué seulement à une partie du jeu SuperQuestLeague
.
Peu convaincu par les jeux en ligne proposés par l'éditeur, ce joueur décide de
supprimer son compte.
Donner l’ordre dans lequel le gestionnaire de la base de données doit supprimer
les références liées à ce joueur en expliquant pourquoi, puis
écrire la ou les requêtes permettant cette suppression du joueur en s'assurant que la
base reste cohérente.
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 informationsImaginons 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 :
employé(id,nom,prénom) avec id
clé primaire de la table employé,
véhicule(idVeh,num) avec idVeh
clé primaire de la table véhicule,
talk(idTalk) avec idTalk
clé primaire de la table talk,
enFonction(idFonc,#id,#idVeh,#idTalk,canal) avec idFonc
clé primaire de la table,
id
, idVeh
et idTalk
des clés étrangères.
Quelques commentaires :
Les identifiants sont des entiers,
num
est un ensemble de 9 caractères du type plaque d'immatriculation (exemple : AA-000-AA),
canal
est un entier qui correspond au canal sur lequel on peut communiquer avec l'employé.
canal
doit être unique
,
idFonc
sera incrémenté automatiquement,
un véhicule ne comporte au plus qu'un employé,
un employé donné n'est présent au plus que dans un n-uplet de la table enFonction à un instant donné,
l'état de la table enFonction ne renseigne que sur les interventions du moment mais en rien de celles passées : dès la fin de l'intervention, une suppression du n-uplet correspondant est réalisée.
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 :
Partie Questions
É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.
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.
Écrire la requête qui traite l'information n°12.
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.
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).
À 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é ?
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 :
Voici un simulateur de requêtes proposé par un collègue de la liste de diffusion NSI : Jacques Le Coupanec
Accès direct à la ressourcePour 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".
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é).
Constituez une équipe (entre 2 et 4) pour tester vos requêtes.
Inventez des règles simples pour un jeu éventuel.
Un projet à développer dans le mois qui vient :
Vous allez par groupe :
Trouver une situation concrète (ou loufoque !) dans laquelle une base de données peut être pertinente,
Développer le modèle relationnel en créant les tables de cette base de données tout en réflechissant aux attributs et aux liens entre ces tables à travers leurs clés primaire et étrangères.
Ajouter dans ces tables des lignes correspondant aux instances de ces tables.
Proposer des questions concrètes en lien avec votre base de données ainsi que la requête SQL qui permet de
répondre à cette question.
Faire en sorte que vous utilisiez à travers l'ensemble des requêtes l'ensemble des instructions SQL au programme
(cf. programme officiel de NSI pour ce chapitre.)
Le projet sera suivi d'un exposé oral individuel type Grand Oral :
Pendant 5 minutes vous présenterez sans interruption à l'oral votre projet,
Des questions quant à votre présentation et projet seront posées ensuite,
Un document A4 peut être préparé à l'avance et donné à l'examinateur afin de faciliter votre exposé.
Pour vous aider dans la réalisation de ce projet, vous allez :
Dans un premier temps, compléter les membres de votre groupe sur le Framacalc de votre établissement.
Créer ensuite un Framapad depuis le site de Framasoft. Ne pas hésiter à regarder la vidéo explicative de la "Visite Guidée" ou à demander à votre enseignant de l'aide.
Sur ce document collaboratif, vous préciserez votre projet concret ou loufoque et chaque membre du groupe marquera la date et le travail qu'il a fait.
Vous enverrez à votre enseignant le lien de ce Framapad afin qu'il puisse visualiser l'évolution du travail dans votre groupe ainsi que l'investissement de chacun. Sachez que votre enseignant peut aussi écrire dessus.
Organisez votre temps de projet grâce à un diagramme de Gantt.
Vous pouvez accéder à un tel diagramme sous forme de fichier ouvrable sur Excel
en télechargeant ce fichier.
Vous aurez à modifier et compléter ce fichier progressivement et à le présenter à votre enseignant au cours de l'évolution du projet.
Vous pouvez (re)trouver des indications sur l'organisation dans le temps (et sur le suivi de projet) à cette adresse de projet de première NSI
Partagez le code SQL de votre projet soit grâce à l'extension Live Share si vous utilisez VScode (cf. vidéo d'installation issue de SNT), soit grâce à OneDrive par exemple.
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.
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!
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 :
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