Aller au contenu principal

Création de la BD

Création de la base de données Supabase

Objectifs
  • Créer une base de données en ligne avec Supabase.
  • Comprendre le fonctionnement des tables et des colonnes.
  • Préparer les premières données du quiz.

Notions théoriques

1. Supabase, c’est quoi ?

Supabase est une plateforme de base de données en ligne.

Elle permet :

  • de créer une base de données PostgreSQL,
  • de gérer les données via une interface graphique,
  • de connecter facilement une application Web à cette base.

C’est une alternative moderne à Firebase, mais avec une logique SQL (et non NoSQL).

2. Pourquoi utiliser Supabase ?

Dans notre jeu "CyberQuiz", nous devons stocker :

  • les questions du quiz,
  • les réponses possibles,
  • les scores des joueurs,
  • les informations sur les joueurs.

Plutôt que de créer une base localement (ce qui serait compliqué à déployer), nous allons utiliser Supabase pour :

  • centraliser les données,
  • y accéder depuis n’importe quel ordinateur,
  • partager la base avec votre binôme.
Supabase
  • Supabase offre une interface simple pour créer des tables, ajouter des données, et gérer les relations entre les données, le tout en SQL.

    base_de_donnees.png

  • Supabase va au-delà de la simple base de données en intégrant les services dont les développeurs ont besoin aujourd'hui (API, auth, stockage, temps réel), et elle simplifie le développement tout en s'appuyant sur la robustesse de PostgreSQL.

  • Supabase utilise PostgreSQL, un système de gestion de base de données relationnelle puissant et largement utilisé dans l'industrie.

  • PostgreSQL intègre des fonctionnalités avancées (supérieures à MariaDB) telles que la gestion des transactions, les vues matérialisées, les fonctions stockées, le support des types de données complexes et les RLS (que nous allons découvrir plus tard).

Limites du plan gratuit
  • Le plan gratuit de Supabase a des limites :
    • 2 bases de données,
    • 500 Mo de stockage de base de données,
    • 1 Go de stockage de fichiers,
    • 2 Go de bande passante par mois.
  • Pour un projet de quiz simple, cela devrait suffire, mais pour des projets plus grands, il faudra envisager un plan payant.
astuce

Pour notre projet de quiz, Supabase est un excellent choix car il nous permet de gérer facilement les données tout en nous concentrant sur le développement de l’application.

3. Tables et colonnes

En base de données relationnelle (comme PostgreSQL et MariaDB), on travaille avec :

  • des tables (équivalent d’un tableau Excel),
  • des colonnes (les champs),
  • des lignes (les enregistrements ou "données").

Chaque table contient des colonnes typées, par exemple :

  • id : entier unique (clé primaire),
  • texte : texte de la question,
  • est_correcte : booléen (vrai/faux),
  • date_inscription : date.

4. Clés primaires et étrangères

  • Une clé primaire identifie de manière unique chaque ligne d’une table (souvent id).
  • Une clé étrangère permet de relier deux tables entre elles.

Exemple :

  • La table réponse contient un champ id_question qui pointe vers une question dans la table question.

Exemple pratique

Imaginons que nous voulons insérer une question et ses réponses dans Supabase.

La base de données

Table : question

idtexteniveau
1Que signifie "phishing" ?1

Table : reponse

idtexteest_correcteid_question
1Une tentative de vol d'identifiantstrue1
2Une mise à jour du navigateurfalse1
3Un antivirus gratuitfalse1

Quelques méthodes à connaître

ActionExplication
Créer une tableDepuis l’interface Supabase, cliquez sur “New Table”
Ajouter une colonneDéfinir le nom, le type (text, int, boolean, timestamp)
Définir une clé primaireCochez la case “Primary key” sur la colonne id
Ajouter une relationCréez une colonne avec type foreign key vers une autre table
Ajouter des donnéesOnglet “Table Editor” → “Insert Row”

Test de mémorisation/compréhension


Supabase est :


Une table est composée de :


Une clé étrangère permet de :


Dans notre projet, la table `réponse` est liée à la table :


Quel type choisir pour une colonne `est_correcte` ?


Quel est le rôle d’une clé étrangère, dans une base relationnelle ?


Quel champ dans la table `réponse` permet de relier une réponse à une question ?


Parmi les types proposés, lequel est le plus adapté pour un champ `est_correcte` ?



