📚 Progreso de la sesión 0 / 0 ejercicios
Capítulo 01

¿Qué es una Base de Datos Relacional?

🗄️ Definición con Analogía Real

Imagina que gestionas una biblioteca con miles de libros. Si los guardas todos en una sola hoja de Excel con columnas "Título, Autor, Email_Autor, País_Autor, Género, Nombre_Lector, Email_Lector…" cada vez que un autor cambia su email, ¿tienes que editar mil filas? Exacto — eso se llama anomalía de actualización.

🏛️
Una Base de Datos Relacional (RDBMS) es como una biblioteca perfectamente organizada en salas separadas por categoría: una sala de Autores, otra de Libros, otra de Lectores. Cada sala tiene un número de estante único (Primary Key) y las salas se comunican por ese número (Foreign Key) sin duplicar información.

📋 Sin Base de Datos (Excel)

⚠️ Tabla Caótica
LibroAutorEmail AutorLectorEmail Lector
1984Orwellorwell@old.comJordyj@mail.com
1984Orwellorwell@old.comAnaa@mail.com
DuneHerberth@sci.comJordyj@mail.com

⚠️ El email de Orwell está duplicado 2 veces. Cambiar = error garantizado.

✅ Con Base de Datos Relacional

✓ Tabla Autores
id (PK)NombreEmail
1Orwellorwell@new.com
2Herberth@sci.com
✓ Tabla Libros
id (PK)Títuloautor_id (FK)
1019841 →
11Dune2 →

✅ Si Orwell cambia email: editas 1 sola fila.

1
¿Cuál es la PRINCIPAL ventaja de separar datos en múltiples tablas?
Capítulo 02

Llaves: PK, FK y la Integridad Referencial

🔑 Primary Key (PK) — La Identidad Única

Cada fila de una tabla necesita un identificador inconfundible, irrepetible y siempre presente. La PK es ese identificador. Si dos filas tuvieran el mismo PK, el sistema arrojaría un error inmediato.

Tabla Clientes
id (PK) PKnombreemail
1Jordyj@mail.com
2Anaa@mail.com
3Luisl@mail.com

✅ Cada id es único. WHERE id = 2 devolverá SIEMPRE solo a "Ana".

⚠️ Tabla Clientes ROTA
idnombreemail
2Anaa@mail.com
2Pedrop@mail.com
3Luisl@mail.com

💥 WHERE id = 2 devuelve 2 filas. ¿Cuál es Ana? El sistema no sabe.

  • SERIAL / AUTO_INCREMENT: El número aumenta solo (1, 2, 3…). El más común.
  • UUID: Código hexadecimal generado aleatoriamente. Ideal para sistemas distribuidos. 550e8400-e29b-41d4...
  • Natural Key: Dato del mundo real que ya es único (DNI, ISBN, CURP). Arriesgado porque puede cambiar.
  • Composite Key: Combinación de 2 o más columnas que juntas son únicas. Usado en tablas intermedias (Many-to-Many).

🔗 Foreign Key (FK) — El Puente Entre Tablas

Una FK es una columna en la Tabla B que contiene el valor de la PK de la Tabla A. Es el mecanismo que une las tablas y que el motor usa para garantizar integridad referencial: no puedes referenciar un registro que no existe.

Tabla Pedidos
id (PK)productocliente_id (FK)
100Laptop2 →
101Mouse3 →
102Teclado2 →
Tabla Clientes
id (PK)nombre
1Jordy
2Ana
3Luis

👆 Haz clic en un pedido para ver a quién apunta la FK

-- Declarar una FK al crear la tabla CREATE TABLE pedidos ( id SERIAL PRIMARY KEY, producto VARCHAR(100), cliente_id INT NOT NULL, FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE -- Si se borra el cliente, se borran sus pedidos );
2
Completa el código SQL — Declara la FK correctamente

Tienes una tabla facturas y necesitas referenciar a la tabla clientes. Llena los espacios:

CREATE TABLE facturas (
  id          PRIMARY KEY,
  monto     DECIMAL(10,2),
  cliente_id NOT NULL,
   (cliente_id)
    REFERENCES (id)
);
Capítulo 03

Transacciones ACID — La Garantía de Fiabilidad

🛡️ Las 4 Propiedades ACID

Cada operación bancaria, compra en línea o registro médico depende de estas 4 propiedades. Haz clic en cada letra para ver el escenario real:

A
Atomicidad

Todo o Nada

Escenario: Transfieres $500 de tu cuenta a la de Ana.

La operación tiene 2 partes: (1) Restar $500 a tu cuenta, (2) Sumar $500 a Ana.

Si el servidor se cae entre el paso 1 y 2, la Atomicidad hace ROLLBACK automático: tu saldo regresa, el dinero no desaparece en el limbo.
C
Consistencia

Reglas siempre válidas

Escenario: Tu cuenta no puede quedar en negativo (regla de negocio).

Si intentas transferir $1000 pero solo tienes $200, la Consistencia rechaza la transacción antes de ejecutarla. El estado de la BD siempre cumple las restricciones definidas.
I
Aislamiento

Transacciones independientes

Escenario: Tú y Ana compran el último boleto de avión al mismo tiempo.

El Aislamiento serializa las transacciones. Una ejecuta primero y la otra recibe el boleto ya vendido. Sin aislamiento, ambos comprarían el mismo asiento.
D
Durabilidad

