← Tutti gli episodi
Copertina di L'incastro imperfetto: oggetti contro tabelle
Stagione 57 · Episodio 002

L'incastro imperfetto: oggetti contro tabelle

15 settembre 2026 5:05
0:00 5:05

Ciao, e benvenuto nella seconda puntata della cinquantasettesima stagione. Oggi entriamo nel cuore del problema che ogni mappatore cerca di risolvere, e capire questo cuore è la chiave per capire tutto il resto della stagione. Oggi parliamo dell'incastro imperfetto: oggetti contro tabelle.

Partiamo dalle due forme, perché sono davvero diverse. Un oggetto, nel tuo codice, è una cosa ricca. Ha delle proprietà, certo, ma ha anche collegamenti diretti ad altri oggetti: un ordine contiene la lista dei suoi prodotti, un utente contiene il suo indirizzo. Puoi partire da un oggetto e saltare ai suoi vicini semplicemente seguendo un collegamento. Una tabella, invece, è una cosa piatta: righe e colonne, valori semplici. Non contiene altre tabelle. I collegamenti tra tabelle esistono, ma sono indiretti: una riga tiene un riferimento, un numero, che punta a una riga di un'altra tabella. Sono due geometrie diverse: l'oggetto è un grappolo interconnesso, la tabella è una griglia piatta.

Voglio darti il nome di questa distanza, perché è un concetto famoso. Questa differenza di forma tra i due mondi ha un nome tecnico: la chiamano la mancata corrispondenza di impedenza, un modo un po' ingegneristico per dire che i due mondi non combaciano alla perfezione. Alcune cose passano dall'uno all'altro senza problemi: una proprietà semplice, come un nome o una data, diventa una colonna, e viceversa. Ma altre cose si incastrano male. Un oggetto che ne contiene un altro, l'ereditarietà tra classi, una lista dentro un oggetto: tutte cose naturali nel mondo degli oggetti che nel mondo delle tabelle non hanno un equivalente diretto, e vanno tradotte con qualche compromesso.

Voglio dirti cosa fa il mappatore, perché è un lavoro di traduzione preciso. Il compito del mappatore è proprio gestire questa traduzione imperfetta. Le regole di base sono semplici e belle da vedere. Una classe corrisponde a una tabella. Un oggetto, cioè una singola istanza di quella classe, corrisponde a una riga di quella tabella. Una proprietà dell'oggetto corrisponde a una colonna. E un collegamento a un altro oggetto viene tradotto in un riferimento, una chiave esterna, che punta alla riga giusta nell'altra tabella. Quando poi rileggi i dati, il mappatore fa il percorso inverso: prende le righe, segue i riferimenti, e ricostruisce per te il grappolo di oggetti collegati.

Voglio darti l'immagine che rende chiara questa idea, perché la fissa. Pensa a tradurre tra due lingue che non hanno la stessa grammatica. Molte parole hanno una corrispondenza uno a uno: le traduci e via. Ma alcune strutture no. Ci sono espressioni idiomatiche che in un'altra lingua semplicemente non esistono, e devi renderle con un giro di parole, un compromesso che coglie il senso ma non è identico. Il mappatore è esattamente questo: un traduttore che se la cava benissimo con le corrispondenze facili, ma che sulle strutture difficili deve inventare soluzioni, e ogni soluzione ha un costo. Capire quali sono le parti facili e quali quelle difficili è capire dove il mappatore ti aiuta e dove, invece, rischia di tradirti.

Voglio insistere sul punto più importante, perché è la lezione della puntata. La lezione è che questa traduzione non è mai perfetta, e non può esserlo. I due mondi hanno forme diverse per ragioni profonde, non per un difetto che qualcuno dimenticò di sistemare. Il mappatore nasconde questa imperfezione, e per la maggior parte del tempo fa un ottimo lavoro. Ma proprio perché la nasconde, quando le cose si complicano tu devi sapere dov'era nascosta. Le sorprese che vedremo nelle prossime puntate, le interrogazioni impazzite, i dati caricati troppo o troppo poco, nascono tutte da qui: da un incastro che, sotto la superficie liscia, imperfetto lo è sempre stato.

Voglio darti la lezione generale, perché vale oltre i database. La lezione è che ogni volta che uno strumento fa combaciare due mondi diversi, sta facendo un lavoro di traduzione, e nessuna traduzione è a costo zero. Vale per il mappatore tra oggetti e tabelle, ma vale per tantissimi strati comodi che usiamo ogni giorno senza pensarci. La comodità di non vedere la cucitura è reale, ed è preziosa. Ma la cucitura c'è, e il professionista è quello che sa dov'è, così che quando si strappa, sa dove guardare. Fidarsi di un'astrazione è saggio; dimenticarsi che è un'astrazione è pericoloso.

Per oggi ci fermiamo qui. Abbiamo visto l'incastro imperfetto tra oggetti e tabelle. L'oggetto è un grappolo ricco, con collegamenti diretti ad altri oggetti; la tabella è una griglia piatta di righe e colonne, con riferimenti indiretti. Questa differenza di forma ha un nome, la mancata corrispondenza di impedenza, e significa che i due mondi non combaciano del tutto. Il mappatore traduce: una classe è una tabella, un oggetto una riga, una proprietà una colonna, un collegamento una chiave esterna. Come tradurre tra due lingue con grammatiche diverse: facile sulle corrispondenze semplici, faticoso sulle strutture che non esistono nell'altra lingua. E la traduzione non è mai perfetta: da qui nascono tutte le sorprese. Nella prossima puntata: le due grandi scuole, salvarsi da soli o con un aiutante. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.