1. Datos: El Nuevo Petróleo

Las apps efímeras guardan datos en memoria (RAM). Las apps serias guardan datos para siempre (Persistencia).

Una Base de Datos Relacional (RDBMS) es como un Excel supervitaminado, seguro y multiusuario.
Hablamos con ella usando SQL (Structured Query Language). No importa si usas PostgreSQL, MySQL o SQL Server, el idioma es el mismo al 90%.

2. Tablas, Filas y Columnas

La estructura es rígida (Schema).

  • Tabla: La entidad (ej: `Usuarios`).
  • Columna: El atributo (ej: `email`, `edad`). Tienen tipos fijos (INT, VARCHAR).
  • Fila: El registro individual (ej: `Juan, 25 años`).
No puedes meter texto en una columna numérica. Esta rigidez es lo que garantiza la integridad de los datos financieros, bancarios, etc.

Evaluación 1: Conceptos

¿Qué es un 'Schema'?

Un diagrama bonito.
El plano o estructura definida de la base de datos (tablas, campos, tipos).
Un tipo de dato.

3. SELECT: Pidiendo datos

Es el comando que más usarás.

-- SELECT [qué columnas] FROM [qué tabla];

SELECT nombre, email FROM usuarios;

-- El asterisco * es un comodín: "Dame TODAS las columnas"
SELECT * FROM usuarios;
Tip de Performance: Nunca uses `SELECT *` en producción si la tabla tiene 50 columnas. Pide solo lo que necesitas. Ahorra ancho de banda.

4. WHERE: Filtrando

Sin esto, traerías millones de filas.

SELECT * FROM productos
WHERE precio > 100 AND categoria = 'Electrónica';
Puedes usar operadores lógicos (`AND`, `OR`, `NOT`) y de comparación (`=`, `<>`, `>`, `<`).
También `LIKE` para búsquedas parciales: `WHERE nombre LIKE 'A%'` (Empieza con A).

5. INSERT, UPDATE, DELETE

Manipulando datos (DML).

-- Crear
INSERT INTO usuarios (nombre, edad) VALUES ('Ana', 30);

-- Modificar (¡SIN WHERE MODIFICA TODOS!)
UPDATE usuarios SET edad = 31 WHERE nombre = 'Ana';

-- Borrar (¡PELIGRO!)
DELETE FROM usuarios WHERE id = 1;

Evaluación 2: Seguridad

¿Qué pasa si escribo `UPDATE usuarios SET activo = true;` y olvido el WHERE?

Activas a TODOS los usuarios de la base de datos. Desastre potencial.
SQL te pregunta "¿Estás seguro?".
Solo actualiza el primer registro.

6. Primary Key (PK)

Cada fila debe tener un identificador único, como el DNI o Cédula.
Usualmente es una columna `id` (Número entero autoincremental: 1, 2, 3...).
Garantiza que no haya dos 'Juan Pérez' que sean la misma persona.

7. Relaciones y Foreign Keys (FK)

La magia de lo "Relacional". Conectamos tablas.

Si un Usuario tiene muchos Pedidos:
Tabla `Pedidos` tiene una columna `usuario_id` (FK) que apunta al `id` (PK) de la tabla `Usuarios`.
Así sabemos de quién es cada pedido sin repetir el nombre del usuario mil veces.

8. JOIN: Cruzando tablas

Para reconstruir la información separada.

SELECT usuarios.nombre, pedidos.monto
FROM usuarios
INNER JOIN pedidos ON usuarios.id = pedidos.usuario_id;
`INNER JOIN`: Trae datos solo si hay coincidencia en ambos lados (Usuarios CON pedidos).
`LEFT JOIN`: Trae todos los usuarios, tengan pedidos o no.

Evaluación 3: Joins

Quiero una lista de todos mis clientes, y si han comprado algo, que salga. Si no han comprado, que salga igual. ¿Qué JOIN uso?

INNER JOIN
LEFT JOIN (Dame todo lo de la izquierda/usuarios aunque no haya match a la derecha).

9. Funciones de Agregación

Haciendo matemáticas con los datos.

-- ¿Cuántos usuarios hay?
SELECT COUNT(*) FROM usuarios;

-- ¿Cuál es el producto más caro?
SELECT MAX(precio) FROM productos;

-- Promedio de edad
SELECT AVG(edad) FROM usuarios;
Se combina comúnmente con `GROUP BY` para reportes ("Ventas por Mes").

10. Normalización

Es el arte de organizar datos para evitar redundancia.
Regla: No repitas datos. Si guardas la dirección del cliente en cada pedido, y el cliente se muda, tienes que actualizar 100 pedidos.
Mejor guarda la dirección en la tabla Clientes y relaciónala.

11. Índices (Indices)

Imagina buscar en un libro sin índice: tienes que leer hoja por hoja (Full Table Scan). Lento.
Un índice en la columna `email` crea una estructura de árbol interna que permite encontrar "juan@gmail.com" en milisegundos, incluso entre millones de filas.
Pero cuidado: los índices ocupan espacio y hacen que escribir datos sea un poco más lento.

Datos Dominados

SQL es una habilidad eterna. Ha funcionado igual por 40 años y seguirá funcionando.

Ahora tienes el poder de persistir la información. Eres un arquitecto de datos.