Aller au contenu principal

Clés et jointures

Axiome ne vous demande jamais d'écrire un JOIN. À la place, les administrateurs déclarent des clés sur chaque modèle, et le moteur de requête résout automatiquement le chemin de jointure dès qu'un composant (ou Axi) combine des champs de plusieurs modèles.

Déclarer des clés

Dans l'onglet Clés d'un modèle, vous pouvez ajouter :

  • Une clé primaire — la colonne (ou l'expression) qui identifie une ligne de façon unique.
  • Des clés étrangères — des colonnes qui référencent la clé primaire d'un autre modèle.

La source d'une clé peut être une colonne ou une expression SQL. Les clés peuvent être masquées si elles ne doivent pas apparaître comme champs utilisables dans les éditeurs.

L'onglet Clés d'un modèle, avec une clé primaire et une clé étrangère et l'option Jointure inverse.

Comment les jointures sont résolues

Quand une requête mélange des champs de plusieurs modèles, Axiome parcourt les clés déclarées pour trouver un chemin de jointure :

  • S'il existe exactement un chemin, il est utilisé automatiquement.
  • Si les modèles ne sont pas reliés, la requête est refusée avec « Ces tables ne sont pas reliées » — déclarez la clé manquante, ou choisissez des champs de modèles reliés.
  • S'il existe plusieurs chemins, la requête est refusée comme ambiguë — le composant doit préciser quelle relation utiliser.

Les champs impossibles à joindre à la sélection courante sont montrés comme non joignables dans les éditeurs, avant même d'exécuter quoi que ce soit.

Jointures inverses

Une clé étrangère permet normalement au côté plusieurs (ex. orders) d'utiliser les dimensions du côté un (ex. customers.country). Activer la jointure inverse sur une clé permet en plus au modèle référencé de grouper et filtrer par les dimensions du modèle référençant — une traversée un-vers-plusieurs.

Les jointures inverses sont puissantes mais peuvent démultiplier les lignes. Axiome verrouille les cas qui fausseraient les résultats :

  • Si une mesure serait comptée plusieurs fois à cause de la traversée, la requête est refusée (« Ce total serait compté plusieurs fois… ») plutôt que de retourner silencieusement un chiffre gonflé.
  • Les champs dans des tableaux imbriqués ne peuvent pas être traversés ainsi.

Conseils de conception

  • Déclarez des clés primaires partout — plusieurs fonctionnalités (comme les modèles virtuels) en dépendent.
  • N'activez la jointure inverse que là où la question un-vers-plusieurs a vraiment du sens.
  • Masquez les clés techniques pour ne pas encombrer les sélecteurs de champs.