PostgreSQL, SQLAlchemy et Moi : une love story qui a failli finir en thérapie

 


Salut toi !

Il y a quelques semaines, j’ai écrit dans mon journal : « PostgreSQL, SQLAlchemy et moi — une histoire relationnelle compliquée ». Je pensais que c’était juste une vanne mignonne pour le planning éditorial.

Spoiler : c’était une prophétie. Une prophétie chaotique … je me sens Devin !

Bienvenue dans les coulisses de la base de données d’Immers’Write. L’article que personne n’avait demandé, sur un sujet dont 97 % des humains ignorent l’existence et 100% des gens fuient ce sujet. Et franchement, vous aviez raison de vivre heureux dans l’ignorance. Mais maintenant que t’es là… reste, on va bien se marrer.

Mais d’abord : c’est quoi ce truc, une base de données ?

Imagine que t’es autrice (ou auteur, on s’en fiche). T’as des idées qui fusent dans tous les sens, des fichiers nommés « Chapitre5_vraimentfinal_v4_nepasouvrir.docx », des images random et des notes vocales à 6h du mat’ qui disent « penser à ajouter des licornes magiques ».

Une base de données, c’est la version adulte et organisée de ce bordel créatif. C’est le tiroir à chaussettes de ta grand-mère, mais en numérique et sans l’odeur de naphtaline. Chaque truc a sa petite place, son étiquette, et surtout : rien ne se perd. Miracle.

Pour Immers’Write (la plateforme qui mélange texte, images IA et sons pour te faire vivre des histoires comme si t’étais dedans), j’avais besoin de gérer :

  • les utilisateurs

  • les livres

  • les chapitres

  • les médias

  • les images générées par IA

  • les commentaires

Six entités. Six occasions de tout foirer en beauté.

Le dictionnaire des données : quand tu te disputes avec toi-même sur des noms de colonnes

Avant de coder quoi que ce soit, faut faire l’inventaire. On appelle ça le « dictionnaire des données ». En gros : nommer les choses sans péter un câble.

Exemple concret de crise existentielle que j’ai vécue : Est-ce que le champ s’appelle password, hashed_password ou mot_de_passe_secret_ne_pas_toucher_sous_peine_de_mort ?

J’ai passé 5 minutes à me parler toute seule. La version créative a perdu. J’ai pris hashed_password. Parce que stocker les mots de passe en clair, c’est comme laisser ta clé sous le paillasson avec un Post-it « Servez-vous ».

J’ai aussi défini six grandes familles de données (les entités) :

  • Users → les humains un peu fous qui traînent sur la plateforme

  • Books → les mondes que les auteurs inventent

  • Chapters → les portes d’entrée vers ces mondes

  • Medias → les trucs que tu uploades toi-même (sons, images…)

  • Generated_Images → les bébés magiques sortis du cerveau de l’IA

  • Comments → les petits cris du cœur des lecteurs

Et oui, j’ai séparé les images importées des images IA. Pas par snobisme, mais parce qu’elles n’ont pas les mêmes règles. C’est comme comparer un dessin au crayon et une illustration numérique : ça peut se ressembler, mais c’est pas pareil.

Le MCD : je dessine des flèches et je me sens intelligente

Le Modèle Conceptuel de Données, c’est le moment où tu prends une feuille (ou un logiciel si t’es civilisé) et tu dessines qui aime qui, qui possède qui, et dans quelles quantités.

C’est hyper romantique en fait : Un auteur peut créer un livre (j’ai mis la limite à un pour pas devenir folle). Un livre peut avoir plein de chapitres. Un chapitre peut avoir plein de commentaires. Un commentaire appartient à un seul chapitre et un seul utilisateur.

J’ai fait trois versions du MCD. La première ressemblait à un plat de spaghettis après une explosion nucléaire. La deuxième était trop parfaite et oubliait la moitié des trucs. La troisième… je l’ai adoptée. On est en couple maintenant.

Le MLD : quand le rêve rencontre la réalité (et se prend un mur)