TP pour réfléchir et résoudre des problèmes

Objectif du TP

Vous allez créer votre base de données Supabase, avec les tables définies dans le MCD de la séance précédente, et insérer les premières données.

Étapes à suivre

  1. Créer un compte sur Supabase :
    https://supabase.com → “Start your project” → GitHub → valider par mail.

  1. Créer un nouveau projet Supabase :

    • Nom du projet : quiz-cyber
    • Mot de passe admin : à retenir
    • Région : Europe (ou la plus proche)

    01_supabase_create_project.png


  1. Créer les tables suivantes (en binôme) :

    • question
    • reponse
    • joueur
    • score

    02_supabase_create_project.png

    03_supabase_create_tables.png

    04_supabase_create_tables.png


  1. Définir les colonnes pour chaque table :

    05_supabase_create_tables.png

    • Utilisez les noms et types définis dans le MLD de la séance précédente.

      Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

      Le MLD

      • Voici les colonnes pour la table question :

      06_supabase_create_tables.png

      la colonne id est de type int8 et est la clé primaire (Primary Key)

      astuce

      Pour définir une clé primaire, cochez la case “Primary Key” lors de la création

      la colonne created_at est une colonne ajoutée automatiquement par Supabase avec valeur par défaut now()

      la colonne texte est de type varchar et ne peut pas être null (Is nullable = false)

      la colonne niveau est de type int8 et peut être null

      06_supabase_is_nullable.png


    • Faites la même chose pour la table reponse.

      Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

      Le MLD

      la colonne texte est de type text et ne peut pas être null (Is nullable = false)

      la colonne est_correcte est de type boolean et ne peut pas être null (Is nullable = false)

      la colonne id_question est de type int8 et ne peut pas être null (Is nullable = false)

      07_supabase_create_tables.png

      • N’oubliez pas la clé primaire (id) et la clé étrangère (id_question).

      08_supabase_create_tables.png

      09_supabase_create_tables.png


    • Faites la même chose pour la table (classement).

      Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

      Le MLD

      la colonne date_partie est de type date et ne peut pas être null (Is nullable = false)

      la colonne score est de type int8 et peut être null

      la colonne temps est de type int8 et peut être null

      10_supabase_create_tables.png


    • Faites la même chose pour la table joueur.

      Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

      Le MLD

      la colonne pseudo est de type varchar et ne peut pas être null (Is nullable = false)

      la colonne email est de type varchar et peut être null

      la colonne date_inscription est de type date et ne peut pas être null (Is nullable = false)

      11_supabase_create_tables.png


    • Faites la même chose pour la table classement_joueur.

      Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

      Le MLD

      la colonne id_joueur est de type int8 et ne peut pas être null (Is nullable = false)

      la colonne id_classement est de type int8 et ne peut pas être null (Is nullable = false)

    • N’oubliez pas les clés étrangères (id_joueur et id_classement).

      12_supabase_create_tables.png


  1. Insérer manuellement des données :
    • 2 questions avec 3 réponses chacune.
    • 1 joueur fictif.
    • 1 score fictif.
  • Utilisez l’onglet “Table Editor” → “Insert Row” ou utilisez des requêtes SQL dans l’onglet “SQL Editor” :

    13_supabase_insert_into_tables.png

  • Voici un exemple de requêtes SQL pour insérer des questions dans la table question :

    14_supabase_insert_into_tables.png

  • Voici un exemple de requêtes SQL pour insérer des réponses dans la table reponse :

    15_supabase_insert_into_tables.png

  • Voici un exemple de requêtes SQL pour insérer un joueur dans la table joueur :

    16_supabase_insert_into_tables.png

  • Voici un exemple de requêtes SQL pour insérer un score dans la table classement :

    17_supabase_insert_into_tables.png

  • Voici un exemple de requêtes SQL pour relier un joueur à un score dans la table classement_joueur :

    18_supabase_insert_into_tables.png


  1. Vérifier les relations

    • Une question doit avoir plusieurs réponses liées par id_question.
    • Le score doit être lié à un joueur.

    Requêtes SQL pour vérifier toutes les réponses liées à une question :

    Afficher la requête

    19_supabase_select_from_tables.png

    Requêtes SQL pour vérifier le score d’un joueur :

    Afficher la requête

    20_supabase_select_from_tables.png


Corrigé du TP

Une solution