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 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.

-
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.
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éponsecontient un champid_questionqui pointe vers une question dans la tablequestion.
Exemple pratique
Imaginons que nous voulons insérer une question et ses réponses dans Supabase.

Table : question
| id | texte | niveau |
|---|---|---|
| 1 | Que signifie "phishing" ? | 1 |
Table : reponse
| id | texte | est_correcte | id_question |
|---|---|---|---|
| 1 | Une tentative de vol d'identifiants | true | 1 |
| 2 | Une mise à jour du navigateur | false | 1 |
| 3 | Un antivirus gratuit | false | 1 |
Quelques méthodes à connaître
| Action | Explication |
|---|---|
| Créer une table | Depuis l’interface Supabase, cliquez sur “New Table” |
| Ajouter une colonne | Définir le nom, le type (text, int, boolean, timestamp) |
| Définir une clé primaire | Cochez la case “Primary key” sur la colonne id |
| Ajouter une relation | Créez une colonne avec type foreign key vers une autre table |
| Ajouter des données | Onglet “Table Editor” → “Insert Row” |
Test de mémorisation/compréhension
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
- Créer un compte sur Supabase :
https://supabase.com → “Start your project” → GitHub → valider par mail.
-
Créer un nouveau projet Supabase :
- Nom du projet :
quiz-cyber - Mot de passe admin : à retenir
- Région : Europe (ou la plus proche)

- Nom du projet :
-
Créer les tables suivantes (en binôme) :
questionreponsejoueurscore



-
Définir les colonnes pour chaque table :

-
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

- Voici les colonnes pour la table
question:

la colonne
idest de typeint8et est la clé primaire (Primary Key)astucePour définir une clé primaire, cochez la case “Primary Key” lors de la création
la colonne
created_atest une colonne ajoutée automatiquement par Supabase avec valeur par défautnow()la colonne
texteest de typevarcharet ne peut pas êtrenull(Is nullable = false)la colonne
niveauest de typeint8et peut êtrenull
- Voici les colonnes pour la table
-
Faites la même chose pour la table
reponse.Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

la colonne
texteest de typetextet ne peut pas êtrenull(Is nullable = false)la colonne
est_correcteest de typebooleanet ne peut pas êtrenull(Is nullable = false)la colonne
id_questionest de typeint8et ne peut pas êtrenull(Is nullable = false)
- N’oubliez pas la clé primaire (
id) et la clé étrangère (id_question).


- N’oubliez pas la clé primaire (
-
Faites la même chose pour la table (
classement).Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

la colonne
date_partieest de typedateet ne peut pas êtrenull(Is nullable = false)la colonne
scoreest de typeint8et peut êtrenullla colonne
tempsest de typeint8et peut êtrenull
-
Faites la même chose pour la table
joueur.Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

la colonne
pseudoest de typevarcharet ne peut pas êtrenull(Is nullable = false)la colonne
emailest de typevarcharet peut êtrenullla colonne
date_inscriptionest de typedateet ne peut pas êtrenull(Is nullable = false)
-
Faites la même chose pour la table
classement_joueur.Rappel du Modèle Logique de Données (MLD) du projet CyberQuiz

la colonne
id_joueurest de typeint8et ne peut pas êtrenull(Is nullable = false)la colonne
id_classementest de typeint8et ne peut pas êtrenull(Is nullable = false) -
N’oubliez pas les clés étrangères (
id_joueuretid_classement).
-
- 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” :

-
Voici un exemple de requêtes SQL pour insérer des questions dans la table
question:
-
Voici un exemple de requêtes SQL pour insérer des réponses dans la table
reponse:
-
Voici un exemple de requêtes SQL pour insérer un joueur dans la table
joueur:
-
Voici un exemple de requêtes SQL pour insérer un score dans la table
classement:
-
Voici un exemple de requêtes SQL pour relier un joueur à un score dans la table
classement_joueur:
-
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

Requêtes SQL pour vérifier le score d’un joueur :
Afficher la requête

- Une question doit avoir plusieurs réponses liées par
Corrigé du TP
Une solution
Vous devez être connecté pour voir le contenu.