Caso práctico: la base de datos Northwind de Microsoft, de Access 97 a SQL y al navegador
Northwind es la base de datos de ejemplo que Microsoft incluía con Access. Utilizamos una copia pública (formato Access 97) para mostrar, sobre un archivo que cualquiera puede comprobar, cómo llevamos un programa Access a una base de datos moderna sin perder una fila ni cambiar una cifra. Detrás de esta página no hay ningún cliente: las empresas y las personas de Northwind son ficticias.

Punto de partida
- Un archivo Access 97 de 2.932 KB: 9 tablas con 4.032 filas, 22 consultas guardadas (tres con parámetros y una de referencias cruzadas), 13 informes y 21 formularios.
- Imágenes guardadas como objetos OLE, que solo Access sabe mostrar.
- Reglas de negocio repartidas entre las propiedades de los campos, las relaciones y las consultas de los informes.
Qué hicimos
- Datos. Todas las tablas y todas las filas pasaron a un nuevo esquema relacional, entregado como base de datos SQLite y como scripts de PostgreSQL, con claves primarias y foráneas, índices y las reglas de validación de Access convertidas en restricciones de la base de datos. Las 17 imágenes se convirtieron en archivos PNG, píxel a píxel.
- Consultas. Las 22 consultas guardadas se convirtieron en vistas SQL con el mismo nombre, en ambas bases de datos, junto con los cálculos que usan los informes: totales de pedido tras el descuento, importes de las facturas y ventas por categoría y por año.
- Prueba. Unas pruebas automáticas comparan el archivo original con las nuevas bases de datos: número de filas y suma de control de cada fila en cada tabla, y el resultado completo de cada consulta, 855 ejecuciones en total, comprobado de cuatro maneras (SQL de Access sobre el archivo original, un modelo independiente, PostgreSQL y el navegador).
- Aplicación. Una aplicación web sobre la base de datos migrada, que funciona por completo en el navegador: pedidos con totales calculados al momento, clientes, productos, proveedores, empleados, un panel de control y los informes originales, listos para imprimir.
Resultados de la ejecución
- 9/9
- tablas idénticas, fila a fila
- 22/22
- consultas con resultados idénticos (855 ejecuciones)
- 17/17
- intentos de infringir una regla rechazados por la base de datos
- 1.265.793,02 $
- valor de las 2.155 líneas de pedido, igual en SQLite, PostgreSQL y el navegador
Dos diferencias, ambas intencionadas
Access calcula las líneas de pedido en coma flotante binaria y guarda los descuentos como números aproximados (el 15 % se conserva como 0,15000000596). En 18 de las 2.155 líneas de pedido, cuyo importe exacto cae en medio céntimo, esto mueve el resultado un céntimo. Las nuevas bases de datos guardan porcentajes exactos y redondean igual en todas partes; el total general varía en 0,16 $. Cada línea afectada figura en el informe.
148 valores de texto perdieron un espacio final o un salto de línea de tipo antiguo. Uno de ellos era el país Sweden, escrito una vez con un espacio al final, que de otro modo contaría como un país distinto.
Qué encontraron las pruebas
UCanAccess, una herramienta muy extendida para leer archivos Access desde Java, lee la columna de descuentos de este archivo Access 97 como un número entero: los 838 descuentos pasan a ser cero. Las comprobaciones de las tablas lo detectaron y el informe explica cómo comparamos en igualdad de condiciones. Además, el texto SQL que reconstruye Jackcess omite el TOP 10 de una consulta; lo leímos de las tablas de sistema del archivo.
La aplicación carga la base de datos de 1.116 KB en su navegador mediante SQLite compilado a WebAssembly. Sus cambios se quedan en la pestaña y un botón restaura los datos originales. La aplicación y el informe están en inglés.