Qui parliamo di Software Gestionale

Gestire le relazioni con ancore e boe


Chi usa Filemaker conosce il suo singolare metodo di gestire graficamente le relazioni, raggiungibile da Gestisci Database. La sua caratteristica peculiare è che la rappresentazione grafica che identifica la tabella con i suoi campi ha un valore concettuale diverso da quello dei classici diagrammi di altri database relazionali.
Infatti quello che sembra la tabella è in realtà una TO, ovvero Table Occurrence, che in italiano suonerebbe come Occorrenza di Tabella.

La logica che ci deve guidare nel loro utilizzo è che quando ci serve una relazione colleghiamo i due campi chiave, e fin qui niente di strano. Ma se proviamo a generare un’altra relazione fra le stesse due tabelle o comunque già collegate indirettamente, il sistema di Filemaker ci obbliga a utilizzare un’altra TO, con nome diverso. Da adesso in poi userò il termine “tabella” per definire la TO, anche se non sarebbe propriamente corretto.

Se usiamo già anagrafica – fatture – fattureRighe tramite chiave primaria e ci serve un’altra relazione, ad esempio una relazione diretta fra anagrafica e fattureRighe, Filemaker ne genera automaticamente una nuova che chiama fattureRighe2.

Questo modo di strutturare le relazioni (che ha una sua precisa logica) può essere un problema quando le tabelle sono tante e anche le relazioni aumentano: il grafico delle relazioni diventa un groviglio inestricabile e spesso ingestibile. In pratica è lo scotto da pagare dato che Filemaker è nato senza SQL che, nei database che lo utilizzano, permette di manipolare dati e fare operazioni sulle tabelle senza impostare vere e proprie relazioni, ma di farlo con i comandi delle query.

Passiamo alle ancore e alle boe

Quello che vorrei descrivere è un metodo già ampiamente conosciuto e diffuso, chiamato Anchor-Buoy, ovvero Ancora-Boe, che secondo la mia esperienza (e non solo la mia) è quello che da i migliori vantaggi, sia quando si impostano nuove relazioni e soprattutto quando le si devono utilizzare in seguito.

Quando si genera una nuova tabella Filemaker ne genera la relativa rappresentazione grafica nelle relazioni. Queste saranno le nostre ancore, a cui saranno collegate le boe delle relazioni che ne partono.

Filemaker permette di usare le relazioni bidirezionalmente, basta definire il contesto quando necessario. Con il sistema Ancora-Boe invece lavoriamo in modo sempre unidirezionale: dalla tabella ‘originale’ ovvero la nostra ancora, a quelle relazionate, le boe.

Quindi nel caso di una classica struttura anagrafica – fatture – fattureRighe – articoli abbiamo 4 ancore e a ciascuna ancora sono relazionate le boe che ci necessitano.

Da anagrafica per andare in fatture colleghiamo la boa in questo modo:

Per andare da fatture in anagrafica invece che usare la relazione già esistente ne generiamo un’altra da Fatture verso Anagrafica.

In questo modo il grafico delle relazioni non è una ragnatela che dopo poco tende ad essere informe ma ha una sua logica molto precisa: sulla sinistra le ancore a cui si collegano le boe sulla destra. Anche nel definire il contesto non ci saranno più dubbi: la tabella è sempre l’ancora, ovvero quella che viene proposta di default.

Unico svantaggio è che le relazioni sono in numero maggiore, diciamo quasi il doppio. Infatti abbiamo sia quella di andata che di ritorno, quando con il metodo tradizionale ne serve solo una. Ma non sempre ci serve quella di ritorno, per cui vale la pena generarla solo quando effettivamente se ne verifica l’esigenza.

Come regole per nominare le relazioni suggerisco questo schema:

ancora: in maiuscolo
boa: ancora in minuscolo – underscore – tabella boa in maiuscolo

in caso di più boe concatenate si ripetono le boe intermedie sempre in minuscolo e la boa finale in maiuscolo, così:

Abbiamo anche i molti casi in cui la relazione non si basa sulla chiave principale, ma su altri campi (in Filemaker è molto frequente). In questo caso suggerisco di mettere dopo il nome della tabella anche il campo utilizzato per la relazione, così:

