Étude de cas : la base Northwind de Microsoft, d'Access 97 à SQL et au navigateur
Northwind est la base d'exemple que Microsoft fournissait avec Access. Nous en avons pris une copie publique (format Access 97) pour montrer, sur un fichier que chacun peut vérifier, comment nous faisons passer un programme Access vers une base de données moderne sans perdre une ligne ni modifier un chiffre. Il n'y a pas de client derrière cette page : les sociétés et les personnes de Northwind sont fictives.

Point de départ
- Un fichier Access 97 de 2 932 Ko : 9 tables et 4 032 lignes, 22 requêtes enregistrées (dont trois avec paramètres et une requête analyse croisée), 13 états et 21 formulaires.
- Des images enregistrées comme objets OLE, que seul Access sait afficher.
- Des règles de gestion réparties entre les propriétés des champs, les relations et les requêtes des états.
Ce que nous avons fait
- Données. Toutes les tables et toutes les lignes ont été reprises dans un nouveau schéma relationnel, livré en base SQLite et en scripts PostgreSQL, avec clés primaires et étrangères, index, et les règles de validation d'Access devenues des contraintes de la base. Les 17 images sont devenues des fichiers PNG, pixel pour pixel.
- Requêtes. Les 22 requêtes enregistrées sont devenues des vues SQL portant le même nom, dans les deux bases, ainsi que les calculs utilisés par les états : totaux de commande après remise, montants des factures, ventes par catégorie et par année.
- Preuve. Des tests automatiques comparent le fichier d'origine aux nouvelles bases : nombre de lignes et somme de contrôle de chaque ligne pour chaque table, et résultat complet de chaque requête, 855 exécutions au total, vérifié de quatre façons (SQL Access sur le fichier d'origine, modèle indépendant, PostgreSQL et navigateur).
- Application. Une application web sur la base migrée, qui fonctionne entièrement dans le navigateur : commandes avec totaux calculés en direct, clients, produits, fournisseurs, employés, tableau de bord et états d'origine, imprimables.
Résultats de l'exécution
- 9/9
- tables identiques, ligne par ligne
- 22/22
- requêtes aux résultats identiques (855 exécutions)
- 17/17
- tentatives d'enfreindre une règle refusées par la base
- 1 265 793,02 $
- valeur des 2 155 lignes de commande, identique dans SQLite, PostgreSQL et le navigateur
Deux écarts, tous deux voulus
Access calcule les lignes de commande en virgule flottante binaire et conserve les remises sous forme de nombres approchés (15 % devient 0,15000000596). Sur 18 des 2 155 lignes de commande, dont le montant exact tombe sur un demi-centime, cela décale le résultat d'un centime. Les nouvelles bases enregistrent des pourcentages exacts et arrondissent partout de la même façon ; le total général varie de 0,16 $. Chaque ligne concernée figure dans le rapport.
148 valeurs de texte ont perdu un espace en fin de valeur ou un ancien saut de ligne. L'une d'elles était le pays Sweden, saisi une fois avec un espace final, qui sinon serait compté comme un pays distinct.
Ce que les tests ont révélé
UCanAccess, outil très répandu pour lire les fichiers Access depuis Java, lit la colonne des remises de ce fichier Access 97 comme un nombre entier : les 838 remises deviennent nulles. Les contrôles des tables l'ont détecté, et le rapport explique comment nous avons comparé à conditions égales. Le texte SQL reconstruit par Jackcess omet aussi le TOP 10 d'une requête ; nous l'avons lu dans les tables système du fichier.
L'application charge la base de 1 116 Ko dans votre navigateur grâce à SQLite compilé en WebAssembly. Vos modifications restent dans l'onglet et un bouton rétablit les données d'origine. L'application et le rapport sont en anglais.