Casestudy: de Northwind-database van Microsoft, van Access 97 naar SQL en de browser
Northwind is de voorbeelddatabase die Microsoft met Access meeleverde. We hebben een openbare kopie ervan gebruikt (Access 97-formaat) om op een bestand dat iedereen kan controleren te laten zien hoe we een Access-programma naar een moderne database overzetten zonder een rij te verliezen of een bedrag te veranderen. Er zit geen klant achter deze pagina: de bedrijven en personen in Northwind zijn verzonnen.

Uitgangspunt
- Eén Access 97-bestand van 2.932 KB: 9 tabellen met 4.032 rijen, 22 opgeslagen query's (drie met parameters en één kruistabel), 13 rapporten en 21 formulieren.
- Afbeeldingen opgeslagen als OLE-objecten, die alleen Access kan weergeven.
- Bedrijfsregels verspreid over veldeigenschappen, relaties en de query's achter de rapporten.
Wat we hebben gedaan
- Gegevens. Elke tabel en elke rij is overgezet naar een nieuw relationeel schema, geleverd als SQLite-database en als PostgreSQL-scripts, met primaire en vreemde sleutels, indexen, en de validatieregels van Access omgezet in databaseconstraints. De 17 afbeeldingen zijn pixel voor pixel PNG-bestanden geworden.
- Query's. De 22 opgeslagen query's zijn SQL-views met dezelfde namen geworden, in beide databases, samen met de berekeningen achter de rapporten: ordertotalen na korting, factuurbedragen, verkopen per categorie en per jaar.
- Bewijs. Geautomatiseerde tests vergelijken het originele bestand met de nieuwe databases: aantallen rijen en een controlesom van elke rij per tabel, en het volledige resultaat van elke query, 855 uitvoeringen in totaal, op vier manieren gecontroleerd (Access-SQL op het originele bestand, een onafhankelijk model, PostgreSQL en de browser).
- Applicatie. Een webapplicatie op de gemigreerde database die volledig in de browser draait: bestellingen met live totalen, klanten, producten, leveranciers, medewerkers, een dashboard en de oorspronkelijke rapporten, klaar om af te drukken.
Resultaten van de run
- 9/9
- tabellen identiek, rij voor rij
- 22/22
- query's met identieke resultaten (855 uitvoeringen)
- 17/17
- pogingen om een regel te overtreden geweigerd door de database
- $ 1.265.793,02
- waarde van de 2.155 orderregels, gelijk in SQLite, PostgreSQL en de browser
Twee verschillen, allebei bewust
Access berekent orderregels met binaire drijvende komma en bewaart kortingen als benaderde getallen (15% wordt opgeslagen als 0,15000000596). Bij 18 van de 2.155 orderregels, waarvan het exacte bedrag precies op een halve cent valt, verschuift het resultaat daardoor één cent. De nieuwe databases slaan exacte percentages op en ronden overal op dezelfde manier af; het eindtotaal verandert met $ 0,16. Elke betrokken regel staat in het rapport.
148 tekstwaarden zijn een overbodige spatie aan het eind of een ouderwets regeleinde kwijtgeraakt. Een daarvan was het land Zweden, één keer opgeslagen met een spatie aan het eind, dat anders als apart land zou tellen.
Wat de tests onderweg vonden
UCanAccess, een veelgebruikte tool om Access-bestanden vanuit Java te lezen, leest de kortingskolom van dit Access 97-bestand als geheel getal: alle 838 kortingen worden nul. De tabelcontroles vingen dat op, en het rapport legt uit hoe we gelijk met gelijk hebben vergeleken. De SQL-tekst die Jackcess reconstrueert, laat bovendien de TOP 10 van één query weg; die hebben we uit de systeemtabellen van het bestand gelezen.
De applicatie laadt de database van 1.116 KB in uw browser, met SQLite gecompileerd naar WebAssembly. Uw wijzigingen blijven in het tabblad en een knop zet de oorspronkelijke gegevens terug.