INTRODUZIONE
Documenti come testo, immagini, video o qualsiasi tipo di file possono attualmente essere collegati a un widget di risorse esterne nei progetti QGIS. Spesso è necessario allegare più documenti a una feature e QGIS ci aiuta tramite le relazioni 1: N che gestiscono questo tipo di requisito.
Nei casi semplici basta creare una tabella documenti, ma nella maggior parte dei casi occorrono tante tabelle quante sono i documenti da allegare con il rischio di avere molte tabelle. Le relazioni Polimorfiche (o dinamiche) offrono la possibilità di mantenere tutti i documenti in un’unica tabella documenti.
Le relazioni polimorfiche funzionano utilizzando una tabella di ricerca con una colonna aggiuntiva che specifica a quale tabella deve fare riferimento la chiave esterna.
Nelle relazioni non polimorfiche, le chiavi esterne fanno riferimento a un ID primario in una tabella specifica. D’altra parte, una chiave esterna in una tabella di ricerca polimorfica può fare riferimento a molte tabelle
Le relazioni dinamiche sono in realtà un gruppo di relazioni standard. Tuttavia, il legame tra i layer padre e il layer figlio (documento) si ottiene tramite un’espressione.

ESEMPIO
Importo in un progetto QGIS:
- Reg01012021_WGS84 : layer poligonale dei limiti amministrativi regionali ISTAT;
- ProvCM01012021_WGS84 : layer poligonale dei limiti amministrativi provinciali ISTAT;
- sicilia_doc : file CSV con i miei documenti;
Il file CSV (lo costruisco io):
dove (numero minimo di campi):
- fid : è il campo che contiene i fid che corrispondono alle feature_id nei relativi layer;
- nome : un campo descrittivo, serve a noi per capire il contenuto delle feature;
- layer : contiene i nomi dei layer (genitori) caricati in QGIS;
- documenti : contiene i link o percorsi dei documenti.
Crea relazione di progetto:
descrizione maschera:
- id : identificativo relazione, scrivere un nome che ci ricordi la relazione;
- Layer figlio : selezionare dall’elenco il layer che ha funzione di figlio, nel nostro caso il file CSV;
- Campo del layer : è il nome del campo, nel layer CSV, che contiene i nomi del layer genitori (padre);
- Espressione del campo del layer : usare
@layer_name
se nel Campo del Layer ci sono i nomi esatti dei layer genitori (vedi lista Layer Padre (8)), altrimenti tramite espressione occorre ricostruire tali nomi; - Tipo di relazione : lasciare sempre
Associazione
, nella stragrande maggioranza dei casi va bene; - Campo 1, Riferimento (padre) : il campo di riferimento utilizzato nei layer genitori (padre);
- Campo 1, Riferimento (figlio) : il campo del layer figlio (per noi il file CSV) che contiene i valori del campo fid dei layer genitori (padre);
- Layer Padre : mettere una spunta sui layer da utilizzare come padre.
Layer genitori o padre:

In azione: due layer e unica relazione dinamica
Con il layer padre : Reg01012021_WGS84
Con il layer padre : ProvCM01012021_WGS84
Le relazioni polimorfiche sono visibili nel calcolatore di campi:
Le relazioni polimorfiche possono essere utilizzate negli atlas:
È stato introdotto un nuovo widget:
NOTE FINALI:
Tramite le relazioni Polimorfiche abbiamo utilizzato unica tabella documenti e creato unica relazione polimorfica: QGIS in realtà crea in automatico due relazioni standard in quanto ci sono due layer padre, ma il lavoro sporco lo fa QGIS!
Le relazioni dinamiche sono state appena introdotte (feb-2021) nella versione QGIS 3.18 e ancora non documentate. Ho dovuto studiare le varie QEP e PR per poter capire un po’ il funzionamento, ma è stato molto utile l’aiuto ricevuto in un mio tweet. Sicuramente c’è tanto altro da scoprire, vi terrò aggiornati!!!.
RIFERIMENTI
- QGIS : https://qgis.org/it/site/
- QEP : https://github.com/qgis/QGIS-Enhancement-Proposals/issues/79
- PR : https://github.com/qgis/QGIS/pull/41009
- PR : https://github.com/qgis/QGIS/pull/40721
- Understanding Polymorphic Relationships : https://devdojo.com/tnylea/understanding-polymorphic-relationships
PROGETTO E DATI DI ESEMPIO
- Download (a partire da QGIS 3.18.1 Zürich)
RINGRAZIAMENTI
- Matthias e Denis di opengis.ch e Ivan Ivanov per lo sviluppo della funzionalità;
- Loïc Bartoletti
- Cabieces Julien per i chiarimenti.
Un pensiero su “QGIS 3.18 Zürich – Polymorphic Relation”