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`).
Evaluación 1: Conceptos
¿Qué es un 'Schema'?
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?
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?
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.