¿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.
📋 Sin Base de Datos (Excel)
| Libro | Autor | Email Autor | Lector | Email Lector |
|---|---|---|---|---|
| 1984 | Orwell | orwell@old.com | Jordy | j@mail.com |
| 1984 | Orwell | orwell@old.com | Ana | a@mail.com |
| Dune | Herbert | h@sci.com | Jordy | j@mail.com |
⚠️ El email de Orwell está duplicado 2 veces. Cambiar = error garantizado.
✅ Con Base de Datos Relacional
| id (PK) | Nombre | |
|---|---|---|
| 1 | Orwell | orwell@new.com |
| 2 | Herbert | h@sci.com |
| id (PK) | Título | autor_id (FK) |
|---|---|---|
| 10 | 1984 | 1 → |
| 11 | Dune | 2 → |
✅ Si Orwell cambia email: editas 1 sola fila.
¿Cuál es la PRINCIPAL ventaja de separar datos en múltiples tablas?
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.
| id (PK) PK | nombre | |
|---|---|---|
| 1 | Jordy | j@mail.com |
| 2 | Ana | a@mail.com |
| 3 | Luis | l@mail.com |
✅ Cada id es único. WHERE id = 2 devolverá SIEMPRE solo a "Ana".
| id | nombre | |
|---|---|---|
| 2 | Ana | a@mail.com |
| 2 | Pedro | p@mail.com |
| 3 | Luis | l@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.
| id (PK) | producto | cliente_id (FK) |
|---|---|---|
| 100 | Laptop | 2 → |
| 101 | Mouse | 3 → |
| 102 | Teclado | 2 → |
| id (PK) | nombre |
|---|---|
| 1 | Jordy |
| 2 | Ana |
| 3 | Luis |
👆 Haz clic en un pedido para ver a quién apunta la FK
Completa el código SQL — Declara la FK correctamente
Tienes una tabla facturas y necesitas referenciar a la tabla clientes. Llena los espacios:
id PRIMARY KEY,
monto DECIMAL(10,2),
cliente_id NOT NULL,
(cliente_id)
REFERENCES (id)
);
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:
Atomicidad
Todo o Nada
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.
Consistencia
Reglas siempre válidas
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.
Aislamiento
Transacciones independientes
El Aislamiento serializa las transacciones. Una ejecuta primero y la otra recibe el boleto ya vendido. Sin aislamiento, ambos comprarían el mismo asiento.
Durabilidad
Los cambios son permanentes
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.
Un banco ejecuta la transferencia, descuenta la cuenta origen pero el servidor colapsa antes de acreditar al destino. ¿Qué propiedad ACID salvó el dinero?
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.
Data Manipulation Language — Lee, inserta, actualiza y borra registros dentro de tablas existentes.
DCL — Data Control Language: Gestión de permisos.
TCL — Transaction Control: Confirma o deshace cambios.
🔗 JOINs — Unir Tablas
El corazón del modelo relacional. Selecciona el tipo de JOIN y visualiza qué datos incluye:
Pedidos
Clientes
Resultado del JOIN (con datos de ejemplo):
Tienes una tabla empleados y una tabla departamentos. Algunos empleados NO tienen departamento asignado. ¿Qué JOIN devuelve TODOS los empleados, tengan o no departamento?
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:
0.1 + 0.2 = 0.30000000000000004. Usa siempre DECIMAL(10,2) para valores monetarios.
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):
Tabla empleados:
| Campo | Tipo de Dato |
|---|---|
| id (PK) | |
| nombre | |
| salario | |
| activo | |
| fecha_ingreso |
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:
• 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.
¿Cuántas tablas mínimas necesita este sistema?
Completa el SELECT que obtiene todas las órdenes de un cliente llamado "Ana"
FROM o
clientes c
ON o.cliente_id = c.
WHERE c.nombre = ;
Tu Puntaje Actual
Continúa practicando en los módulos SQL Playground, ERD Builder y Normalización.