lección 6
Bases de datos: el lugar donde los datos tienen un hogar permanente
Qué es una base de datos, por qué existe, y la diferencia conceptual entre relacional y NoSQL. Sin instalar nada — eso viene después.
⏱ 55 min
Hasta ahora has trabajado con archivos: CSV, JSON, Parquet. Son archivos en tu disco duro — los lees, los procesas, los guardas. Funcionan. Pero imagina este escenario: tu app de pedidos tiene 50 empleados accediendo a los mismos datos al mismo tiempo. Un empleado está leyendo el stock de un producto mientras otro lo está vendiendo. ¿Qué stock es el correcto? ¿Y si dos empleados venden la última unidad al mismo tiempo? ¿Quién gana? Con archivos simples, esto es un desastre. Con una base de datos, está resuelto.
Una base de datos es un sistema de software especializado en almacenar, organizar y servir datos a múltiples usuarios simultáneamente con garantías de seguridad, consistencia y velocidad. Piensa en la diferencia entre un cuaderno personal (archivo) y una biblioteca pública (base de datos): el cuaderno es tuyo, lo usas solo tú, lo organizas como quieres. La biblioteca tiene un catálogo, reglas de préstamo, permite que 1000 personas la usen al mismo tiempo, y se asegura de que nadie se lleve un libro que ya está prestado.
### ¿Por qué no vale con archivos?
Los archivos (CSV, JSON, Parquet) son perfectos para almacenamiento y procesamiento en lote: leer un archivo, transformarlo, escribir otro. Pero tienen problemas graves cuando necesitas cosas que las aplicaciones reales necesitan:
- Acceso concurrente: 50 personas leyendo/escribiendo al mismo tiempo sin pisarse.
- Transacciones: si una transferencia bancaria falla a mitad, no quiero quedarme sin dinero en ambas cuentas.
- Consultas rápidas: encontrar un cliente por email entre 10 millones en milisegundos.
- Seguridad: que el becario no pueda borrar la tabla de producción.
- Consistencia: si actualizo el nombre de un cliente, que se actualice en todas partes instantáneamente.
- Durabilidad: si se va la luz mientras escribo datos, que no se pierdan.
Una base de datos resuelve TODO esto. Es software extremadamente sofisticado que ha evolucionado durante 50 años para garantizar estas propiedades. Las más importantes se conocen como ACID: Atomicidad (todo o nada), Consistencia (siempre estado válido), Isolation (las transacciones no se ven entre sí) y Durabilidad (lo guardado no se pierde). No necesitas memorizar esto ahora — lo vivirás en la práctica más adelante.
### Bases de datos relacionales: el estándar de 50 años
Las bases de datos relacionales organizan los datos en tablas con filas y columnas — exactamente como una hoja de cálculo, pero con superpoderes. Cada tabla tiene un esquema fijo (columnas definidas con tipos) y las tablas se pueden relacionar entre sí mediante claves (un campo que aparece en ambas tablas y las conecta).
Imagina una tienda online. Tienes una tabla de CLIENTES (id, nombre, email), una tabla de PRODUCTOS (id, nombre, precio, stock) y una tabla de PEDIDOS (id, cliente_id, producto_id, cantidad, fecha). El campo "cliente_id" en la tabla de pedidos APUNTA al "id" en la tabla de clientes. Así puedes preguntar: "dame todos los pedidos del cliente con email ana@tienda.com" cruzando ambas tablas. Eso es una relación — y de ahí viene el nombre "relacional".
1# Tres tablas. Las dos primeras tienen su id propio (clave primaria).2clientes = [{"id": 1, "nombre": "Ana"}]3productos = [{"id": 7, "nombre": "Teclado", "precio": 49.9}]45# La tercera las RELACIONA guardando sus ids (claves ajenas)6pedidos = [{"id": 100, "cliente_id": 1, "producto_id": 7}]78# "¿Qué compró Ana?" se responde saltando de tabla en tabla por el id9pedido = pedidos[0]10producto = [p for p in productos if p["id"] == pedido["producto_id"]][0]11print(producto["nombre"]) # Teclado
El modelo relacional en Python: tablas como listas de diccionarios, conectadas por id
Las bases de datos relacionales más conocidas son PostgreSQL (open-source, la que usaremos), MySQL (también open-source, muy popular en web), Oracle (la corporativa por excelencia, carísima) y SQL Server (de Microsoft). Todas usan SQL como lenguaje para consultar y manipular los datos. En la Skill 7 aprenderás SQL en profundidad e instalarás PostgreSQL para practicar.
### Bases de datos NoSQL: cuando las tablas no son suficientes
Relacional no es la única opción. En los años 2000, con la explosión de internet, surgieron necesidades que las bases de datos relacionales manejaban con dificultad: almacenar documentos con estructura variable (como perfiles de usuario donde cada uno tiene campos diferentes), manejar millones de lecturas por segundo (como un feed de red social) o almacenar relaciones complejas (como "amigos de amigos de amigos"). Así nacieron las bases de datos NoSQL — "No Solo SQL".
- Documentos (MongoDB, CouchDB): almacenan documentos JSON. Cada documento puede tener estructura diferente. Ideal para catálogos con atributos variables.
- Clave-valor (Redis, DynamoDB): como un diccionario gigante. Ultra rápidas para lecturas simples. Ideal para caché y sesiones.
- Columnar (Cassandra, HBase): optimizadas para escribir y leer enormes cantidades de datos distribuidos. Ideal para series temporales y logs.
- Grafos (Neo4j): almacenan nodos y relaciones. Ideales para redes sociales, recomendaciónes, detección de fraude.
### Relacional vs NoSQL: no es una competencia
El error más común es pensar que tienes que elegir. La realidad es que la mayoría de empresas usan AMBOS: una base relacional para los datos transaccionales del negocio (clientes, pedidos, facturas — donde la consistencia es crítica) y una o varias NoSQL para casos específicos (caché en Redis para velocidad, MongoDB para un catálogo con atributos variables, etc.). Son herramientas complementarias, no competidoras.
Consejo de senior: si estás empezando un proyecto y no sabes qué base elegir, elige relacional (PostgreSQL). Cubre el 90% de los casos. Solo elige NoSQL cuando tengas un problema concreto que relacional no resuelve bien. He visto equipos elegir MongoDB "porque es moderno" y luego sufrir porque necesitaban JOINs y transacciones que MongoDB no ofrecía bien. Elige la herramienta para el problema, no al revés.
### La base de datos como servidor: el modelo cliente-servidor
A diferencia de un archivo (que simplemente está en tu disco), una base de datos es un PROGRAMA que está corriendo constantemente, esperando peticiones. Es como un restaurante: el cocinero (la base de datos) está siempre listo en la cocina, y los camareros (tu código Python, la app web, etc.) le pasan comandas. Tú (cliente) envías una petición ("dame los pedidos de enero"), la base de datos la procesa y te devuelve el resultado. Este modelo permite que 1000 clientes pregunten al mismo tiempo sin problema.
En la Skill 7 (SQL) instalarás una base de datos real (PostgreSQL) y la usarás como servidor al que te conectas desde tu terminal o desde Python. Pero conceptualmente, ya entiendes la idea: es un programa especializado en gestionar datos, no un archivo pasivo.
Error que veo en juniors todo el tiempo: usar la base de datos como vertedero. "Guardemos todo por si acaso". Una base de datos tiene un coste: espacio, mantenimiento, backups, migraciones. Cada tabla que creas es una tabla que alguien tendrá que mantener durante años. Antes de crear una tabla, pregúntate: "¿quién la va a usar y para qué?". Si no tienes respuesta clara, no la crees.
### Resumen y preview
- 01.Una base de datos es un programa especializado en almacenar y servir datos con garantías (concurrencia, seguridad, velocidad).
- 02.Los archivos son para procesamiento en lote; las bases de datos son para acceso en tiempo real por múltiples usuarios.
- 03.Relacional (PostgreSQL, MySQL): tablas con esquema fijo, relaciones por claves, SQL. El estándar.
- 04.NoSQL (MongoDB, Redis, Cassandra): formatos flexibles para casos específicos. Complementa a relacional.
- 05.En la Skill 7 instalarás PostgreSQL y aprenderás SQL para interactuar con ella.
Para tu carrera como ingeniero de datos, SQL y bases de datos relacionales serán tu pan de cada día. Los sistemas NoSQL los encontrarás como fuentes de datos (leer datos de MongoDB, de Redis) más que como destino. El destino final de los datos analíticos suele ser siempre una base relacional o un data warehouse — ambos se consultan con SQL.
## ejercicios
Relacional o NoSQL: elige para cada caso
Varios proyectos necesitan una base de datos. Elige la más adecuada: "relacional", "documentos", "clave_valor" o "grafos".
💡 Resultado esperado
[ relacional] Tienda online con pedidos, clientes y facturas [ clave_valor] Caché de sesiones de usuario (acceso ultrarrápido por ID) [ documentos] Catálogo de productos donde cada categoría tiene atributos diferentes [ grafos] Red social: encontrar amigos en común y sugerir conexiones
¿Archivo o base de datos? Aplica la regla
Hace falta base de datos si se escribe desde VARIOS sitios a la vez, o si hay que consultar AL MOMENTO. Si no se da ninguna de las dos, basta un archivo.
💡 Resultado esperado
[ archivo] Backup mensual de toda la empresa [ base_de_datos] Dashboard con las ventas de hoy [ base_de_datos] Formulario web de alta de clientes [ base_de_datos] Tienda online: 500 personas comprando a la vez
Diseña las tablas de una biblioteca
Tres tablas: libros, socios y préstamos. Las relaciones se hacen con IDs compartidos. La tabla de socios está hecha; escribe los préstamos y consulta los libros de María.
💡 Resultado esperado
Libros que tiene María: Cien años de soledad (prestado el 2026-01-10) 1984 (prestado el 2026-01-12)
Simular el problema de concurrencia
Dos empleados intentan vender el último producto. La primera mitad demuestra el error. Arregla la función de la segunda mitad.
💡 Resultado esperado
Empleado 1 lee stock: 1 Empleado 2 lee stock: 1 Empleado 1: VENTA realizada Empleado 2: VENTA realizada
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...