Panoramica del data shaping

Data shaping significa creare relazioni gerarchiche tra due o più entità logiche in una query. La gerarchia può essere vista nelle relazioni elemento padre-elemento figlio tra un record di un Recordset e uno o più record (noti anche come capitolo) di un altro oggetto Recordset. In una relazione elemento padre-elemento figlio, l'oggetto Recordset padre contiene l'oggetto Recordset figlio. Un esempio di tale relazione gerarchica sono i clienti e gli ordini. Per ogni cliente in un database, possono essere presenti zero o più ordini. La relazione gerarchica può essere ricorsiva, ovvero i record di un elemento nipote possono essere annidati in un record figlio. In linea di principio, un record gerarchico può essere annidato in qualsiasi profondità. In pratica, ADO limita la ricorsione a un massimo di 512 Recordset.

In generale, le colonne di un Recordset con forma possono contenere dati da un provider di dati, ad esempio SQL Server, riferimenti a un altro Recordset, valori derivati da un calcolo su una singola riga di un oggetto Recordset o valori derivati da un'operazione su una colonna di un intero Recordset. Una colonna può anche essere stata appena creata e vuota.

Quando si recupera il valore di una colonna contenente un riferimento a un altro oggetto Recordset, ADO restituisce automaticamente l'oggetto Recordset effettivo rappresentato dal riferimento. Il riferimento a un oggetto Recordset è in realtà un riferimento a un subset dell'elemento figlio, denominato capitolo. Un singolo elemento padre può fare riferimento a più di un Recordset figlio.

Il supporto di ADO per il data shaping consente di eseguire query su un'origine dati e restituire un Recordset in cui un record (padre) rappresenta un Recordset (figlio). Nello scenario dell'ordine del cliente è possibile usare la forma dei dati per recuperare le informazioni dei clienti e gli ordini inseriti da ogni cliente in una singola query. Il Recordset risultante è noto anche come Recordset con forma.

Inoltre, il data shaping in ADO consente di creare nuovi oggetti Recordset senza un'origine dati sottostante usando la parola chiave NEW per descrivere i campi dei Recordset padre e figlio. Il nuovo oggetto Recordset può quindi essere popolato con dati e archiviato in modo permanente. Gli sviluppatori possono anche eseguire vari calcoli o aggregazioni (ad esempio SUM, AVG e MAX) nei campi figlio. La forma dei dati può anche creare un Recordset padre da un Recordset figlio raggruppando i record nel figlio e posizionando una riga nell'elemento padre per ogni gruppo nell'elemento figlio.

SQL nella versione regolare consente di recuperare i dati usando la sintassi JOIN, ma questo può essere inefficiente e scomodo perché i dati padre ridondanti vengono ripetuti in ogni record restituito per una relazione padre-figlio specificata. La forma dei dati può correlare un singolo record padre nel Recordset padre a più record figlio nel Recordset figlio, evitando la ridondanza di un JOIN. La maggior parte delle persone trova il modello di programmazione Recordset elemento padre-elemento figlio più naturale e più facile da usare rispetto al singolo modello Recordset JOIN.