Los cambios son permanentes

Escenario: El COMMIT se ejecuta y confirma tu transferencia.

Acto seguido se va la luz. Cuando el servidor vuelve, la Durabilidad garantiza que tu transferencia sí quedó grabada, porque fue escrita en disco antes de confirmar. El log de transacciones es el seguro.
3
Un banco ejecuta la transferencia, descuenta la cuenta origen pero el servidor colapsa antes de acreditar al destino. ¿Qué propiedad ACID salvó el dinero?
Capítulo 04

El Lenguaje SQL — DDL, DML y JOINs

⚙️ DDL vs DML vs DCL

Data Definition Language — Construye y modifica la estructura vacía de la BD.

-- Crear tabla CREATE TABLE productos ( id SERIAL PRIMARY KEY, nombre VARCHAR(100) NOT NULL, precio DECIMAL(10,2) DEFAULT 0, activo BOOLEAN DEFAULT TRUE ); -- Agregar columna ALTER TABLE productos ADD COLUMN stock INT DEFAULT 0; -- Eliminar tabla (¡IRREVERSIBLE!) DROP TABLE productos;

Data Manipulation Language — Lee, inserta, actualiza y borra registros dentro de tablas existentes.

-- Insertar un registro INSERT INTO productos (nombre, precio) VALUES ('Laptop Gamer', 1200.00); -- Leer con filtro y orden SELECT nombre, precio FROM productos WHERE precio > 100 AND activo = TRUE ORDER BY precio DESC LIMIT 10; -- Actualizar UPDATE productos SET precio = 999.00 WHERE id = 1; -- Borrar con cuidado (sin WHERE = borra TODO) DELETE FROM productos WHERE id = 5;

DCL — Data Control Language: Gestión de permisos.

-- Dar permiso de lectura GRANT SELECT ON clientes TO usuario_reportes; -- Revocar permiso REVOKE ALL ON clientes FROM usuario_antiguo;

TCL — Transaction Control: Confirma o deshace cambios.

BEGIN; -- Inicia transacción UPDATE cuentas SET saldo = saldo - 500 WHERE id = 1; COMMIT; -- Confirma en disco -- Si algo falla: ROLLBACK; -- Revierte todo

🔗 JOINs — Unir Tablas

El corazón del modelo relacional. Selecciona el tipo de JOIN y visualiza qué datos incluye:

Tabla A
Pedidos
Tabla B
Clientes

Resultado del JOIN (con datos de ejemplo):

Resultado
4
Tienes una tabla empleados y una tabla departamentos. Algunos empleados NO tienen departamento asignado. ¿Qué JOIN devuelve TODOS los empleados, tengan o no departamento?
Capítulo 05

Tipos de Datos — Elegir Correctamente

📦 Tipos Esenciales y sus Usos

Cada columna exige un tipo de dato específico. Elegir mal puede costar rendimiento o corrupción de datos:

Tipo
Ejemplo de valor
Cuándo usarlo
INT / BIGINT
42  |  9999999999
IDs, cantidades, contadores
VARCHAR(n)
'Jordy García'
Nombres, emails, textos cortos
TEXT
'Descripción larga...'
Artículos, comentarios, HTML
BOOLEAN
TRUE / FALSE
Flags: activo, pagado, verificado
DECIMAL(p,s)
1234.56
Dinero, precios, impuestos
FLOAT / REAL
3.14159...
Coordenadas, medidas científicas
DATE
2024-03-15
Fechas sin hora (cumpleaños)
TIMESTAMPTZ
2024-03-15 14:30:00+05
Registros con zona horaria
UUID
550e8400-e29b-41d4...
IDs distribuidos y globales
JSONB
{"color":"rojo","talla":"M"}
Atributos variables por fila (PostgreSQL)
⚠️ Nunca uses FLOAT para dinero. Los números flotantes tienen errores de precisión binaria: 0.1 + 0.2 = 0.30000000000000004. Usa siempre DECIMAL(10,2) para valores monetarios.
5
Arrastra el tipo de dato correcto a cada campo

Diseña la tabla empleados eligiendo el tipo adecuado para cada columna:

Tipos disponibles (arrastra uno a cada casilla):

SERIAL VARCHAR(100) DECIMAL(10,2) BOOLEAN DATE INT

Tabla empleados:

Tabla Empleados
CampoTipo de Dato
id (PK)
nombre
salario
activo
fecha_ingreso
Capítulo 06

Ejercicio Final — Diseña una Mini Base de Datos

🏆 Desafío: Tienda Online

Una tienda online necesita registrar: clientes, productos y órdenes de compra. Cada orden puede tener varios productos. Responde las preguntas siguientes:

🛒
Reglas de negocio:
• Un cliente puede hacer muchas órdenes.
• Una orden puede incluir varios productos.
• Un producto puede aparecer en muchas órdenes.
• Necesitamos guardar la cantidad de cada producto por orden.
6
¿Cuántas tablas mínimas necesita este sistema?
7
Completa el SELECT que obtiene todas las órdenes de un cliente llamado "Ana"
SELECT o.id, o.fecha, o.total
FROM o
clientes c
  ON o.cliente_id = c.
WHERE c.nombre = ;
🎓

Tu Puntaje Actual

0 / 7

Continúa practicando en los módulos SQL Playground, ERD Builder y Normalización.