Caso di studio: il database Northwind di Microsoft, da Access 97 a SQL e al browser
Northwind è il database di esempio che Microsoft distribuiva con Access. Ne abbiamo usato una copia pubblica (formato Access 97) per mostrare, su un file che chiunque può verificare, come portiamo un programma Access su un database moderno senza perdere una riga né cambiare una cifra. Dietro questa pagina non c'è un cliente: le aziende e le persone di Northwind sono di fantasia.

Punto di partenza
- Un file Access 97 di 2.932 KB: 9 tabelle con 4.032 righe, 22 query salvate (tre con parametri e una a campi incrociati), 13 report e 21 maschere.
- Immagini salvate come oggetti OLE, che solo Access sa visualizzare.
- Regole di gestione distribuite tra proprietà dei campi, relazioni e query dei report.
Cosa abbiamo fatto
- Dati. Tutte le tabelle e tutte le righe sono passate a un nuovo schema relazionale, consegnato come database SQLite e come script PostgreSQL, con chiavi primarie ed esterne, indici, e le regole di convalida di Access trasformate in vincoli del database. Le 17 immagini sono diventate file PNG, pixel per pixel.
- Query. Le 22 query salvate sono diventate viste SQL con lo stesso nome, in entrambi i database, insieme ai calcoli usati dai report: totali degli ordini dopo lo sconto, importi delle fatture, vendite per categoria e per anno.
- Prova. Test automatici confrontano il file originale con i nuovi database: numero di righe e checksum di ogni riga per ogni tabella, e il risultato completo di ogni query, 855 esecuzioni in tutto, verificato in quattro modi (SQL di Access sul file originale, un modello indipendente, PostgreSQL e il browser).
- Applicazione. Un'applicazione web sul database migrato, che funziona interamente nel browser: ordini con totali calcolati al momento, clienti, prodotti, fornitori, dipendenti, una dashboard e i report originali, stampabili.
Risultati dell'esecuzione
- 9/9
- tabelle identiche, riga per riga
- 22/22
- query con risultati identici (855 esecuzioni)
- 17/17
- tentativi di violare una regola respinti dal database
- 1.265.793,02 $
- valore delle 2.155 righe d'ordine, uguale in SQLite, PostgreSQL e nel browser
Due differenze, entrambe volute
Access calcola le righe d'ordine in virgola mobile binaria e conserva gli sconti come numeri approssimati (il 15% diventa 0,15000000596). Su 18 delle 2.155 righe d'ordine, il cui importo esatto cade su mezzo centesimo, questo sposta il risultato di un centesimo. I nuovi database salvano percentuali esatte e arrotondano ovunque allo stesso modo; il totale generale cambia di 0,16 $. Ogni riga interessata è elencata nel report.
148 valori di testo hanno perso uno spazio finale o un vecchio tipo di a capo. Uno di questi era il paese Sweden, scritto una volta con uno spazio finale, che altrimenti sarebbe contato come un paese a sé.
Cosa hanno trovato i test
UCanAccess, uno strumento molto diffuso per leggere i file Access da Java, legge la colonna degli sconti di questo file Access 97 come numero intero: tutti gli 838 sconti diventano zero. I controlli sulle tabelle lo hanno rilevato e il report spiega come abbiamo confrontato a parità di condizioni. Inoltre il testo SQL ricostruito da Jackcess omette il TOP 10 di una query; lo abbiamo letto dalle tabelle di sistema del file.
L'applicazione carica il database di 1.116 KB nel vostro browser tramite SQLite compilato in WebAssembly. Le modifiche restano nella scheda e un pulsante ripristina i dati originali. Applicazione e report sono in inglese.