Back to flin
flin

Relations et chargement Eager/Lazy

Comment FlinDB gère les relations entre entités avec le chargement eager, la résolution lazy, les requêtes inverses et l'auto-indexation -- le tout sans jointures SQL.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 2 min flin
EN/ FR/ ES
flinflindbrelationshipsloadingjoins

Le problème le plus difficile dans l'abstraction de base de données n'est pas le stockage. C'est la navigation des relations. FlinDB adopte une approche différente : des déclarations de relations explicites, l'indexation automatique, et des stratégies de chargement contrôlées.

La session 164 a été celle où les relations sont devenues réelles. Dix fonctionnalités, treize tests, neuf cent soixante-douze lignes de Rust.

Déclarer des relations

flinentity Post {
    title: text
    body: text
    author: User           // One-to-many
}

entity Article {
    title: text
    tags: [Tag]            // Many-to-many
}

Chargement eager avec .with()

rustlet results = db.query("Post")
    .with("author")
    .execute()?;

Le .with("author") indique au constructeur de requêtes de résoudre la référence author pour chaque Post dans le résultat. Au lieu de N recherches séparées, ZeroCore résout toutes les références en lot.

Requêtes par référence

rustlet user_posts = db.query("Post")
    .where_ref("author", user_id)
    .execute()?;

Parce que les champs de référence sont automatiquement indexés, les requêtes par référence bénéficient de recherches d'index O(1).

Requêtes inverses

rustlet posts = db.find_referencing("Post", "author", user_id)?;
if db.has_references("Post", "author", user_id)? {
    // Cannot delete user -- they have posts
}
let post_count = db.count_references("Post", "author", user_id)?;

La décision de stratégie de chargement

FlinDB n'a pas de chargement lazy implicite. C'est un choix de conception délibéré qui élimine une catégorie entière de bugs de performance (le problème N+1).

  • Pas d'appel .with() : les champs de référence contiennent l'ID brut. Pas de requête implicite.
  • Avec .with("author") : les champs de référence sont résolus en entités complètes.
  • Avec .with_all() : tous les champs de référence sont résolus.

Cela force le développeur à réfléchir à son pattern d'accès aux données au moment de la requête.


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

Navigation de la série : - [060] Aggregations and Analytics - [061] Index Utilization - [062] Relationships and Eager/Lazy Loading (vous êtes ici) - [063] Transactions and Continuous Backup - [064] Graph Queries and Semantic Search

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude deblo

Le jour où Déblo a refusé une bonne réponse — deux fois

Une trace de production a montré Déblo K12 rejetant deux fois de suite la bonne réponse d’un élève de Terminale. Huit heures d’analyse, quatre commits, une rotation A/B de modèles et un benchmark sur 6 modèles plus tard, le tuteur de maths était corrigé. Ce qui a cassé, ce que nous avons changé, et ce que l’échec surprenant de GPT-5.4-mini au test socratique nous a appris sur le choix des modèles pour l’IA éducative.

32 min May 3, 2026
debloclaude-opus-4.7claude-codemethodology +14
Thales & Claude deblo

Web Claude a trouvé le bug. Puis il a failli l’aggraver.

Comment un prompt vocal de 270 lignes pour le tuteur Ultravox de Deblo produisait la même phrase d’accueil scriptu00e9e à chaque appel. Web Claude a diagnostiqué le problème parfaitement, puis a prescrit une correction qui aurait doublé la taille du prompt avec des hooks backend inexistants. Le filtre qui a gardé le diagnostic et rejeté la prescription.

17 min Apr 28, 2026
debloclaude-opus-4.7methodologyprompt-engineering +7
Thales & Claude deblo

Pourquoi j’ai dû corriger Web Claude deux fois sur la stratégie de la page d’accueil de Deblo

Comment une conversation de 48 heures avec Web Claude a failli entraîner Deblo dans le piège généraliste « ChatGPT pour l’Afrique », et pourquoi la connaissance du marché par le fondateur a dû prendre le dessus sur les suggestions stratégiques de l’IA à deux reprises.

26 min Apr 26, 2026
debloclaude-opus-4.7methodologystrategy +6