Je partage ici un template à l’arrache pour @pierresnake pour expliquer grosso merdo comment faire pour « faire des relations sans faire de relations »
Avec l’explication :
Question Pierre :
Je cherche à faire une jointure entre deux DB existante, ou importer des propriétés dans une DB. Est-ce qu’on a des possibilités désormais la dessus ?
J’ai vu pour importer des lignes via CSV, faire une relation / aggrégation mais il faut faire le lien manuellement pour chaque ligne, bref rien pour « simplement » mettre à jour une propriété depuis une source de données en utilisant une clef.
Réponse Lorelei :
Ca s’automatise en quelque sorte, mais ce sera pas une « vraie » relation et c’est pas efficace en terme de perf à la fin : ça nécessite de créer une relation avec toutes les pages + formule pour faire le lien + template pour s’assurer que toutes les pages sont bien dans la relation. En bref possible mais suboptimal
Follow up Lorelei :
Très bien donc l’idée ça reste sur les relations évidemment, mais au lieu de les créer ligne par ligne, on lie toutes les pages ensemble et on utilise des formules pour faire le filtre.
Pour le setup:
- Tu as deux bases DB1 et DB2
- Tu crées une relation (à double sens) entre les 2
- Tu ajoutes toutes les pages de DB1 dans la relation dans DB2 (ça peut s’automatiser avec un template dans DB1 qui va automatiquement ajouter une page à la relation dans DB2 et réciproquement)
Maintenant tu veux utiliser une clé pour filtrer, mettons qu’elle s’appelle key1 dans DB1 et key2 dans DB2 (oui je me suis foulée, je fais ce que je veux, c’est moi qui explique)
Dans la formule, la base ce sera quelque chose du genre (peut varier en fonction du type de propriété) : prop("DB1").filter(current.prop("key1") == prop("key2"))
et inversement prop("DB2").filter(current.prop("key2") == prop("key1"))
Après tu peux rajouter ta popote pour récupérer des propriétés ou faire des calculs.
Exemples (dans DB2) :
prop("DB1").filter(current.prop("key1") == prop("key2")).length()
ça compte les pages correspondantes dans DB1
prop("DB1").filter(current.prop("key1") == prop("key2")).map(current.prop("value")).sum()
ça somme une propriété value des pages correspondantes dans DB1
Tu peux même avoir plusieurs clés ou bien des conditions plus sophistiquées : prop("DB1").filter(current.prop("prop1") == prop("prop2") and current.prop("Date") <= prop("Date"))
(là on teste en plus si les dates de DB1 sont antérieures aux dates de DB2)
Je vais te faire un petit template rapide pour illustrer ce sera sûrement plus simple. Sur le papier c’est cool parce qu’à partir d’une seule relation tu peux tout recouper. Dans les faits niveau perf, ça peut ralentir pas mal.
Note en passant: prop("DB1").filter(current.prop("key1") == prop("key2")).map(current.prop("value")).sum()
c’est un rollup mais filtré, l’équivalent en rollup ce serait juste prop("DB1").map(current.prop("value")).sum()
PS: Désolée j’ai inversé DB1 et DB2 dans le template par rapport à mes explications mais j’espère que le principe sera compris
TLDR; tu lies toutes les pages, tu mets dans la marmite et paf ça fait des Chocapic