Base de Datos

img

¿Qué es Base de Datos?

Una base de datos es un sistema que almacena información de manera estructurada para que pueda ser consultada, actualizada y administrada fácilmente.
Su objetivo principal es centralizar datos y permitir que múltiples usuarios o sistemas accedan a ellos de forma segura y coherente.

Ejemplo: Una tienda en línea utiliza una base de datos para guardar información de usuarios, productos, pedidos y pagos.

2. ¿Para qué se usa?

Las bases de datos se usan para gestionar información crítica en diferentes entornos.
Son especialmente útiles cuando se requiere:

Contextos comunes:

3. ¿Qué puedo construir con Base de Datos?

Con bases de datos se pueden construir aplicaciones que gestionen información dinámica.
Algunos ejemplos prácticos:

4. ¿Cuándo es más conveniente usarlo?

Es recomendable usar una base de datos cuando:

Alternativas que podrías considerar:

Regla general:
Si tu aplicación depende de datos que deben perdurar y mantenerse organizados, utiliza una base de datos.

Buenas prácticas recomendadas

Para trabajar con bases de datos de forma eficiente y segura, se recomienda seguir estas buenas prácticas:

Diseño

Seguridad

Rendimiento

Mantenimiento

Patrones de desarrollo


Resumen rápido

✅ Fortalezas principales:

⚠️ Debilidades principales:

🛠️ Cuándo usarlo:

🚫 Cuándo evitarlo:


Temas


Conceptos relacionados

Antes de trabajar con bases de datos, es importante conocer ciertos conceptos que te permitirán comprender mejor su funcionamiento:

Dato

Unidad mínima de información almacenada en la base de datos.

Registro (Row)

Conjunto de datos relacionados que representan una entidad, como un usuario o un producto.

Tabla (Table)

Estructura que organiza registros en filas y columnas (modelo relacional).

Campo (Column)

Atributo o propiedad de una tabla, como nombre, precio o email.

Clave primaria (PK)

Identificador único para cada registro en una tabla.

Clave foránea (FK)

Campo que establece una relación entre dos tablas.

Relación

Conexión lógica entre tablas para vincular datos.

Query (Consulta)

Instrucción para recuperar, insertar, actualizar o eliminar datos.

Transacción

Conjunto de operaciones que se ejecutan como una unidad, asegurando integridad de datos.

Normalización

Proceso de organizar datos para evitar duplicidad y mejorar la consistencia.

Índice (Index)

Estructura que acelera la búsqueda y consulta de información.

Backup

Copia de seguridad de los datos para prevenir pérdidas.

Motor de Base de Datos (DBMS

Software que gestiona la base de datos, como MySQL, PostgreSQL o MongoDB.

🔼 temas


Herramientas recomendadas

Estas son herramientas fundamentales para desarrollar, administrar y optimizar bases de datos. Se dividen según su uso:

1. Motores de Base de Datos (DBMS)

Son el corazón de la base de datos. Cada uno tiene características únicas.

Tipo Ejemplos Uso principal
SQL (Relacional) MySQL, PostgreSQL, MariaDB Datos estructurados y relaciones complejas
NoSQL (No Relacional) MongoDB, Redis, Cassandra Datos flexibles, documentos, alto rendimiento
En memoria Redis, Memcached Caché y datos temporales de rápido acceso

2. Clientes y Consolas

Para interactuar directamente con la base de datos:

3. Herramientas de Monitoreo y Optimización

Sirven para analizar el rendimiento y mantener la base de datos en buen estado.

4. Gestión de Migraciones y Modelado

Facilitan el control de cambios en la estructura de la base de datos:

5. Backup y Recuperación

Herramientas para copias de seguridad y restauración:

6. Extensiones y Plugins para VSCode

Facilitan la integración del desarrollo con la base de datos:


Snippets rápidos

Fragmentos de código que se usan con frecuencia en proyectos de bases de datos:

1. Conexión a MySQL (Node.js con mysql2)

import mysql from "mysql2/promise";

const db = await mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "123456",
  database: "mi_base",
});

console.log("Conectado a la base de datos");

2. Conexión a MongoDB (Node.js con mongoose)

import mongoose from "mongoose";

mongoose
  .connect("mongodb://localhost:27017/mi_base")
  .then(() => console.log("Conexión exitosa a MongoDB"))
  .catch((err) => console.error("Error de conexión", err));

3. Crear Modelo con Mongoose

const Usuario = mongoose.model("Usuario", {
  nombre: String,
  email: { type: String, unique: true },
  activo: { type: Boolean, default: true },
});

4. Insertar Registro SQL

INSERT INTO usuarios (nombre, email)
VALUES ('Ana López', 'ana@example.com');

5. Consulta Básica con Filtro SQL

SELECT nombre, email FROM usuarios WHERE activo = 1;

6. Búsqueda de Documento en MongoDB

const usuario = await Usuario.findOne({ email: "ana@example.com" });
console.log(usuario);

🔼 temas


Comandos

Lista de comandos clave resumidos con ejemplos cortos.

Gestión de Bases de Datos

CREATE DATABASE mi_base;   -- Crear base de datos
SHOW DATABASES;            -- Listar bases de datos
USE mi_base;               -- Seleccionar base de datos
DROP DATABASE mi_base;     -- Eliminar base de datos

Tablas

