Aller au contenu principal

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 :

Schéma architecture application web fullstack
Schéma architecture application web fullstack

En reprenant la métaphore du restaurant :

Schéma architecture application web fullstack métaphore restaurant
Schéma architecture application web fullstack métaphore 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.

NomEspèceEtat
Rick SanchezHumainVivant
Morty SmithHumainVivant
CyborgAlienMort

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.

astuce

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.

IdentifiantNomEspèceEtat
1Rick SanchezHumainVivant
2Morty SmithHumainVivant
3CyborgAlienMort

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

IdentifiantNomEspèceEtatPlanète
1Rick SanchezHumainVivant1
2Morty SmithHumainVivant1
3CyborgAlienMort2

Table planète

IdentifantNomCaractéristiques
1TerrePlanète bleue
2MarsPlanè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.

astuce

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;
attention

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;
info

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 entier
  • FLOAT : Nombre décimal
  • BOOLEAN : Booléen (true ou false)
  • DATE : Date
  • TIMESTAMP : Date et heure

Les contraintes les plus courantes sont :

  • NOT NULL : La valeur ne peut pas être nulle
  • PRIMARY KEY : La valeur est unique pour chaque enregistrement de la table
  • UNIQUE : La valeur est unique pour tous les enregistrements de la table
  • DEFAULT : 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);
info

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
Correction

  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;
info

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;
💻 Exercice

A toi de récupérer les données de la table planete.

Solution
Correction

  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.

info

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
Correction

  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.

💻 Exercice

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;
info

Cette requête permet de récupérer le nom du personnage et le nom de sa planète.

astuce

Maintenant que nous avons manipuler nos tables en ligne de commande, nous allons pouvoir utiliser un outil graphique pour manipuler nos tables plus facilement.

DBeaver

Ressources