Là, on passe du joli dessin à la vraie vie. On transforme tout en tables, en clés étrangères, en types de données.

J’ai choisi des ID en nombres entiers plutôt que des UUID parce que… bah parce que j’avais la flemme d’avoir des chaînes de caractères longues comme mon bras. On appelle ça du pragmatisme. (Ou de la procrastination déguisée, au choix.)

Les règles de gestion : parce que sans règles, c’est le Far West

Une base de données sans règles, c’est comme une soirée sans personne sobre : tout le monde finit par terre.

Voici mes règles de vie (et de données) :

  • Un utilisateur = soit auteur, soit lecteur. Pas les deux. Pas « créatrice en pleine crise existentielle ».

  • Un auteur = un seul livre (MVP oblige, je suis pas encore prête pour la polygamie littéraire).

  • Un chapitre = une seule image IA (parce que DALL·E coûte des sous et que mon budget est actuellement « dignité »).

  • Une fois publié, un chapitre est verrouillé. Comme un tatouage : on assume.

  • On peut commenter seulement les chapitres publiés (les brouillons restent dans leur bulle).

  • Seul l’auteur peut toucher à son chapitre. Pas touche.

  • Si un utilisateur supprime son compte → tout disparaît avec lui. Oui, c’est un peu dramatique. Oui, j’ai eu une petite crise philosophique de 20 minutes.

SQLAlchemy : le traducteur un peu capricieux

SQLAlchemy, c’est l’ORM (Object-Relational Mapper). En langage normal : c’est le mec qui parle couramment Python et PostgreSQL, et qui fait la traduction simultanée.

Tu écris une classe Python toute mignonne class Chapter(Base): et pouf, SQLAlchemy te crée la table dans la base. Magique.

Sauf quand il décide de faire sa diva et que les relations ne se chargent pas, ou que la session se ferme au pire moment. Là c’est moins magique. C’est plutôt « pourquoi tu me fais ça bro ? »

PostgreSQL : l’éléphant qui n’oublie jamais

J’ai choisi PostgreSQL parce que c’est du costaud, ça existe depuis 1996, et son logo est un éléphant. Et tout le monde sait que les éléphants n’oublient rien. Parfait pour une base de données.

C’est la mémoire vivante d’Immers’Write. Quand tu crées un compte → une ligne dans Users. Quand tu écris un chapitre → une ligne dans Chapters. Quand tu génères une image IA à 3h du mat’ avec le prompt « forêt mystique sous lune violette et émotions existentielles » → tout est sagement rangé dans Generated_Images.

Ce que j’ai appris (après avoir tout raté plusieurs fois)

  • Modéliser avant de coder = sauver ton futur toi des crises de nerfs.

  • Bien nommer ses trucs = déjà 50 % du boulot.

  • La première version est presque toujours pourrie. C’est normal. C’est même obligatoire.

  • Les règles de gestion, c’est pas chiant : c’est la personnalité du projet.

Épilogue

On n’est pas encore mariés avec PostgreSQL et SQLAlchemy, mais on s’entend de mieux en mieux. On a nos petits rituels, nos moments de « mais pourquoi tu réponds en 8 secondes là ?! », et nos victoires minuscules quand tout fonctionne sans que je comprenne vraiment pourquoi.

Et au final, c’est assez beau : une autrice qui apprend à parler à une base de données pour que des histoires puissent exister dans un monde numérique.

La base de données, c’est la charpente invisible. Personne ne la voit. Mais si elle grince… tout le monde s’en rend compte.

Pour l’instant, elle ne grince pas.

Et franchement ? C’est déjà une sacrée victoire.

Laure Lavie — Créatrice de technologies pour les raconteurs d’histoires

Suivre l’aventure sur le blog · LinkedIn | Facebook | Blog

#ImmersWrite #présentation #projet #lecture #immersive #écriture #IA #application #storytelling #IAgénérative #plateformecréative #formationIA #buildinpublic #indiemaker 

Commentaires

Articles les plus consultés