Modernize Studio
Lingua: IT
Scriveteci

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.

L'applicazione web Northwind: l'ordine 10250 aperto in modifica, con le sue tre righe di prodotti, gli sconti e i totali aggiornati.
L'applicazione web costruita sul database migrato: un ordine del database di esempio Northwind di Microsoft, con i totali ricalcolati mentre si scrive.

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

  1. 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.
  2. 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.
  3. 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).
  4. 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.

Contatti

Via email:

riccardo@modernizestudio.com
Scriveteci un'email

Se avete un database Access, o un altro programma datato, che vorreste veder passare per lo stesso processo, mandateci una copia o una breve descrizione. Vi rispondiamo entro un giorno lavorativo.

Lavoriamo dall'Italia.

Scriveteci