Bases de Données Relationnelles et SQL

Ludovic Deneuville

Objectifs

Qu’est-ce qu’une base de données ?

  • Collection organisée de données
  • Stockée électroniquement
  • Structurée pour faciliter l’accès et la gestion
  • Conçue pour minimiser la redondance

Base de données relationnelles

  • Organise les données dans des Tables
  • Tables interconnectées
  • Tables structurées

SGBD

Un Système de Gestion de Base de Données (SGBD) est un logiciel qui permet de :

  • stocker
  • organiser
  • gérer des données de manière structurée

Exemples de SGBD :

  • relationnelles : PostgreSQL, MySQL, Oracle Database
  • NoSQL : MongoDB, Cassandra

Kesako

  • PostgreSQL : SGBD
  • DBeaver : outil client qui permet de se connecter à un SGBD
  • SQL : langage de programmation conçu pour gérer et manipuler des bases de données relationnelles.

Types de données

Il existe de très nombreux types de données que l’on peut stocker, les principaux :

  • Chaîne de caractères
  • Numérique
  • Booléen
  • Date, Temps
  • Géométrique

Plus de détails sur la documentation PostgreSQL.

Types - exemple

CREATE TABLE personne (
    id_personne      SERIAL PRIMARY KEY,
    nom              VARCHAR(100) NOT NULL,
    prenom           VARCHAR(100) NOT NULL,
    date_naissance   DATE,
    email            VARCHAR(255) UNIQUE,
    nb_enfants       INT CHECK (nb_enfants >= 0),
    taille_m         DECIMAL(3, 2)
    est_actif        BOOLEAN,
    last_updated     TIMESTAMPTZ DEFAULT NOW() 
);

Table

Une Table est composée de lignes et de colonnes :

  • une ligne représente un enregistrement spécifique
  • une colonne représente un attribut particulier de ces enregistrements
  • Clé primaire (PK) : colonne ou un ensemble de colonnes qui identifie de manière unique chaque enregistrement dans une table
    • permet d’identifier une ligne sans ambiguïté

Table - exemple

Associations entre tables

Clé étrangère

Une clé étrangère (FK) :

  • permet de faire le lien entre 2 tables
  • c’est une colonne d’une table A
  • elle correspond à la clé primaire d’une table B

Types d’associations

  • 1..1 : Une Personne a un Passeport et un Passeport appartient à une seule Personne
    • clé étrangère dans l’une des 2 tables
  • 1..* : Une Joueuse joue pour une seule équipe Equipe. Une Equipe est composée de plusieurs Joueuses
    • clé étrangère dans la table Joueuse
  • *..* : Un Etudiant suit plusieurs Cours et un Cours et suivi par plusieurs Etudiants
    • table d’association entre Etudiant et Cours

Lien entre 2 tables via une clé étrangère

Lien entre 2 tables via une table d’association

SQL

  • SQL : Structured Query Language
  • Inventé en 1970 par Edgar F. Codd
  • Langage de programmation
  • Utilisé pour gérer et manipuler des bases de données relationnelles

Opérations CRUD

SQL permet d’effectuer les opérations du CRUD :

  • SELECT : récupérer des données depuis une table
  • INSERT : insérer de nouvelles données dans une table
  • UPDATE : mettre à jour des données existantes
  • DELETE : supprimer des données d’une table

CRUD

Create, Read, Update, Delete

Actions sur une table

Créer une Table

Insérer des données

Supprimer une table

DROP TABLE personne;

Si ensuite, vous essayez :

SELECT *
  FROM personne;

ERREUR: la relation « personne » n’existe pas

Actions sur les lignes

Sélectionner tout

Pour afficher tout le contenu d’une table.

SELECT *
  FROM personne;

Filter les lignes

Mettre à jour des lignes

Supprimer des lignes

Actions sur les colonnes

Sélectionner des colonnes

Renommer une colonne

Ajouter un attribut

Supprimer une colonne

Renommer à l’affichage

Le mot clé AS permet de renommer une colonne à l’affichage.

⚠️ Il ne change pas le nom de la colonne.

Jointures

Alias

Jusqu’à maintenant, nous n’avions qu’une seule table.

Nous savions donc que le champ nom venait de la table personne.

Comment faire si nous faisons une jointure avec une table qui a également une colonne nommée nom ?

SELECT p.nom       -- 2. p.nom : attribut nom de la table d'alias p i.e. personne
  FROM personne p  -- 1. nous déclarons p comme alias de la table personne

Jointure totale

Types de jointures

Dans la jointure précédente :

  • Laure apparait 2 fois car elle a 2 commandes
  • Maud apparait une fois
  • Ali n’apparait pas

Comment faire pour inclure Ali dans le tableau même sans commande ?

Jointures externes

Agrégation

GROUP BY

  • Utilisé pour regrouper les résultats en fonction d’une ou plusieurs colonnes
  • Permet l’utilisation de fonctions d’agrégation telles COUNT, SUM, AVG…

HAVING

Pour filter après un GROUP BY

Ordonner les lignes

Formes normales

1ere forme normale

Autres formes normales

  • 2NF : 1NF + tout attribut non clé dépend de la clé
  • 3NF : 2NF + un attribut non clé ne peut pas dépendre d’un autre attribut non clé

Les schémas

Une bonne pratique (non appliquée ici) est de classer nos tables dans différents schémas.

De la même manière que vous rangez des fichiers dans des dossiers, vous vous y retrouverez plus facilement en rangeant les tables dans des schémas.

Si vous ne déclarez pas de shéma lors de la création d’une table, elle va dans le schéma public.

Schémas - exemple

Créer un schéma pour le projet info

CREATE schema projet;


À la création, stocker la table dans le schéma

CREATE table projet.joueuse(
  ...
);


Préciser le schéma lors des requêtes

SELECT *
  FROM projet.joueuse;

SQL sans table

SELECT CURRENT_DATE;
SELECT 1 + 2;
SELECT 1 > 2;
SELECT 'Salut';

Autres notions non abordées

  • ACID, COMMIT, ROLLBACK
  • vues, snapshot
  • index
  • droits : grant / revoke
  • WITH (Common Table Expressions)
  • UNION, INTERSECT, EXCEPT
  • DISTINCT
  • EXISTS
  • SEQUENCE

Bibliographie

Exercice

exercice