Tema
¿Qué es una base de datos?
Antes de escribir tu primera consulta necesitas entender qué problema resuelven las bases de datos y qué piezas intervienen. En esta lección verás qué es una base de datos, qué es un SGBD, la diferencia entre bases relacionales y NoSQL, y cómo empezar a practicar hoy mismo sin instalar nada.
Concepto
Una base de datos es un archivero organizado
Imagina la papelería de tu colonia. Al principio el dueño anota las ventas en un cuaderno. Funciona… hasta que tiene 3 sucursales, 2,000 productos y le preguntas: "¿cuántas libretas vendiste en marzo en la sucursal centro?". Con un cuaderno, responder eso toma horas.
Una base de datos (BD) es una colección de datos organizada para que puedas guardarlos, encontrarlos y modificarlos de forma rápida y confiable. En vez de páginas sueltas, la información vive en estructuras bien definidas (tablas, documentos…) y puedes preguntarle cosas en segundos.
¿Y por qué no usar Excel?
Una hoja de cálculo se parece a una tabla, pero se queda corta cuando el proyecto crece:
| Problema | Hoja de cálculo | Base de datos |
|---|---|---|
| Muchos usuarios a la vez | Conflictos, archivos "copia (2).xlsx" | Miles de conexiones simultáneas |
| Millones de registros | Se vuelve lenta o no abre | Diseñada para eso |
| Reglas (un email único, precio positivo) | Fáciles de romper | Se garantizan con restricciones |
| Relacionar datos (cliente → pedidos) | Fórmulas frágiles | Claves y JOINs |
| Seguridad y permisos | Todo o nada | Permisos por usuario y tabla |
| Acceso desde una app web | Complicado | Es su función principal |
SGBD: el programa que administra la base de datos
La base de datos son los datos. El programa que los guarda en disco, atiende las consultas, controla permisos y evita que se corrompan es el SGBD (Sistema Gestor de Bases de Datos, en inglés DBMS).
txt
Tu app (PHP, Node, Laravel...) Tú, desde una terminal
│ │
└──────────── consultas SQL ───────────┘
│
┌────────▼────────┐
│ SGBD │ ← MySQL, PostgreSQL, SQLite...
│ (servidor de BD)│
└────────┬────────┘
│ lee / escribe
┌────────▼────────┐
│ Archivos en disco│ ← tus datos
└─────────────────┘SGBD populares:
| SGBD | Tipo | Dónde lo verás |
|---|---|---|
| MySQL / MariaDB | Relacional | Hosting compartido, WordPress, Laravel, PHP |
| PostgreSQL | Relacional | Apps modernas, Supabase, Django, Node |
| SQLite | Relacional (archivo) | Apps móviles, prototipos, navegadores |
| SQL Server | Relacional | Empresas con tecnología Microsoft |
| Oracle | Relacional | Bancos y corporativos grandes |
| MongoDB | NoSQL (documentos) | Apps con datos flexibles, Node.js |
| Redis | NoSQL (clave-valor) | Caché, sesiones, colas |
Bases de datos relacionales
Una base de datos relacional organiza la información en tablas (como hojas de cálculo con reglas estrictas) que se relacionan entre sí mediante claves. Por ejemplo, la tabla pedidos guarda el id del cliente en vez de repetir su nombre y correo en cada pedido.
txt
clientes pedidos
┌────┬─────────────┐ ┌────┬────────────┬────────────┐
│ id │ nombre │ │ id │ cliente_id │ fecha │
├────┼─────────────┤ ├────┼────────────┼────────────┤
│ 1 │ Ana López │◄────────────│ 1 │ 1 │ 2024-05-02 │
│ 2 │ Carlos Ruiz │◄──────┐ │ 3 │ 1 │ 2024-06-01 │
└────┴─────────────┘ └─────│ 2 │ 2 │ 2024-05-10 │
└────┴────────────┴────────────┘Para hablar con ellas se usa SQL.
Bases de datos NoSQL
NoSQL ("not only SQL") agrupa a los sistemas que no usan tablas relacionales. El más conocido es MongoDB, que guarda documentos parecidos a JSON:
json
{
"_id": 1,
"nombre": "Ana López",
"pedidos": [
{ "fecha": "2024-05-02", "total": 1597.00 },
{ "fecha": "2024-06-01", "total": 3499.00 }
]
}¿Relacional o NoSQL?
| Criterio | Relacional (SQL) | NoSQL (p. ej. MongoDB) |
|---|---|---|
| Estructura | Esquema fijo: columnas y tipos definidos | Flexible: cada documento puede variar |
| Relaciones | Excelentes (JOINs, claves foráneas) | Se embeben datos o se referencian a mano |
| Consistencia | Transacciones ACID muy maduras | Depende del sistema (Mongo ya tiene transacciones) |
| Escala | Vertical y réplicas de lectura | Pensado para escalar horizontalmente |
| Ideal para | Tiendas, ERP, finanzas, escuelas, casi todo | Catálogos muy variables, logs, tiempo real |
Regla práctica
Si no tienes una razón clara para usar NoSQL, usa una base de datos relacional. La gran mayoría de proyectos para clientes (tiendas, reservas, inventarios, sistemas escolares) encajan perfecto en tablas. Cuando quieras explorar la otra opción, tienes el curso de MongoDB.
SQL: el idioma de las bases relacionales
SQL es un lenguaje declarativo: dices qué quieres, no cómo obtenerlo. El SGBD decide la mejor forma de buscarlo.
sql
-- "Dame el nombre y la ciudad de los clientes de Monterrey"
SELECT nombre, ciudad
FROM clientes
WHERE ciudad = 'Monterrey';Las instrucciones de SQL se agrupan en familias:
| Familia | Significado | Comandos | Para qué |
|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP | Definir la estructura |
| DML | Data Manipulation Language | INSERT, UPDATE, DELETE | Modificar datos |
| DQL | Data Query Language | SELECT | Consultar datos |
| DCL | Data Control Language | GRANT, REVOKE | Permisos |
| TCL | Transaction Control | BEGIN, COMMIT, ROLLBACK | Transacciones |
Cada SGBD tiene su "dialecto" (pequeñas diferencias), pero el 90 % de lo que aprenderás funciona igual en todos. Cuando haya diferencias importantes te lo indicaremos.
Ejemplo
Este es un adelanto de lo que construirás en el curso. Puedes copiarlo y ejecutarlo en cualquier herramienta de las que verás abajo:
sql
-- 1. Crear una tabla
CREATE TABLE clientes (
id INT PRIMARY KEY, -- identificador único
nombre VARCHAR(100) NOT NULL, -- texto obligatorio
ciudad VARCHAR(80) -- texto opcional
);
-- 2. Guardar datos
INSERT INTO clientes (id, nombre, ciudad) VALUES
(1, 'Ana López', 'Ciudad de México'),
(2, 'Carlos Ruiz', 'Guadalajara'),
(3, 'María Pérez', 'Monterrey');
-- 3. Consultar
SELECT nombre FROM clientes WHERE ciudad = 'Guadalajara';Resultado:
| nombre |
|---|
| Carlos Ruiz |
Cómo practicar
Tienes tres caminos, de menor a mayor esfuerzo:
1. En el navegador (cero instalación)
- DB Fiddle (
db-fiddle.com): eliges MySQL, PostgreSQL o SQLite, pegas tu script y ejecutas. - SQLite Online (
sqliteonline.com): rápido para pruebas. - OneCompiler o Programiz SQL: editores sencillos.
Ideal para las primeras lecciones.
2. SQLite en tu computadora
SQLite es una base de datos en un solo archivo. Descarga el programa sqlite3 o la app gráfica DB Browser for SQLite:
bash
# Crear (o abrir) una base de datos llamada tienda.db
sqlite3 tienda.db
# Dentro de sqlite3:
# .tables → lista las tablas
# .headers on → muestra nombres de columnas
# .mode column → formato de tabla
# .quit → salir3. Un servidor real: MySQL o PostgreSQL
Es lo que usarás en proyectos de clientes. Tienes guías completas de instalación en MySQL y PostgreSQL. Con Docker, por ejemplo, levantas un MySQL en un minuto:
bash
docker run --name mysql-curso -e MYSQL_ROOT_PASSWORD=secreto -p 3306:3306 -d mysql:8.4
docker exec -it mysql-curso mysql -u root -pBuena práctica
Guarda tus scripts en archivos .sql dentro de una carpeta del curso (por ejemplo curso-sql/04-crear-tablas.sql). Así podrás reconstruir tu base de datos en segundos y versionarla con Git.
Error común
Confundir base de datos con SGBD. "Instalé MySQL" significa que instalaste el gestor; dentro de él después creas una o varias bases de datos (tienda, escuela, blog...).
Casos de uso reales
- Tienda en línea: productos, inventario, clientes, pedidos, pagos.
- Sistema escolar: alumnos, materias, grupos, calificaciones.
- Clínica: pacientes, citas, médicos, historiales.
- Blog o CMS (WordPress): entradas, usuarios, comentarios, categorías.
- App de reservas: habitaciones, fechas, huéspedes, pagos.
En todos ellos hay entidades (cosas) que se relacionan entre sí: justo lo que las bases relacionales hacen mejor.
Ejercicios
- Explica con tus palabras la diferencia entre una base de datos y un SGBD.
- Para cada proyecto, ¿usarías relacional o NoSQL? a) Sistema de nómina. b) Registro de eventos (logs) de millones de sensores con campos que cambian. c) Tienda en línea de ropa.
- Clasifica estos comandos en DDL, DML, DQL o DCL:
SELECT,CREATE TABLE,GRANT,DELETE,ALTER TABLE,INSERT. - Entra a DB Fiddle o SQLite Online, ejecuta el script del ejemplo y agrega un cuarto cliente de tu ciudad. Después consulta todos los clientes.
Ver solución
- La base de datos es el conjunto organizado de datos (por ejemplo,
tienda). El SGBD es el software que la administra, guarda en disco y responde consultas (MySQL, PostgreSQL...). - a) Relacional: datos estructurados, cálculos exactos y transacciones. b) NoSQL encaja bien (estructura variable, volumen enorme, escrituras masivas); también podría usarse PostgreSQL con JSONB. c) Relacional: productos, inventario y pedidos están muy relacionados.
- DQL:
SELECT. DDL:CREATE TABLE,ALTER TABLE. DML:DELETE,INSERT. DCL:GRANT.
sql
INSERT INTO clientes (id, nombre, ciudad) VALUES (4, 'Tu Nombre', 'Puebla');
SELECT * FROM clientes;Resumen
- Una base de datos es información organizada para guardarla y consultarla rápido y de forma confiable.
- El SGBD (MySQL, PostgreSQL, SQLite...) es el programa que la administra.
- Las bases relacionales usan tablas relacionadas por claves; las NoSQL usan documentos, pares clave-valor, grafos, etc.
- SQL es el lenguaje declarativo de las bases relacionales: DDL, DML, DQL, DCL y TCL.
- Para practicar basta un sitio como DB Fiddle; para proyectos reales usarás MySQL o PostgreSQL.