Aller au contenu principal

Remplissage des tables

avec des données fictives générées avec Faker ou Mockaroo


Notions théoriques

Lorsqu’on développe une application utilisant une base de données relationnelle, il est essentiel de tester avec des données représentatives du monde réel.

Pour cela, il est possible d’utiliser des générateurs de données fictives, tels que :

Ces outils permettent de créer des jeux de données crédibles, structurés, et prêts à être insérés dans une base de données SQL.

Pourquoi générer des données fictives automatiquement ?

  • Pour gagner du temps et éviter de saisir manuellement des dizaines de lignes.
  • Pour simuler des cas réels avec des noms, emails, messages, dates, etc.
  • Pour tester les performances et la robustesse du système.
  • Pour respecter la vie privée en évitant d’utiliser des données personnelles.

Présentation de Faker

Faker est une librairie disponible en Python, JavaScript, PHP, etc.

Faker permet de générer :

  • des noms, prénoms, emails réalistes,
  • des UUID,
  • des dates aléatoires,
  • des phrases ou paragraphes.

Site : https://faker.readthedocs.io/

Exemple en Python :

from faker import Faker
fake = Faker()

print(fake.name()) # "Jean Dupont"
print(fake.email()) # "jean.dupont@example.com"
print(fake.uuid4()) # "b4e6c4c8-7afd-4e2e-8c1d-0c8b7f3e3c6d"
print(fake.text()) # "C’est un fait bien connu que..."
astuce

Il est possible de générer des centaines de lignes en quelques secondes avec une boucle.


Présentation de Mockaroo

Mockaroo est un site web permettant de générer des jeux de données et de les exporter en :

  • CSV,
  • SQL (INSERT),
  • JSON,
  • Excel.

Site : https://mockaroo.com

Fonctionnalités utiles :

  • Personnalisation des champs (nom, email, UUID, date…),
  • Choix du format de sortie (SQL, JSON, etc.),
  • Génération de 1000 lignes gratuitement.

Exemple pratique

Il est possible de générer des données fictives avec Mockaroo, puis de les insérer dans Supabase via DBeaver.

Étape 1 : générer des données avec Mockaroo

Aller sur https://mockaroo.com et créer un jeu de données SQL pour la table profiles :

  • id → UUID
  • username → Username
  • avatar_url → Image URL
  • created_at → Date

Exporter au format SQL (INSERT statements) pour PostgreSQL.

Exemple de résultat :

INSERT INTO profiles (id, username, avatar_url, created_at) VALUES
('c3d4a2b2-e8f3-4e4b-9a2d-2f3e4b5c6d7e', 'lucie59', 'https://randomuser.me/api/portraits/women/1.jpg', '2023-08-01'),
('f9a8b7c6-d5e4-4c3b-a2b1-1a2b3c4d5e6f', 'mathis_duval', 'https://randomuser.me/api/portraits/men/2.jpg', '2023-08-02');

Étape 2 : copier les requêtes dans DBeaver

  • Ouvrir DBeaver.
  • Se connecter à la base Supabase via la connexion enregistrée sous le nom supabase_super-admin.
  • Coller les requêtes SQL générées dans l’éditeur.
  • Exécuter.

Étape 3 : générer des classes avec Faker (Python)

from faker import Faker
import uuid

fake = Faker()

for _ in range(5):
name = fake.catch_phrase()
description = fake.text(max_nb_chars=100)
print(f"INSERT INTO classes (id, name, description) VALUES ('{uuid.uuid4()}', '{name}', '{description}');")

Exemple de sortie :

INSERT INTO classes (id, name, description) VALUES ('e5c9a7b1-0f2d-4c3f-a9a7-1e2f3d4c5b6a', 'Système d’authentification sécurisé', 'Une solution moderne pour gérer les accès des utilisateurs.');

Étape 4 : générer des messages

for _ in range(10):
content = fake.sentence()
sender_id = fake.uuid4()
class_id = fake.uuid4()
print(f"INSERT INTO messages (content, sender_id, class_id) VALUES ('{content}', '{sender_id}', '{class_id}');")

Test de mémorisation/compréhension


Quel outil permet de générer des données fictives en ligne ?


Quel format est disponible dans Mockaroo ?


Quelle librairie Python permet de générer des noms aléatoires ?


Quel type de données est généré par faker.uuid4() ?


Quel champ n’est pas généré automatiquement par faker ?


Quel outil permet d’insérer des données dans Supabase ?


Quel format de sortie choisir dans Mockaroo pour PostgreSQL ?


Combien de lignes peut-on générer gratuitement sur Mockaroo ?


Quel champ est requis dans la table messages ?


Quel est un avantage de Faker ?



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

Objectif du TP

