Back to flin
flin

Des entités, pas des tables : comment FlinDB pense les données

Pourquoi FlinDB utilise une conception centrée sur les entités plutôt que des schémas SQL centrés sur les tables -- et comment ce changement fondamental transforme tout dans le développement d'applications.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 4 min flin
EN/ FR/ ES
flinflindbentitiesschemadata-model

Le modèle relationnel domine le stockage de données depuis cinquante ans. Tables, lignes, colonnes, clés étrangères, jointures. C'est une abstraction puissante -- et une terrible correspondance avec la façon dont les développeurs pensent réellement à leurs applications.

FlinDB élimine entièrement la traduction. Vous pensez en entités. Vous écrivez en entités. FlinDB stocke des entités. Il n'y a pas de décalage d'impédance parce qu'il n'y a pas de décalage.

La différence fondamentale

Dans SQL, vous définissez une table -- un conteneur pour des lignes. Dans FLIN, vous définissez une entité -- un concept de première classe dans le langage :

flinentity User {
    name: text
    email: text @unique
    age: int?
}

Quand vous sauvegardez une entité dans FlinDB, vous obtenez un objet avec un cycle de vie riche :

flinuser = User { name: "Thales", email: "[email protected]" }
save user

user.id          // 1 (auto-assigned)
user.created_at  // 2026-01-13T10:00:00Z
user.version     // 1

user.name = "Juste Thales"
save user
user.version     // 2

user.history     // [version 1, version 2]
user @ -1        // The previous version

Une entité n'est pas une ligne. C'est un objet versionné, horodaté, historiquement conscient, avec une identité qui persiste à travers les changements.

Types de champs : sémantiques, pas mécaniques

Les types de champs SQL décrivent des formats de stockage. Les types de champs FLIN sont sémantiques -- ils décrivent ce que les données sont, pas comment elles sont stockées.

TypeDescriptionExemple
textChaîne UTF-8"Hello"
intEntier 64 bits42
numberFlottant 64 bits3.14
boolBooléentrue
timeHorodatage UTCnow
moneyValeur monétaire1000 CFA
fileRéférence de fichierFichier uploadé
semantic textTexte avec embeddings IAContenu recherchable par IA

Le type semantic text est particulièrement frappant. Dans SQL, si vous voulez une recherche sémantique alimentée par l'IA, vous devez installer une extension vectorielle, configurer un pipeline d'embedding, gérer des index vectoriels et écrire des requêtes de similarité. Dans FLIN, vous écrivez :

flinentity Product {
    name: text
    description: semantic text
}

Relations : des références, pas des clés étrangères

flinentity Post {
    title: text
    body: text
    author: User              // Direct reference to a User entity
}

post.author          // Returns the full User entity, not an ID
post.author.name     // "Thales"

Pas de jointures. Pas de clauses ON. Vous référencez une entité, et la référence fonctionne.

Plusieurs-à-plusieurs sans tables de jonction

flinentity Post {
    title: text
    tags: [Tag]               // List of Tag references
}

Pas de table de jonction. Pas de requête de jointure. Pas de problème N+1 à résoudre.

Le modèle d'historique des versions

La différence la plus fondamentale entre FlinDB et une base de données relationnelle est le versionnage temporel. Dans SQL, un UPDATE détruit la valeur précédente. Dans FlinDB, chaque sauvegarde crée une nouvelle version :

flinuser = User { name: "Juste" }
save user                      // Version 1

user.name = "Juste G."
save user                      // Version 2

user @ -1                     // Version 1: "Juste"
user.history                  // All versions

Ce n'est pas une fonctionnalité boulonnée sur un modèle relationnel. C'est le modèle de stockage lui-même.

Pourquoi la conception centrée sur les entités est importante

La conception centrée sur les entités est particulièrement puissante pour le public que FLIN sert. Les étudiants à Abidjan, Dakar et Lagos qui apprennent à coder pour la première fois n'ont pas besoin d'apprendre SQL, les ORM, les migrations et les contraintes de clés étrangères avant de pouvoir construire leur première application. Ils définissent des entités, les sauvegardent et les interrogent. La base de données disparaît derrière le langage.


Ceci est la partie 2 de la série « How We Built FlinDB ».

Navigation de la série : - [056] FlinDB: Zero-Configuration Embedded Database - [057] Entities, Not Tables: How FlinDB Thinks About Data (vous êtes ici) - [058] CRUD Without SQL - [059] Constraints and Validation in FlinDB - [060] Aggregations and Analytics

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude thales

Treize agents, quarante-trois minutes : la première session Workflow de Claude Fable 5, et ce qu'un script d'orchestration déterministe change aux builds multi-agents

Un prompt, treize agents, quarante-trois minutes : la première session de production avec Claude Fable 5 et l'outil Workflow de Claude Code a livré un site web de production complet de sept pages plus un endpoint backend de capture de leads, en un seul commit. Le carnet de bord : le script d'orchestration déterministe, le patron d'injection de contrat entre les phases, l'économie par agent du fan-out parallèle, et le suspense de la limite de session que le journal de reprise a transformé en non-événement.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10
Thales & Claude casp

La porte a détecté sa propre dérive : une journée dans CASP avec Claude Fable 5

Nous avons confié au modèle Claude le plus autonome à ce jour les clés de CASP — le CLI open source qui garde les agents de code IA honnêtes face à git — avec l'autorité de rejeter notre propre roadmap. Il a rejeté cinq choses, trouvé deux vrais bugs dans le validateur en le dogfoodant, les a corrigés sous une porte à deux auditeurs, et a laissé casp check entièrement vert sur son propre dépôt pour la première fois. CASP 0.3.0 en est le résultat.

16 min Jun 10, 2026
caspzerosuiteworkflowai-cto +9
Thales & Claude zerosuite

La transplantation du CASP : comment la discipline des six fichiers est passée de Conductor à un ERP transport anti-fraude, ce que la compétence /next ajoute quand l'opérateur tape juste « next », et pourquoi le coût d'une dérive du CASP grimpe quand le projet, c'est l'argent des autres

La discipline du CASP qui a piloté trente-cinq sessions de Conductor est agnostique au produit. Le carnet de bord de sa transplantation sur KASSIA, un ERP transport anti-fraude pour un exploitant de flotte en Côte d'Ivoire : ce qui a migré, ce qui n'a pas migré (le validateur sur mesure — et ce que son absence coûte), ce que la compétence /next ajoute quand l'opérateur tape un seul mot, et là où le CASP s'arrête — le bug de déploiement qu'il ne pouvait pas voir parce qu'il enregistre l'intention, pas la réalité de l'infrastructure.

23 min Jun 8, 2026
kassiaerp-kassia-transport-logistiquezerosuiteCASP +15