TP1 - SGBD
- Créer des relations ;
- Manipuler des données ;
- Comprendre le concept des clés.
- Se créer un dossier
Terminale NSI
sur votre ordinateur ou clé USB - Dans ce dossier, créer un dossier
BDD
- Enregistrer les bases de données dans ce dossier.
L'ensemble du TP se fait sur le logiciel LibreOffice Base.
Un Système de Gestion de Bases de Données (SGBD) est un logiciel permettant la manipulation directe de bases de données.
Il offre la possibilité de créer des bases de données, et d'implémenter différentes relations avec des enregistrements.
Aussi, le SGBD permet la manipulation directe des données par des langages dédiés (tel que le SQL).
Guide d'utilisation
Créer une base de données
Pour commencer, lancez le logiciel LibreOffice Base (vous pouvez le trouver en cherchant dans le menu démarrer).
Lorsque-vous arrivez sur la fenêtre ci-dessous, laissez tous les paramètres par défaut et cliquez sur Terminer
. Enregistrez ensuite votre fichier sur l’ordinateur.
Une fois cette opération effectuée, vous arriverez dans le menu principal de votre base. Si vous souhaitez ré-ouvrir votre base plus tard, ouvrez simplement le fichier que vous avez sauvegardé à l’étape d’avant.
Créer une table / relation
Pour créer une nouvelle table, cliquez sur "Créer une table en mode ébauche"
.
Vous arrivez alors sur une fenêtre similaire à cette capture d’écran :
A partir de cette interface, vous pouvez spécifiez les attributs
de la table et leur domaine
. La colonne "Nom de champ"
correspond au nom de l’attribut. Une fois que celui-ci est entré, la colonne "Type de champ"
est débloquée et vous permet de spécifier le domaine de l’attribut en spécifiant un type (Text (string), Integer, etc...).
Vous pouvez cliquer sur le type du champ pour faire apparaître une liste déroulante permettant de choisir le type que vous souhaitez.
Comme nous l’avons vu dans le cours, il est possible de restreindre le domaine d’un attribut, au-delà de son type. Pour cela, vous pouvez utiliser la zone "Propriétés du champ"
tout en bas de la fenêtre. Les possibilités offertes varient d’un type de champ à l’autre.
Par exemple, sur un champ de texte, on aura la possibilité de définir une longueur maximale (nombre de caractères). On peut également mettre une valeur par défaut (si on ne rentre rien) et spécifier si il est obligatoire qu’un tuple de cette relation aient une valeur ou non (saisie requise).
Sur les champs de type Integer, il existe une option intéressante "AutoValeur"
. Cette option permet d’affecter une valeur automatique en se basant sur la dernière valeur enregistrée par un tuple sur cet attribut (et en faisant +1). Cette option est pratique pour les clés primaires
de type identifiant numéroté, pour ne pas à aller chercher l’identifiant du dernier élément à chaque fois qu’on souhaite ajouter un nouveau tuple, en affectant une valeur automatiquement.
Clé primaire
Pour définir la clé primaire d’une table, il suffit de faire un clic droit sur la case à gauche de l’attribut que vous voulez ajouter à la clé, puis de sélectionner "Clé primaire"
. Une clé apparaîtra sur cette case. Comme nous l’avons vu en cours, une clé primaire peut-être constituée de plusieurs attributs, vous pouvez donc répéter l’opération sur d’autres attributs, si nécessaire. Les clés étrangères ne se définissent pas ici mais via une autre interface, présentée plus loin dans le guide.
Enfin, une fois votre table bien définie, vous pouvez cliquer sur la disquette pour enregistrez. Vous pouvez alors nommer votre table, puis fermez la fenêtre. Votre table apparaîtra alors dans la liste des tables de votre base. Si vous souhaitez l’éditer, il suffit de faire un clic droit dessus et sélectionner "Éditer".
Gérer les références / Clés étrangères
La gestion des clés étrangères se fait une fois que les tables ont été définies.
Dans notre exemple, nous nous mettons dans le contexte où nous avons une table "Employes"
contenant des informations sur les employés d’une entreprise, et une table "Fonctions"
qui liste les différentes fonctions des employés de l’entreprise (secrétaire, directeur, sous-directeur, etc...). Dans la table Employes
, une clé étrangère "fonction"
référence la clé primaire "idFonction"
de la table Fonctions
(afin d’associer une fonction à chaque employé, pour savoir qui est le directeur, etc...)
Dans la barre de menu, tout en haut, sélectionnez "Options"
puis "Relations"
. Une nouvelle fenêtre apparaît. Ajoutez toutes les tables en les sélectionnant et en cliquant sur le bouton "Ajouter"
.
Vous obtenez alors la représentation de vos tables via l’interface suivante :
A partir de cette interface, pour définir une clé étrangère, vous devez :
- Effectuer un clic gauche sur l’attribut que vous voulez définir comme clé étrangère. (dans notre exemple : "fonction")
- Maintenir le clic gauche puis effectuer
un glissé-déposé
sur l’attribut (clé primaire) référencé. Dans notre exemple, on dépose donc "fonction" sur "idFonction".
Un lien devrait alors apparaître entre les tables, cela signifie que votre clé étrangère est bien définie !
Répétez l’opération pour chaque clé étrangère, puis cliquez sur la disquette
(en haut à gauche) pour sauvegarder et fermez la fenêtre.
Insérer / Mettre à jour des données manuellement
Pour insérer ou modifier des tuples
dans une table, il vous suffit d’effectuer un double-clique
sur la table. Une interface vous permettant d’entrer des données apparaît alors.
Vous pouvez modifier les valeurs des champs de chaque tuple à tout moment. Pour **supprimer**
un tuple, effectuez un clic droit sur la ligne contenant le tuple et cliquez sur supprimer
.
TP
Base pour s'échauffer
On considère le schéma relationnel suivant :
Joueurs(Pseudo : String, IP : String, Date Inscription : Date, Or : Integer, #Guilde : String)
Guildes(Guilde : String, Classement : Integer, Reputation : String, Type : String)
Ainsi que les données (tuples) de chaque relation de cette base :
Pseudo | IP | Date Inscription | Or | Guilde |
---|---|---|---|---|
Thatoryl | 166.219.88.149 | 16/11/2017 | 2113 | La communauté de l’anneau |
Nhamashal | 199.154.114.125 | 03/07/2016 | 3719 | L’armée du Mordor |
Rhenalyrr | 20.73.30.74 | 23/08/2017 | 2327 | Les Elyséens |
Khaalindaan | 11.6.205.144 | 09/01/2020 | 4873 | L’organisation XIII |
Paulorin | 235.180.9.184 | 01/02/2017 | 4956 | L’organisation XIII |
Guilde | Classement | Reputation | Type |
---|---|---|---|
L’armée du Mordor | 1 | Hostile | Guerriere |
La communauté de l’anneau | 4 | Pacifique | Aventure |
L’organisation XIII | 2 | Hostile | Scientifique |
Les Elyséens | 3 | Neutre | Guerriere |
- En vous servant du guide, implémentez le schéma relationnel de cette base avec LibreOffice Base (n’oubliez pas les clés étrangères) puis, insérez les données de chaque relation dans votre base de données.
- Essayez d’ajouter un nouveau joueur (avec les informations que vous voulez) et donnez-lui la guilde Guilde NSI. Que se passe-t-il ? Pourquoi ? Comment remédier à cela ?
- Essayez d’ajouter un nouveau joueur qui s’appelle aussi Thatoryl. Que se passe-t-il ? Pourquoi ?
- Essayez de modifier l’or du joueur Paulorin par un mot ("bonjour" par exemple). Que se passe-t-il ? Pourquoi ?
- Depuis la table Joueurs, supprimez un joueur.
- Depuis la table Guildes, supprimez une guilde. Que se passe-t-il ? Pourquoi ?
Une base un peu plus évoluée
On considère le schéma relationnel suivant, issu de la modélisation du fonctionnement d’un jeu en ligne :
Joueurs(login : String, mot_de_passe : String, #idFaction : Integer)
Factions(idFaction : Integer, nom_faction : String)
Peuples(idPeuple : Integer, nom_peuple : String, #idItemSpécialité : Integer)
Reputation(#login : String, #idPeuple : Integer, reputation : Float)
Items(idItem : Integer, nomItem : String)
ItemsPeuples(#idPeuple : Integer, #idItem : Integer, reputationMin : Float, prix : Float)
- A l’aide de LibreOffice Base,
implémentez ce schéma relationnel
dans une nouvelle base de données (n’oubliez pas les clés étrangères). Utilisez l’optionAutoValeur
pour les clés primaires dont leseul
attribut est un nombre entier. - Insérez des données dans la base. Déterminez alors l’ordre dans lequel les tables doivent être remplies (telle table doit être remplie avant telle table, etc...).