À la fin de ce TP, votre base de données Supabase devra contenir des données fictives réalistes dans les tables suivantes :

  • profiles
  • user_roles
  • classes
  • class_members
  • messages

Ces données doivent être cohérentes, complètes, et compatibles avec les contraintes définies dans les scripts SQL des séances précédentes.

Vous utiliserez pour cela :

  • Mockaroo pour générer des jeux de données prêts à insérer
  • Faker (Python) pour produire dynamiquement des INSERT SQL
  • DBeaver pour insérer les données dans la base distante en tant que super-admin

Étape 1 — Préparer les UUID des utilisateurs existants

Avant de générer des données, vous devez récupérer les UUID des 5 utilisateurs créés via Supabase Auth.

  1. Connectez-vous à https://app.supabase.com
  2. Accédez à votre projet > onglet Auth > Users
  3. Notez les UUID des 5 utilisateurs créés (un par rôle : guest, student, teacher, admin, super-admin)
Une solution

Étape 2 — Générer des profils avec Mockaroo

  1. Allez sur https://mockaroo.com
  2. Configurez les champs suivants pour générer des profils :
Field NameType
idUUID
usernameUsername
avatar_urlImage URL
created_atDate
  1. Générez 5 profils (un par utilisateur existant)
  2. Remplacez les UUID générés par ceux des utilisateurs Supabase (étape 1)
  3. Exportez le résultat au format SQL (PostgreSQL)
Une solution

Étape 3 — Attribuer les rôles dans la table user_roles

Utilisez un éditeur SQL (par exemple DBeaver) pour insérer les rôles 'guest', 'student', 'teacher', 'admin' et 'super-admin' correspondants aux utilisateurs.

Une solution

Étape 4 — Insérer manuellement les classes officielles

Dans ce projet, chaque étudiant est inscrit dans une classe.

Vous allez maintenant insérer manuellement les classes suivantes dans la table classes de votre base Supabase :

  • BTS SIO1
  • BTS SIO2
  • BTS SAM1
  • BTS SAM2
  • BTS GPME1
  • BTS GPME2

Instructions

  1. Ouvrez DBeaver et connectez-vous à votre base Supabase via la connexion supabase_super-admin.
  2. Dans l’éditeur SQL, insérez les 6 classes manuellement à l’aide de requêtes INSERT.
  3. Pour chaque classe, vous devez générer un UUID (via un script Python ou un générateur en ligne) et fournir une courte description.

Voici des exemples de UUID :

  • b1e2d3f4-1111-1111-1111-111111111111
  • b1e2d3f4-2222-2222-2222-222222222222
  • b1e2d3f4-3333-3333-3333-333333333333
  • b1e2d3f4-4444-4444-4444-444444444444
  • b1e2d3f4-5555-5555-5555-555555555555
  • b1e2d3f4-6666-6666-6666-666666666666

Voici des exemples de descriptions :

  • BTS SIO1 : Classe de première année en Services Informatiques aux Organisations.
  • BTS SIO2 : Classe de deuxième année en Services Informatiques aux Organisations.
  • BTS SAM1 : Classe de première année en Support à l’Action Managériale.
  • BTS SAM2 : Classe de deuxième année en Support à l’Action Managériale.
  • BTS GPME1 : Classe de première année en Gestion de la PME.
  • BTS GPME2 : Classe de deuxième année en Gestion de la PME.
Une solution

Étape 5 — Inscrire des utilisateurs dans des classes

  1. Choisissez une ou deux classes créées à l’étape précédente
  2. Insérez des relations dans class_members pour les utilisateurs student et teacher
Une solution

Étape 6 — Générer des messages avec Faker

  1. Ouvrez un éditeur Python local ou en ligne (comme Replit)
  2. Utilisez le script Python suivant pour générer des messages liés à une classe et un utilisateur
for _ in range(5):
content = fake.sentence()
sender_id = 'e7f3c4d5-...' # UUID du teacher
class_id = 'b1e2d3f4-...' # UUID de la classe
print(f"INSERT INTO messages (content, sender_id, class_id) VALUES ('{content}', '{sender_id}', '{class_id}');")
  1. Exécutez les requêtes dans DBeaver
Une solution

Étape 7 — Vérification finale de la base

  1. Vérifiez que chaque table contient les données attendues :
SELECT * FROM profiles;
SELECT * FROM user_roles;
SELECT * FROM classes;
SELECT * FROM class_members;
SELECT * FROM messages;
  1. Vérifiez que les UUID correspondent bien aux utilisateurs créés dans Supabase Auth
Une solution

Étape 8 — Export des données pour la BD locale

Dans Supabase, allez dans Database > Backups ou utilisez pg_dump pour exporter la structure + données

Une solution