Les bases de données
Introduction
Qu'est-ce qu'une base de données ?
Une base de données permet de stocker des données (nom, adresse, numéro de téléphone, score, ou autre) de manière structurée et organisée. La structure et l'organisation des données permettent de les retrouver facilement et de les manipuler. Par exemple dans un fichier regroupant les plaques d'immatriculations des voitures en France, il est possible de retrouver facilement les informations d'une voiture en particulier, surtout de son conducteur ou sa conductrice.
Pourquoi utiliser une base de données ?
Voici un schéma d'architecture des applications que nous allons développer :
En reprenant la métaphore du restaurant :
PostgreSQL et SQL ? C'est quoi ?
PostgreSQL
PostgreSQL est un système de gestion de base de données relationnelle (SGBDR) libre et open source. Il est développé depuis 1996 par une communauté de développeurs qui s'organisent à travers le site web postgresql.org.
C'est un logiciel que nous allons installer sur notre ordinateur pour pouvoir créer et manipuler des bases de données.
SQL
SQL (Structured Query Language) est un langage informatique servant à communiquer avec nos bases de données relationnelles. Ce langage permet de :
- rechercher
- ajouter
- modifier
- supprimer
des données dans les bases de données relationnelles.
Comment ça marche ?
Une base de données peut être assimilée à un ensemble de fichiers. Chaque fichier contient des données. Ces données sont organisées dans des tables. Chaque table contient des colonnes et des lignes. Les colonnes correspondent aux champs de la table et les lignes correspondent aux enregistrements.
Nom | Espèce | Etat |
---|---|---|
Rick Sanchez | Humain | Vivant |
Morty Smith | Humain | Vivant |
Cyborg | Alien | Mort |
Identifier les données
Pour pouvoir identifier les données, il faut leur donner un identifiant unique. Cet identifiant unique est appelé clé primaire. Il est unique pour chaque enregistrement de la table et permet de manipuler plus facilement les éléments de notre table.
Ex: Pour manipuler l'humain Morty Smith qui est vivant, on va plutôt manipuler l'enregistrement dont l'identifiant est 2 dans notre table.
Identifiant | Nom | Espèce | Etat |
---|---|---|---|
1 | Rick Sanchez | Humain | Vivant |
2 | Morty Smith | Humain | Vivant |
3 | Cyborg | Alien | Mort |
Les relations entre les tables
Il est possible de créer des relations entre les tables. Ces relations permettent de lier les données de plusieurs tables entre elles. Il existe 3 types de relations :
- One to One (Un à un): Une donnée d'une table est liée à une seule donnée d'une autre table.
- One to Many (Un à plusieurs): Une donnée d'une table est liée à plusieurs données d'une autre table.
- Many to Many (Plusieurs à plusieurs): Plusieurs données d'une table sont liées à plusieurs données d'une autre table.
Voici un exemple de relation One to Many entre les tables personnage et planète : Un personnage est lié à une seule planète mais une planète peut être liée à plusieurs personnages.
Table personnage
Identifiant | Nom | Espèce | Etat | Planète |
---|---|---|---|---|
1 | Rick Sanchez | Humain | Vivant | 1 |
2 | Morty Smith | Humain | Vivant | 1 |
3 | Cyborg | Alien | Mort | 2 |
Table planète
Identifant | Nom | Caractéristiques |
---|---|---|
1 | Terre | Planète bleue |
2 | Mars | Planète rouge |
Dans cet exemple, pour pouvoir mettre en place la relation entre les 2 tables il faut ajouter une colonne planète dans la table personnage. Cette colonne contiendra l'identifiant de la planète du personnage. C'est ce qu'on appelle une clé étrangère.
Avant d'aller plus loin installons PostgreSQL sur notre ordinateur. Cela nous permettra de manipuler le langage SQL et de créer des bases de données.
Le langage SQL
Créer une base de données
CREATE DATABASE nom_de_la_base_de_donnees;
Il est important de terminer chaque requête SQL par un point virgule.
Supprimer une base de données
DROP DATABASE nom_de_la_base_de_donnees;
Se connecter à une base de données (à partir de la ligne de commande psql)
\c nom_de_la_base_de_donnees;
Cette commande permet de se connecter à la base de données nom_de_la_base_de_donnees. Ceci n'est pas une commande SQL mais une commande spécifique à PostgreSQL.
Créer une table
Maintenant que nous sommes connectés à notre base de données, nous allons pouvoir créer une table.
CREATE TABLE nom_de_la_table (
nom_de_la_colonne type_de_donnees constrainte(s),
nom_de_la_colonne type_de_donnees constrainte(s),
nom_de_la_colonne type_de_donnees constrainte(s)
);
Les types de données les plus courants sont :
SERIAL
: Nombre entier auto-incrémentéVARCHAR
: Chaine de caractères de longueur variable (lors de l'enregistrement en mémoire)CHAR
: Chaine de caractères de longueur fixe (lors de l'enregistrement en mémoire)INTEGER
: Nombre entierFLOAT
: Nombre décimalBOOLEAN
: Booléen (true ou false)DATE
: DateTIMESTAMP
: Date et heure
Les contraintes les plus courantes sont :
NOT NULL
: La valeur ne peut pas être nullePRIMARY KEY
: La valeur est unique pour chaque enregistrement de la tableUNIQUE
: La valeur est unique pour tous les enregistrements de la tableDEFAULT
: Valeur par défaut
Voici le script de création de la table planete :
CREATE TABLE planete (
id SERIAL PRIMARY KEY,
nom VARCHAR(255) NOT NULL,
caracteristiques VARCHAR(255) NOT NULL
);
Ajouter des données dans une table
INSERT INTO nom_de_la_table (nom_de_la_colonne, nom_de_la_colonne)
VALUES (valeur, valeur);
A toi de jouer, ajoute les données suivantes dans la table planete. Sachant que vous n'avez pas besoin de vous occuper de la colonne id car elle est auto-incrémentée.
- Terre, Planète bleue
- Mars, Planète rouge
Solution
INSERT INTO planete (nom, caracteristiques)
VALUES ('Terre', 'Planète bleue'), ('Mars', 'Planète rouge');
Requêtes SQL pour récupérer des données
Maintenant que nous avons créé notre table et ajouté des données, nous allons pouvoir récupérer des données.
SELECT nom_de_la_colonne, nom_de_la_colonne
FROM nom_de_la_table;
Cette requête permet de récupérer des données :
SELECT
est un mot clé qui permet de récupérer des données.nom_de_la_colonne
est le nom de la colonne que l'on souhaite récupérer.FROM
est un mot clé qui permet de préciser la table dans laquelle on souhaite récupérer les données.nom_de_la_table
est le nom de la table dans laquelle on souhaite récupérer les données.
Si nous voulons récupérer toute les colonnes de la table, nous pouvons utiliser le caractère *
à la place des noms de colonnes.
SELECT *
FROM nom_de_la_table;
A toi de récupérer les données de la table planete.
Solution
SELECT *
FROM planete;
Requête de jointure
Une jointure permet de récupérer des données de plusieurs tables en même temps. Pour pouvoir faire une jointure, il faut que les tables aient une relation entre elles. Nous allons avoir besoin d'une seconde table pour pouvoir faire une jointure. Créons la table personnage.
A toi de jouer, crée la table personnage avec les colonnes suivantes :
- id (type SERIAL)
- nom
- espece
- etat
- planete_id (ajouter une contrainte FOREIGN KEY)
Pour créer une contrainte FOREIGN KEY il faut utiliser la syntaxe suivante :
FOREIGN KEY (nom_de_la_colonne) REFERENCES nom_de_la_table(nom_de_la_colonne);
Solution
CREATE TABLE personnage (
id SERIAL PRIMARY KEY,
nom VARCHAR(255) NOT NULL,
espece VARCHAR(255) NOT NULL,
etat VARCHAR(255) NOT NULL,
planete_id INTEGER NOT NULL,
FOREIGN KEY (planete_id) REFERENCES planete(id)
);
Un fois cela effectué nous allons pouvoir ajouter des données dans la table personnage.
A toi de jouer, ajoute les données suivantes dans la table personnage.
- Rick Sanchez, Humain, Vivant, 1
- Morty Smith, Humain, Vivant, 1
- Cyborg, Alien, Mort, 2
Maintenant que nous avons des données dans nos 2 tables, nous allons pouvoir faire une jointure.
SELECT personnage.nom, planete.nom
FROM personnage
INNER JOIN planete ON personnage.planete_id = planete.id;
Cette requête permet de récupérer le nom du personnage et le nom de sa planète.
Maintenant que nous avons manipuler nos tables en ligne de commande, nous allons pouvoir utiliser un outil graphique pour manipuler nos tables plus facilement.