Saltar al contenido principal

Teoría sobre Bases de Datos

Imagina que las bases de datos son los cimientos de una casa para tus Agentes de IA. Aquí analizaremos cómo diseñar "almacenes de memoria" para redes neuronales, para que tus sistemas puedan encontrar rápidamente los datos necesarios, como un bibliotecario en un universo de libros gigantesco. Aprenderás a elegir entre SQL y NoSQL (como seleccionar llaves para diferentes cajas fuertes), optimizar consultas (como construir autopistas para los datos) y garantizar la fiabilidad de las transacciones; estas habilidades te transformarán de novato en arquitecto de sistemas de IA industriales.

Instrucciones para Ask AI
instrucción

Dado que estos temas no cambian con el tiempo, lo mejor es estudiarlos con un profesor personal: ChatGPT.

El proceso de estudio debe ser el siguiente:

  • Creas un prompt de sistema para ChatGPT (plantillas), donde describes tu experiencia, preferencias, nivel de detalle de las explicaciones, etc.
  • Copias el tema de la lista (triple clic) y le pides a ChatGPT que te explique ese tema.
  • Si deseas profundizar, haz preguntas aclaratorias.

Actualmente, esta es la forma más conveniente de estudiar los fundamentos. Además de los conceptos, puedes estudiar materiales adicionales en las secciones Gold, Silver, Extra.

  1. Gold: es imprescindible estudiar antes de interactuar con ChatGPT.
  2. Ask AI: haz preguntas sobre cada tema desconocido.
  3. Silver: materiales secundarios.
  4. Extra: temas avanzados.

Golden

bytebyte db playlist - https://youtube.com/playlist?list=PLCRMIe5FDPsdnSszazqVIQFh99t1ExH19&si=3tVd_dGWxmtQ2pQo

Fireship

Ask AI

Conceptos básicos de bases de datos

  1. Arquitectura de bases de datos: componentes y términos principales (Fundamentos)
  2. Bases de datos relacionales: de la normalización a las relaciones entre tablas
  3. Claves en bases de datos: diseño de relaciones e integridad de datos
  4. Operaciones CRUD: patrones de trabajo con datos (Prácticas)

SQL y trabajo con datos

  1. SQL: sintaxis para tareas cotidianas (Hoja de referencia)
  2. Consultas SELECT: técnicas avanzadas de filtrado
  3. Operaciones JOIN: visualización de relaciones entre tablas
  4. Transacciones: escritura de operaciones atómicas

NoSQL y enfoques modernos para el almacenamiento de datos

  1. SQL vs NoSQL: comparación de modelos de datos

    SQL vs NoSQL: comparación de modelos de datos
  2. Bases de datos orientadas a documentos: MongoDB y trabajo con datos JSON

  3. Propiedades ACID: transacciones en bases de datos

    Propiedades ACID: transacciones en bases de datos

Optimización y aspectos prácticos

  1. Índices en bases de datos: principios de funcionamiento y optimización

  2. ORM: ventajas y desventajas

  3. Relaciones en bases de datos: uno a uno, uno a muchos, muchos a muchos

  4. Paginación: enfoques basados en offset vs cursor

    Paginación: enfoques basados en offset vs cursor
  5. Almacenes clave-valor: Redis y almacenamiento en caché (Resumen)

  6. Bases de datos de grafos: fundamentos del trabajo con Neo4j (Concepto)

Silver

I replaced my entire tech stack with Postgres...

Exercises

Ejercicio: Optimización de consultas lentas en PostgreSQL

Situación: Tenemos una tabla user_actions en PostgreSQL con 10 millones de registros:

CREATE TABLE user_actions (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
action_type VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
metadata JSONB
);

Problema: La siguiente consulta tarda 2.8 segundos en ejecutarse:

SELECT * FROM user_actions 
WHERE user_id = 123
AND action_type = 'search'
ORDER BY created_at DESC
LIMIT 100;

Tarea:

  1. Explica por qué la consulta se ha vuelto lenta
  2. Propón una solución mediante índices
  3. Escribe el SQL para crear el índice
  4. Explica las ventajas y desventajas de tu solución
Respuesta
  1. Razón de la lentitud: Falta un índice adecuado para las condiciones WHERE y ORDER BY
  2. Solución: Crear un índice compuesto que cubra el filtrado y la ordenación
  3. SQL:
CREATE INDEX idx_user_actions_composite ON user_actions 
(user_id, action_type, created_at DESC);
  1. Ventajas y desventajas:
  • Aumento del tamaño de la base de datos en ~15-20%
  • Ligera ralentización de las operaciones INSERT/UPDATE
  • Se recomienda utilizar CONCURRENTLY para la creación en producción:
CREATE INDEX CONCURRENTLY idx_user_actions_composite ...;