Para una aplicación de gestión con clientes, pedidos, facturas y stock, la respuesta entre PostgreSQL, MySQL o MongoDB suele ser PostgreSQL: relaciones con restricciones que impiden datos incoherentes y JSONB para los campos variables. MySQL vale igual si tu equipo ya lo usa. MongoDB encaja cuando el dato es un documento autocontenido. Lo elegimos contigo en nuestro desarrollo de software de gestión a medida en Madrid.
La base de datos es la pieza más cara de cambiar. Si el motor no protege la integridad, los errores salen en los informes: pedidos que apuntan a un cliente borrado o líneas con cantidades negativas que nadie detecta hasta el cierre. Cada descuadre se paga en horas de revisión manual.
Al terminar podrás elegir motor por escenario, apoyándote en lo que explicamos sobre qué hace el backend con la lógica de datos.
Qué son PostgreSQL, MySQL y MongoDB: relacional frente a documental
Una base de datos relacional como PostgreSQL o MySQL guarda los datos en tablas con columnas tipadas y relaciones declaradas, y el motor rechaza lo que viola esas reglas. Una base documental como MongoDB guarda documentos con esquema flexible, y la coherencia entre documentos depende de la aplicación salvo que configures validación.
Si la aplicación va a servir a varias empresas desde una sola instancia, el modelo de datos se cruza con el aislamiento que detallamos en la arquitectura SaaS multi-tenant por cliente.
Transacciones e integridad en cada motor
Los tres motores ofrecen transacciones; lo que cambia es cuánta integridad comprueba el propio motor sin depender de tu código.
- PostgreSQL: las restricciones FOREIGN KEY y CHECK se declaran una vez y se aplican a cualquier programa que escriba, sea la aplicación o una importación.
- MySQL: con InnoDB tienes transacciones y FOREIGN KEY. Las restricciones CHECK se aplican desde MySQL 8.0.16; antes se aceptaban y se ignoraban, según el manual de MySQL sobre restricciones CHECK. Revisa la versión de tu hosting.
- MongoDB: cada escritura en un documento es atómica. Las transacciones multidocumento exigen versión 4.0 en replica sets y 4.2 en clústeres fragmentados, y la documentación de transacciones de MongoDB advierte que cuestan más rendimiento y no sustituyen un buen diseño de esquema.
Informes, JSON y escalado en una aplicación de gestión
Los informes de gestión cruzan entidades, y ese terreno favorece al SQL.
- Informes: JOIN y GROUP BY resuelven en una consulta la facturación por cliente y mes. En MongoDB se escribe como pipeline de agregación, con `$lookup` para unir colecciones de la misma base.
- JSON dentro de lo relacional: PostgreSQL indexa JSONB con GIN y busca por contenido con el operador `@>`. MySQL valida los documentos de su tipo JSON y los indexa mediante columnas generadas. El argumento del esquema flexible pierde peso.
- Escalado: antes de fragmentar, una base relacional admite réplicas de lectura y particionado de tablas. Los patrones de crecimiento los tienes en los tipos de arquitectura backend según volumen.
- Hosting gestionado: Amazon RDS ofrece PostgreSQL y MySQL, y MongoDB Atlas es el servicio gestionado y multinube de MongoDB. Supabase añade una capa de API sobre PostgreSQL; lo analizamos en Supabase o Node.js sobre PostgreSQL.
Qué base de datos elegir según tu escenario
La base de datos de una aplicación de gestión se elige por el tipo de dato que domina en cada escenario:
- ERP, facturación o stock: PostgreSQL. Las relaciones son el negocio, como verás en el desarrollo de un ERP por módulos.
- Equipo o hosting ya en MySQL: MySQL 8 con InnoDB, comprobando que la versión aplica CHECK.
- Catálogo con atributos distintos por producto: PostgreSQL con JSONB antes que añadir un segundo motor.
- Eventos o lecturas de sensores con estructura cambiante: MongoDB, separado del núcleo transaccional.
- Aplicación interna con usuarios de Microsoft 365: el motor no cambia; guarda el identificador que llega del inicio de sesión único con Entra ID para apps de gestión.
CodeZone Pro Tip: el mismo pedido modelado en PostgreSQL con restricciones, y la consulta del informe mensual que en MongoDB sería un pipeline de agregación.
-- Modelo relacional: la base de datos rechaza datos incoherentes
CREATE TABLE clientes (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nif text NOT NULL UNIQUE,
nombre text NOT NULL
);
CREATE TABLE pedidos (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
cliente_id bigint NOT NULL REFERENCES clientes (id) ON DELETE RESTRICT,
fecha date NOT NULL,
estado text NOT NULL CHECK (estado IN ('borrador', 'confirmado', 'anulado')),
-- Campos variables por sector, sin migración: JSONB indexable
extra jsonb NOT NULL DEFAULT '{}'
);
CREATE TABLE lineas_pedido (
pedido_id bigint NOT NULL REFERENCES pedidos (id) ON DELETE CASCADE,
producto text NOT NULL,
cantidad integer NOT NULL CHECK (cantidad > 0),
precio numeric(12,2) NOT NULL CHECK (precio >= 0)
);
-- Informe: facturación mensual por cliente, solo pedidos confirmados
SELECT c.nombre,
date_trunc('month', p.fecha) AS mes,
sum(l.cantidad * l.precio) AS total
FROM pedidos p
JOIN clientes c ON c.id = p.cliente_id
JOIN lineas_pedido l ON l.pedido_id = p.id
WHERE p.estado = 'confirmado'
GROUP BY c.nombre, mes
ORDER BY mes, total DESC;Con este modelo, un pedido de un cliente inexistente o una línea con cantidad cero se rechazan en el INSERT, venga el error de la aplicación o de una importación desde Excel. En MongoDB, la misma garantía exige reglas de validación con `$jsonSchema` y el informe pasa por `$lookup` y `$group`: funciona, pero la integridad entre colecciones la defiende tu código. Para tu negocio, son cierres de mes que cuadran a la primera.
Lo Que Cuesta Elegir Mal la Base de Datos
Cambiar de motor con años de datos implica reescribir consultas y ejecutar un plan de migración de datos con validación mientras el negocio sigue facturando. Si el cambio se aplaza, cada parche sobre el motor equivocado engorda la deuda técnica de una base de datos mal elegida hasta bloquear nuevas funcionalidades.
Si estás arrancando una aplicación de gestión o dudas del motor que ya tienes, cuéntanos qué datos maneja tu aplicación y te recomendamos la base de datos con argumentos.