Révision
Objectifs
L'évaluation se portera sur les critères suivants :
- Outils
- Différencier les outils de développement.
- Prédire le résultat d'une commande dans un terminal.
- Différencier les chemins relatifs et absolus.
- Modélisation
- Définir les attributs dans les entités.
- Différencier les types dans une modélisation.
- Identifier les cardinalités d'une association.
- Requête
- Corriger une syntaxe SQL.
- Prédire le résultat d'une requête SQL.
- Adapter des requêtes SQL.
| Note | 1 | 2 | 2.5 | 3 | 3.5 | 4 | 4.5 | 5 | 5.5 | 6 |
|---|---|---|---|---|---|---|---|---|---|---|
| Nombre de critères validés | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Exercices
Outils
Regrouper et expliquer les outils suivants :
- IDE
- Terminal
- Git
- VCS
- Visual Studio Code
- GUI
- GitHub
- CLI
Réponse possible
Git est un système de contrôle de version (VCS) qui permet de suivre les modifications apportées à un projet et de collaborer avec d'autres développeurs. GitHub est une plateforme en ligne qui héberge des dépôts Git et facilite le partage et la collaboration sur le code.
Un IDE (Integrated Development Environment) est un environnement de développement intégré qui fournit des outils pour écrire, tester et déboguer du code. Visual Studio Code est un exemple d'IDE populaire.
Un GUI (Graphical User Interface) est une interface utilisateur graphique qui permet d'interagir avec un logiciel à l'aide d'éléments visuels tels que des boutons et des menus. Un CLI (Command Line Interface) est une interface en ligne de commande qui permet d'interagir avec un logiciel en tapant des commandes textuelles dans un terminal.
Quelle est la bonne pratique pour sauvegarder et partager du code ?
Réponse possible
Utiliser un gestionnaire de versions comme Git permet de garder un historique des modifications sur plusieurs ordinateurs et GitHub permet de l'héberger en ligne pour le partager.
Terminal
Expliquer les commandes suivantes en donnant un exemple d'utilisation pour chacune :
cdlspwdmkdirrmechocat>
Réponse possible
cd: changer de répertoire (change directory). Exemple :cd ..pour aller dans le répertoire parent.ls: lister les fichiers et répertoires (list). Exemple :ls un_dossierpour afficher le contenu du répertoire "un_dossier".pwd: afficher le répertoire de travail courant (print working directory). Exemple :pwdpour afficher le chemin absolu du répertoire courant.mkdir: créer un répertoire (make directory). Exemple :mkdir mon_repertoirepour créer un nouveau répertoire nommé "mon_repertoire".rm: supprimer des fichiers ou des répertoires (remove). Exemple :rm mon_fichier.txtpour supprimer le fichier "mon_fichier.txt" dans le répertoire courant.echo: afficher du texte (faire l'écho d'un message). Exemple :echo "Bonjour"pour afficher "Bonjour" dans le terminal.cat: afficher le contenu d'un fichier (concatenate). Exemple :cat mon_fichier.txtpour afficher le contenu du fichier "mon_fichier.txt".>: rediriger la sortie d'une commande vers un fichier. Exemple :echo "Bonjour" > mon_fichier.txtpour écrire "Bonjour" dans le fichier "mon_fichier.txt".
Base de données
Modéliser la base de données d'un système de note dans une école.
- Chaque élève et enseignant a un identifiant (7 caractères), un nom, un prénom et une date de naissance.
- Chaque cours a un identifiant (3 caractères), un nom, un enseignant et des élèves.
- Chaque note a une valeur, un élève, un cours et une date.
Solution possible
Il existe déjà une table personne avec les colonnes id, nom, prenom et date_naissance :
CREATE TABLE personne (
id CHAR(7) PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL,
date_naissance DATE NOT NULL,
branche_id CHAR(3),
FOREIGN KEY (branche_id) REFERENCES branche(id)
);
Ainsi qu'une table branche avec les colonnes id et nom (chaque enseignant ne peut enseigner qu'une seule branche) :
CREATE TABLE branche (
id CHAR(3) PRIMARY KEY,
nom VARCHAR(50) NOT NULL
);
Écrire les commandes SQL pour créer les autres tables selon votre modèle.
Solution possible
CREATE TABLE cours (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nom VARCHAR(50) NOT NULL,
enseignant_id CHAR(7) NOT NULL,
FOREIGN KEY (enseignant_id) REFERENCES personne(id)
);
-- Table intermédiaire pour la relation many-to-many entre les cours et les élèves
CREATE TABLE eleve_cours (
id INTEGER PRIMARY KEY AUTOINCREMENT,
eleve_id CHAR(7) NOT NULL,
cours_id INTEGER NOT NULL,
FOREIGN KEY (eleve_id) REFERENCES personne(id)
FOREIGN KEY (cours_id) REFERENCES cours(id)
);
CREATE TABLE note (
id INTEGER PRIMARY KEY AUTOINCREMENT,
valeur SMALLINT NOT NULL,
date DATE NOT NULL,
eleve_id CHAR(7) NOT NULL,
cours_id INT NOT NULL,
FOREIGN KEY (eleve_id) REFERENCES personne(id),
FOREIGN KEY (cours_id) REFERENCES cours(id)
);
Est-ce une bonne idée d'avoir les enseignants et les élèves dans la même table ? Pourquoi ?
Solution possible
Étant donné que la table personne existe déjà, cela ne vaut pas forcément la peine de dupliquer les données dans deux tables différentes.
Un risque d'avoir une seule table personne est qu'il n'y a pas de contrainte pour vérifier si une personne est un enseignant ou un élève. Donc une personne peut être enseignante et élève en même temps dans la même classe.
Expliquer ce que fait la commande suivante :
SELECT DISTINCT nom FROM personne WHERE prenom LIKE 'A%';
Solution
Sélectionner les noms distincts des personnes dont le prénom commence par "A".
Sélectionner les noms et prénoms de toutes les personnes nées après 2000 (y compris).
Solution
SELECT nom, prenom FROM personnes WHERE date_naissance >= '2000-01-01';
Une élève (id = 'ab42cde') souhaite connaître sa moyenne générale pour un cours (id = 1291). Écrire la requête SQL pour obtenir cette information.
Solution possible
SELECT AVG(valeur) FROM note WHERE eleve_id = 'ab42cde' AND cours_id = 1291;