Saltar al contenido principal

Bases de datos

Una base de datos (DB) es un sistema organizado para almacenar, gestionar y recuperar información de forma eficiente y segura. A diferencia de los ficheros, las bases de datos están diseñadas para consultas rápidas, concurrencia de múltiples usuarios, integridad de datos y escalabilidad.

El acceso a bases de datos es fundamental para aplicaciones de cualquier tamaño: desde un blog que necesita guardar usuarios y posts, hasta sistemas bancarios con miles de transacciones por segundo.

Tipos de bases de datos

Bases de datos relacionales (RDBMS o SQL)

  • Organizan la información en tablas compuestas por filas (registros) y columnas (campos).
  • Utilizan SQL (Structured Query Language) para consultas y manipulación de datos.
  • Soportan transacciones, integridad referencial y restricciones (constraints).
  • Ejemplos: MySQL, PostgreSQL, SQLite, Oracle DB.

Ejemplo conceptual de tabla Usuarios:

idnombreemailedad
1Anaana@example.com28
2Luisluis@example.com35

Ejemplo SQL:

SELECT nombre, email FROM Usuarios WHERE edad > 30;

Bases de datos no relacionales (NoSQL)

  • No utilizan tablas estrictas; pueden ser documentos, clave-valor, columnas o grafos.
  • Ventaja: flexibilidad de esquema, escalabilidad horizontal, adecuado para grandes volúmenes y datos semi-estructurados.
  • Ejemplos: MongoDB (documentos), Redis (clave-valor), Cassandra (column-family), Neo4j (grafos).

Ejemplo conceptual en MongoDB (documento de usuario):

{
"_id": "abc123",
"nombre": "Ana",
"email": "ana@example.com",
"edad": 28
}

Modelos de interacción con bases de datos

  1. Conexión directa
    • El programa establece una conexión con la base de datos mediante un driver o librería.
    • Puede ejecutar consultas SQL directamente o instrucciones específicas del motor.
  2. ORM (Object-Relational Mapping)
    • Permite mapear tablas de la base de datos a objetos del lenguaje de programación.
    • Facilita la escritura de consultas, evita errores de SQL y mejora la mantenibilidad.
    • Ejemplos: Eloquent (PHP), Prisma o Sequelize (Node.js).
  3. Query Builders
    • Librerías que generan consultas SQL dinámicamente a partir de métodos de programación.
    • Ejemplo: Knex.js en Node.js.

Operaciones básicas (CRUD)

Toda interacción con bases de datos se resume en CRUD:

OperaciónSQLConcepto
CreateINSERT INTOCrear un nuevo registro
ReadSELECTLeer o consultar datos
UpdateUPDATEModificar datos existentes
DeleteDELETEEliminar registros

Transacciones y consistencia

  • Una transacción es un conjunto de operaciones que se ejecutan como una unidad atómica.
  • ACID: Atomicity, Consistency, Isolation, Durability.

Ejemplo conceptual: transferencia de saldo entre dos cuentas:

  1. Restar saldo a la cuenta A.
  2. Sumar saldo a la cuenta B.
  3. Solo confirmar los cambios si ambas operaciones fueron exitosas (COMMIT); de lo contrario, revertir (ROLLBACK).
[Restar saldo] → [Sumar saldo] → COMMIT / ROLLBACK

Concurrencia y bloqueo

  • Múltiples usuarios pueden acceder y modificar datos al mismo tiempo.
  • Problemas comunes: lost updates, dirty reads, race conditions.
  • Mecanismos de control:
    • Bloqueo pesimista: bloquear filas/tablas mientras se realizan cambios.
    • Bloqueo optimista: detectar conflictos en commit mediante versiones o timestamps.

Seguridad y buenas prácticas

  • Autenticación y autorización: cada usuario o aplicación con permisos mínimos necesarios.
  • Consultas parametrizadas / prepared statements: evitar inyección SQL.
  • Cifrado: proteger datos sensibles en reposo y en tránsito (TLS).
  • Backups regulares y prueba de restauración.
  • Monitoreo de consultas: detectar consultas lentas y optimizar índices.

Rendimiento y escalabilidad

  • Indexado: mejorar la velocidad de lectura, sobre todo en columnas consultadas frecuentemente.
  • Particionamiento / Sharding: dividir datos grandes en varias bases o nodos.
  • Caché: almacenar resultados frecuentes en memoria (Redis, Memcached).
  • Batching / Bulk operations: agrupar inserciones o actualizaciones para reducir overhead.

Ejemplo conceptual de flujo de acceso a una base de datos

  1. Conectar con la base de datos.
  2. Leer los datos existentes según la consulta requerida.
  3. Procesar los datos en la aplicación (ej. aplicar filtros, cálculos).
  4. Guardar cambios mediante transacciones si es necesario.
  5. Cerrar la conexión.