La logica è che in maiuscolo abbiamo sempre la tabella effettiva, quella su cui troviamo i dati, e questo semplifica anche quando abbiamo l’elenco delle relazioni quando lo si utilizza nelle funzioni. Queste compaiono ordinate alfabeticamente dove la prima, in maiuscolo, è la tabella ancora, seguita dalle boe dove è evidente in maiuscolo la tabella relazionata.

Qui abbiamo un esempio

Infine occorre vedere come gestire le relazioni molti a molti. In pratica può capitare che ce le troviamo senza accorgercene: la tabella fattureRighe è in pratica la join table, ovvero tabella di unione, fra fatture e articoli; una fattura – tanti articoli / un articolo – tante fatture.
Ma se avessimo bisogno di una effettiva tabella di unione che non è esplicita come fattureRighe ma solo funzionale, di solito la nomino in questo modo:

linkTabellaAtabellaB

nel caso in cui fattureRighe non fosse esplicito potrebbe essere:

linkFattureArticoli

Usando il metodo Ancore/Boe la gestione delle tabelle di unione non presenta nessun problema particolare, avendo sempre l’accortezza, quando serve di fare anche il ritorno.

Relazioni su campi globali

Un sistema che uso spesso sono relazioni basate su campi globali. Un caso molto semplice potrebbe essere quando dopo aver scelto da un portale un suo elemento, che ovviamente è un record in un’altra tabella, vogliamo lavorarci senza spostarci dal record in cui ci troviamo. Per fare ciò è presente un campo chiave secondaria ma globale, relazionato con il campo primario della tabella mostrata nel portale. Con la relazione del portale prendiamo la chiave primaria del record scelto e la mettiamo nel campo globale. Grazie alla relazione appena instaurata ecco che abbiamo a disposizione tutti i dati del record correlato. In realtà funziona anche con un campo non globale, ma dato che questo è raggiungibile anche da altre tabelle senza alcuna relazione può essere così settato anche in una situazione in cui per qualsiasi motivo non siamo sulla tabella dalla quale vogliamo far partire la relazione.

Il metodo Ancora/Boe presenta anche una buona lettura e facilità di andare nei punti desiderati, scorrendo le ancore a sinistra, come si può vedere da questo esempio.

Conclusioni: non è certo l’unica tecnica, ma…

I modi per organizzare le relazioni in Filemaker possono essere diversi. Sicuramente per progetti complessi è importante non usare quella delle tabelle sparse a caso, ma una più formalizzata. Nella mia esperienza, dato che uso FM dalla versione PLUS della Nashoba, che risale a ben prima del file multitabellare ovvero la 7, ho provato diversi metodi ma quando sono arrivato alle ancore e boe non l’ho più abbandonato. Se ora metto le mani su un mio file “antico” è tutto chiarissimo come se lo avessi fatto il giorno prima.

 

Avete domande o commenti?

3 comments on “Gestire le relazioni con ancore e boe

Salvatore

Il metodo spiegato mi sembra molto ordinato e facile da usare, penso proprio che lo utilizzerò d’ora in poi. Mentre leggevo pensavo ad un applicativo che ho realizzato nel corso di questi ultimi anni con diverse decine di relazioni che riempiono l’omonimo quadro andando a formare un vero e proprio groviglio. Ogni tanto tento di mettere ordine spostando allineando colorando ma è impossibile ottenere un risultato soddisfacente perché quando se ne mette a posto una parte l’altra diventa più intrecciata di prima. Mi domando come fare per applicare il metodo di ancore e boe ad una ragnatela già esistente senza dover riscrivere tutto.
Avete qualche consiglio da darmi?

Reply
admin

Purtroppo trasformare in ancore-boe uno schema tradizionale è abbastanza laborioso. Ho dovuto farlo molte volte quando si doveva passare da una struttura multifile a quella multitabellare, dalla fm6 alla fm7 o successive. Per ‘sgrovigliare’ una struttura tradizionale ho sempre proceduto partendo da un file nuovo, in cui incollavo un po’ alla volta i vari elementi (tabelle, formati, script etc) e verificavo che tutto funzionasse come prima. Dipende molto dalla complessità della partenza, comunque ci vuole molta pazienza.

Reply
Nunzio Coppola

Complimenti per l’articolo veramente ben fatto. Finalmente sono riuscito a capire e mettere in pratica l’uso delle relazioni ancora-boe e la funzione dichiara. Il tutto con cinque minuti di lettura.

Reply

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Privacy Policy

Privacy Policy