CREATE TABLE productos (  -- Crear tabla
  id INT PRIMARY KEY AUTO_INCREMENT,
  nombre VARCHAR(100),
  precio DECIMAL(10,2)
);

SHOW TABLES;               -- Listar tablas
DESCRIBE productos;        -- Ver estructura de la tabla
DROP TABLE productos;      -- Eliminar tabla

CRUD Básico (Create, Read, Update, Delete)

-- Crear
INSERT INTO productos (nombre, precio) VALUES ('Teclado', 50.00);

-- Leer
SELECT * FROM productos;
SELECT nombre, precio FROM productos WHERE precio > 20;

-- Actualizar
UPDATE productos SET precio = 45.00 WHERE id = 1;

-- Eliminar
DELETE FROM productos WHERE id = 1;

Relaciones y Claves

ALTER TABLE pedidos
ADD FOREIGN KEY (producto_id) REFERENCES productos(id);  -- Clave foránea

CREATE INDEX idx_precio ON productos(precio);            -- Crear índice
DROP INDEX idx_precio ON productos;                      -- Eliminar índice

Transacciones

START TRANSACTION;
UPDATE productos SET precio = precio - 5 WHERE id = 1;
UPDATE productos SET precio = precio + 5 WHERE id = 2;
COMMIT;   -- Confirmar cambios
ROLLBACK; -- Deshacer cambios

Backup y Restauración

# Exportar base de datos MySQL
mysqldump -u root -p mi_base > backup.sql

# Importar base de datos MySQL
mysql -u root -p mi_base < backup.sql

Comandos Básicos de MongoDB (CLI)

show dbs                     # Listar bases de datos
use mi_base                  # Seleccionar base
db.createCollection("users") # Crear colección
db.users.insertOne({nombre: "Ana", edad: 30})  # Insertar documento
db.users.find()              # Consultar documentos
db.users.updateOne({nombre: "Ana"}, {$set: {edad: 31}})  # Actualizar
db.users.deleteOne({nombre: "Ana"})  # Eliminar

🔼 temas


Conceptos Claves

🟢 Básico

1. Conceptos fundamentales

Diferencia entre base de datos relacional y no relacional:

Base de datos relacional (SQL):

Base de datos no relacional (NoSQL):

Resumen:
SQL → Datos estructurados y relaciones complejas.
NoSQL → Datos flexibles y escalabilidad horizontal.

2. Normalización

La normalización es el proceso de organizar datos para minimizar la redundancia y mejorar la integridad.

Formas normales:

1FN (Primera Forma Normal):

2FN (Segunda Forma Normal):

3FN (Tercera Forma Normal):

Importancia:
Reduce redundancia, evita inconsistencias y mejora el rendimiento.

3. Tipos de relaciones

Uno a uno (1:1):

usuarios.id = perfiles.usuario_id

Uno a muchos (1:N):

clientes.id = pedidos.cliente_id

Muchos a muchos (N:M):

estudiante_curso (estudiante_id, curso_id)

4. Tipos de datos (CHAR vs VARCHAR)

CHAR(n):

VARCHAR(n):

Regla general:
Usa CHAR para valores de longitud fija y VARCHAR para texto variable.

5. Consultas simples

Consulta SQL:

SELECT nombre, correo
FROM clientes
WHERE estado = 'Activo'
ORDER BY nombre ASC;

🟡 Intermedio

6. Índices

Un índice es una estructura que acelera la búsqueda de datos en una tabla, similar a un índice en un libro.

Ventajas:

Desventajas:

Consejo:
Usa índices en columnas que se consulten frecuentemente, pero no abuses de ellos.

7. Transacciones y Propiedades ACID

Las transacciones son conjuntos de operaciones que se ejecutan como una sola unidad lógica.

Propiedades ACID:

Ejemplo en operación bancaria:

8. Joins

Diferencias:

Consulta: Pedidos con clientes (incluyendo clientes faltantes):

SELECT p.id_pedido, p.fecha, c.nombre
FROM pedidos p
LEFT JOIN clientes c ON p.cliente_id = c.id;

9. Consultas anidadas

Empleados con salario superior al promedio:

SELECT nombre
FROM empleados
WHERE salario > (SELECT AVG(salario) FROM empleados);

10. Modelado (Sistema de vuelos)

Criterios a considerar:


🔴 Avanzado

11. Optimización de rendimiento

Pasos para diagnosticar un reporte lento:

  1. Analizar la consulta con EXPLAIN para ver cómo se ejecuta.
  2. Revisar si existen índices adecuados.
  3. Verificar el hardware y recursos disponibles.
  4. Reducir datos innecesarios (uso de LIMIT, paginación).
  5. Optimizar joins y subconsultas.
  6. Considerar caché o materialización de vistas.

12. Sharding vs Replicación

Sharding:

Replicación:

13. Integridad referencial

Garantiza que las relaciones entre tablas sean coherentes.

Ejemplo: Clientes y Pedidos

CREATE TABLE clientes (
  id INT PRIMARY KEY,
  nombre VARCHAR(100)
);

CREATE TABLE pedidos (
  id INT PRIMARY KEY,
  cliente_id INT,
  FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);

Así, no se puede crear un pedido con un cliente inexistente.

14. Gestión de concurrencia

Problemas comunes:

Estrategias:

15. Migraciones y versiones

Buenas prácticas para manejar cambios en producción:

Regla de oro: Nunca modificar una base de datos en producción sin respaldo y sin pruebas previas.

🔼 temas