Biombo Digital de Bases de Datos
Conceptos Básicos
¿Qué es una Base de Datos?
Una base de datos es un conjunto de datos organizados y estructurados que se almacenan electrónicamente en un sistema informático.
Sistemas Gestores de BD (DBMS)
Software que permite crear, mantener y manipular bases de datos.
MySQL
Sistema open source popular
PostgreSQL
DBMS avanzado open source
Oracle
Sistema empresarial robusto
SQL Server
Solución de Microsoft
Componentes Principales
Tablas
Estructuras que almacenan datos en filas y columnas
Campos (Columnas)
Atributos o características de los datos
Registros (Filas)
Conjuntos de datos relacionados
Claves
Identificadores únicos y relaciones
Ejemplo de Tabla
| ID_Cliente | Nombre | Teléfono | Ciudad | |
|---|---|---|---|---|
| 101 | Ana García | ana@email.com | 555-1234 | Madrid |
| 102 | Carlos López | carlos@email.com | 555-5678 | Barcelona |
| 103 | María Rodríguez | maria@email.com | 555-9012 | Valencia |
Normalización de Bases de Datos
¿Qué es la Normalización?
Proceso de organizar datos en una base de datos para reducir la redundancia y mejorar la integridad de los datos.
Primera Forma Normal (1NF)
Eliminar grupos repetitivos y asegurar que cada columna contenga valores atómicos (indivisibles).
CREATE TABLE Pedidos (
ID INT PRIMARY KEY,
ClienteID INT,
Productos VARCHAR(255) -- Múltiples valores separados por coma
);
-- Después de 1NF
CREATE TABLE Pedidos (
ID INT PRIMARY KEY,
ClienteID INT
);
CREATE TABLE PedidoProductos (
PedidoID INT,
ProductoID INT,
PRIMARY KEY (PedidoID, ProductoID)
);
Segunda Forma Normal (2NF)
Cumplir con 1NF y eliminar dependencias parciales (todos los atributos no clave deben depender de toda la clave primaria).
CREATE TABLE Pedidos (
PedidoID INT,
ProductoID INT,
NombreProducto VARCHAR(100), -- Depende solo de ProductoID
Cantidad INT,
PRIMARY KEY (PedidoID, ProductoID)
);
-- Solución: separar en dos tablas
CREATE TABLE PedidosDetalle (
PedidoID INT,
ProductoID INT,
Cantidad INT,
PRIMARY KEY (PedidoID, ProductoID)
);
CREATE TABLE Productos (
ProductoID INT PRIMARY KEY,
NombreProducto VARCHAR(100)
);
Tercera Forma Normal (3NF)
Cumplir con 2NF y eliminar dependencias transitivas (los atributos no clave no deben depender de otros atributos no clave).
CREATE TABLE Empleados (
EmpleadoID INT PRIMARY KEY,
Nombre VARCHAR(100),
DepartamentoID INT,
NombreDepartamento VARCHAR(100) -- Depende de DepartamentoID, no de la clave primaria
);
-- Solución: separar en dos tablas
CREATE TABLE Empleados (
EmpleadoID INT PRIMARY KEY,
Nombre VARCHAR(100),
DepartamentoID INT
);
CREATE TABLE Departamentos (
DepartamentoID INT PRIMARY KEY,
NombreDepartamento VARCHAR(100)
);
Forma Normal de Boyce-Codd (BCNF)
Versión más fuerte de 3NF donde cada determinante es una clave candidata.
CREATE TABLE Inscripciones (
EstudianteID INT,
CursoID INT,
ProfesorID INT, -- Suponiendo que cada curso tiene un único profesor
PRIMARY KEY (EstudianteID, CursoID)
);
-- En BCNF, separaríamos la relación Curso-Profesor
CREATE TABLE Inscripciones (
EstudianteID INT,
CursoID INT,
PRIMARY KEY (EstudianteID, CursoID)
);
CREATE TABLE CursosProfesores (
CursoID INT PRIMARY KEY,
ProfesorID INT
);
Modelo Entidad-Relación
Elementos del Modelo E-R
Tipos de Cardinalidad
Ejemplo de Diagrama E-R
Relación "Uno a Muchos" entre Cliente y Pedido
Relación "Muchos a Muchos" entre Estudiante y Curso
Consejos para el Diseño E-R
Buenas Prácticas
- Identificar claramente las entidades principales
- Definir relaciones con cardinalidades apropiadas
- Usar nombres descriptivos para entidades y relaciones
- Evitar atributos multivaluados
Errores Comunes
- Crear relaciones innecesarias
- Ignorar la normalización
- No definir claves primarias adecuadas
- Olvidar las claves foráneas
SQL y Consultas
Lenguaje SQL
SQL (Structured Query Language) es el lenguaje estándar para gestionar bases de datos relacionales.
DDL (Data Definition Language)
DML (Data Manipulation Language)
DCL (Data Control Language)
TCL (Transaction Control Language)
Consultas Básicas
SELECT * FROM Clientes;
-- Seleccionar campos específicos
SELECT Nombre, Email FROM Clientes;
-- Filtrar resultados con WHERE
SELECT * FROM Productos WHERE Precio > 100;
-- Ordenar resultados
SELECT * FROM Productos ORDER BY Nombre ASC;
Consultas con Joins
SELECT Pedidos.ID, Clientes.Nombre
FROM Pedidos
INNER JOIN Clientes ON Pedidos.ClienteID = Clientes.ID;
-- LEFT JOIN (todos los de izquierda)
SELECT Clientes.Nombre, Pedidos.ID
FROM Clientes
LEFT JOIN Pedidos ON Clientes.ID = Pedidos.ClienteID;
-- RIGHT JOIN (todos los de derecha)
SELECT Pedidos.ID, Clientes.Nombre
FROM Pedidos
RIGHT JOIN Clientes ON Pedidos.ClienteID = Clientes.ID;