Bases de Datos Relacionales (FP Grado Superior)
Este manual cubre el currículo completo de la asignatura de Bases de Datos para ciclos de Desarrollo de Aplicaciones Web (DAW) y Multiplataforma (DAM). Aborda el ciclo de vida de una base de datos: desde el diseño conceptual (modelo E/R) y lógico (normalización), hasta la implementación física mediante SQL estándar.
1. Modelos de Datos y Arquitectura
Una Base de Datos (BD) es un conjunto de datos estructurados y relacionados entre sí. El Sistema de Gestión de Bases de Datos (SGBD o DBMS) es el software que permite a los usuarios interactuar con ella. El modelo predominante en la industria es el Modelo Relacional, propuesto por E.F. Codd en 1970.
1.1. Arquitectura ANSI/SPARC (3 Niveles)
La arquitectura de un SGBD se divide en tres niveles de abstracción para garantizar la independencia de los datos:
- Nivel Interno (Físico): Cómo se almacenan los datos en disco, índices y estructuras de archivos.
- Nivel Conceptual (Lógico): La estructura lógica de la BD: tablas, relaciones y restricciones. Es el nivel del administrador.
- Nivel Externo (Vistas): Lo que ve el usuario final. Subconjuntos del nivel conceptual para garantizar seguridad y simplicidad.
2. Modelo Entidad/Relación (E/R)
El modelo E/R es una herramienta de diseño conceptual. Permite representar la realidad de forma gráfica antes de implementar la base de datos.
2.1. Elementos del Modelo E/R
- Entidad: Objeto o concepto del mundo real con existencia propia (ej. Cliente, Producto). Se representa con un rectángulo.
- Atributo: Característica o propiedad de una entidad (ej. Nombre, Precio). Se representa con un óvalo.
- Relación: Asociación entre entidades (ej. Un cliente realiza un pedido). Se representa con un rombo.
- Cardinalidad: Número de ocurrencias de una entidad que pueden estar asociadas con otra. Las más comunes son 1:1, 1:N y M:N.
Clave Primaria (PK): Atributo (o conjunto) que identifica unívocamente a una entidad. Debe ser única y no nula.
Clave Ajena (FK): Atributo que referencia a la clave primaria de otra entidad, creando el vínculo entre ellas.
2.2. Ejemplo de Esquema E/R
Un cliente realiza múltiples pedidos (1:N). Un pedido contiene múltiples productos y un producto puede estar en múltiples pedidos (M:N).
CLIENTE
id (PK)nombreemailPEDIDO
id (PK)cliente_id (FK)fechaPRODUCTO
id (PK)nombreprecioLas relaciones M:N en el modelo relacional no se pueden implementar directamente; requieren una tabla intermedia o puente (en este caso, detalles_pedido).
3. Normalización (1FN, 2FN, 3FN)
La normalización es un proceso sistemático aplicado al esquema relacional para eliminar redundancias y anomalías de actualización, inserción y borrado. Se basa en las Formas Normales (FN).
3.1. Primera Forma Normal (1FN)
Una tabla está en 1FN si todos sus atributos son atómicos (no divisible) y no hay grupos repetitivos.
Ejemplo incorrecto (No 1FN): Tabla con un campo "productos" que contiene "Auriculares, Ratón, Teclado" en una sola celda. Para cumplir 1FN, se debe crear una fila por cada producto asociado al pedido (usando la tabla puente).
3.2. Segunda Forma Normal (2FN)
Una tabla está en 2FN si está en 1FN y todos sus atributos que no forman parte de la clave principal dependen completamente de toda la clave principal (no de una parte de ella).
Ejemplo incorrecto (No 2FN): En detalles_pedido(pedido_id, producto_id, nombre_producto), el nombre del producto depende solo de producto_id, no de toda la clave compuesta. Se debe mover nombre_producto a la tabla Productos.
3.3. Tercera Forma Normal (3FN)
Una tabla está en 3FN si está en 2FN y no existen dependencias transitivas. Es decir, ningún atributo que no sea clave depende de otro atributo que tampoco es clave.
Ejemplo incorrecto (No 3FN): Empleados(id, nombre, departamento_id, nombre_departamento). nombre_departamento depende de departamento_id, y este de id (transitividad). Solución: Crear tabla Departamentos.
4. Álgebra Relacional
El álgebra relacional es el lenguaje teórico sobre el que se construye SQL. Define un conjunto de operadores que toman relaciones (tablas) como entrada y producen nuevas relaciones como salida.
- Selección (σ - Sigma): Filtra filas. Equivale a
WHEREen SQL. - Proyección (π - Pi): Selecciona columnas. Equivale a
SELECTen SQL. - Reunión Natural (⋈ - Join): Combina dos tablas basándose en una condición de igualdad entre columnas comunes. Equivale a
INNER JOIN. - Unión (∪ - Union): Combina resultados de dos consultas eliminando duplicados.
- Diferencia (-): Devuelve filas de la primera tabla que no están en la segunda.
5. DQL: Lenguaje de Consulta de Datos
El DQL se centra en la recuperación de datos. Su comando fundamental es SELECT.
5.1. Consultas Simples y Filtrado
SELECT nombre, precio, stock
FROM productos
WHERE categoria = 'Audio' AND stock < 50;
5.2. Funciones Agregadas y Agrupamiento
SELECT categoria,
COUNT(*) AS num_productos,
ROUND(AVG(precio), 2) AS precio_medio,
SUM(stock) AS inventario
FROM productos
GROUP BY categoria
ORDER BY inventario DESC;
Teoría Clave: WHERE filtra filas antes de la agregación. HAVING filtra grupos después de GROUP BY.
5.3. Consultas Multitabla (JOINs)
Los JOINs materializan las relaciones del modelo E/R en las consultas.
SELECT c.nombre AS cliente, p.fecha, pr.nombre AS producto, dp.cantidad
FROM pedidos p
JOIN clientes c ON p.cliente_id = c.id
JOIN detalles_pedido dp ON dp.pedido_id = p.id
JOIN productos pr ON dp.producto_id = pr.id
ORDER BY p.fecha DESC LIMIT 5;
5.4. Subconsultas
Consultas anidadas. El resultado de la consulta interna se utiliza como condición en la externa.
SELECT nombre, precio FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos)
ORDER BY precio DESC;
6. DML: Manipulación de Datos
El DML se encarga de la modificación de las filas (tuplas) sin alterar el esquema.
6.1. Inserción (INSERT)
INSERT INTO clientes (nombre, email, pais)
VALUES ('Roberto Alzaga', 'roberto@fp.com', 'España');
6.2. Actualización (UPDATE)
Precaución: Un UPDATE sin WHERE actualizará TODAS las filas de la tabla.
UPDATE productos
SET stock = stock + 10
WHERE nombre = 'Cable USB-C 2m';
6.3. Borrado (DELETE)
DELETE FROM pedidos WHERE estado = 'pendiente';
7. DDL: Definición de Estructuras
El DDL define el esquema de la base de datos. Comprende la creación y modificación de tablas, índices y vistas.
7.1. Creación de Tablas (CREATE TABLE)
Aquí se aplican las restricciones de integridad del modelo relacional.
- PRIMARY KEY: Identificador único.
- FOREIGN KEY ... REFERENCES: Clave ajena. Garantiza integridad referencial.
- CHECK: Regla de validación de dominio.
- NOT NULL / UNIQUE: Obligatoriedad y unicidad.
CREATE TABLE IF NOT EXISTS resenas (
id INTEGER PRIMARY KEY,
producto_id INTEGER,
puntuacion INTEGER CHECK(puntuacion BETWEEN 1 AND 5),
FOREIGN KEY (producto_id) REFERENCES productos(id)
);
7.2. Modificación de Esquema (ALTER TABLE)
Permite añadir (ADD COLUMN) o eliminar (DROP COLUMN) atributos a una tabla ya existente.
ALTER TABLE clientes ADD COLUMN telefono TEXT;
8. Objetos de la Base de Datos
8.1. Vistas (VIEWS)
Las vistas son tablas virtuales derivadas de una consulta SELECT. Se utilizan para:
- Simplificar consultas compleces encapsulándolas en un objeto.
- Implementar el nivel externo ANSI/SPARC, ocultando columnas sensibles a ciertos usuarios.
CREATE VIEW IF NOT EXISTS inventario_bajo AS
SELECT nombre, stock FROM productos WHERE stock < 20;
SELECT * FROM inventario_bajo;
8.2. Índices
Un índice es una estructura de datos (normalmente un B-Tree o Árbol B) que acelera la recuperación de filas a costa de ocupar más espacio en disco y ralentizar las operaciones DML (inserciones/actualizaciones).
CREATE INDEX idx_email ON clientes(email);
9. DCL: Control de Acceso y Seguridad
El DCL gestiona los permisos de los usuarios sobre los objetos de la base de datos. Es vital para la seguridad y la auditoría.
Nota Teórica: SQLite (motor de este navegador) no implementa control de usuarios. En motores como PostgreSQL o Oracle, estos comandos se ejecutan por el administrador (DBA).
-- Otorgar permiso de lectura al usuario 'analista'
GRANT SELECT ON clientes TO analista;
-- Otorgar permisos completos al rol 'administrador'
GRANT ALL PRIVILEGES ON DATABASE tienda TO administrador;
-- Retirar el permiso de borrado al usuario 'pasante'
REVOKE DELETE ON productos FROM pasante;
10. TCL: Control de Transacciones
Una transacción es una unidad lógica de trabajo. El TCL garantiza que la BD cumpla con las propiedades ACID:
- Atomicity (Atomicidad): "Todo o nada". Si una transacción con varias operaciones DML falla a mitad, se deshace todo.
- Consistency (Consistencia): La BD pasa de un estado válido a otro.
- Isolation (Aislamiento): Transacciones concurrentes no interfieren entre sí.
- Durability (Durabilidad): Un
COMMITsobrevive a caídas del sistema.
10.1. Commit y Rollback
BEGIN TRANSACTION;
DELETE FROM productos WHERE categoria = 'Audio';
-- Nos damos cuenta del error. Deshacer:
ROLLBACK;
11. Programación en Base de Datos
Los SGBD modernos permiten incrustar lógica de programación dentro de la propia base de datos. Aunque SQLite no soporta estos elementos de forma estándar, son evaluables en la formación de FP usando motores como Oracle (PL/SQL) o SQL Server (T-SQL).
11.1. Disparadores (Triggers)
Son bloques de código que se ejecutan automáticamente (disparan) cuando ocurre un evento DML (INSERT, UPDATE, DELETE) sobre una tabla. Útiles para auditorías o mantener la integridad compleja.
CREATE TRIGGER trg_auditoria_precios
AFTER UPDATE OF precio ON productos
FOR EACH ROW
BEGIN
INSERT INTO historial_precios (producto_id, precio_anterior, precio_nuevo, fecha)
VALUES (OLD.id, OLD.precio, NEW.precio, NOW());
END;
11.2. Procedimientos y Funciones
Conjuntos de sentencias SQL guardadas en la BD que pueden recibir parámetros de entrada y devolver valores. Mejoran el rendimiento, ya que se ejecutan en el servidor, reduciendo el tráfico de red.
CREATE PROCEDURE sp_actualizar_stock(IN p_id INT, IN p_cantidad INT)
BEGIN
UPDATE productos SET stock = stock + p_cantidad WHERE id = p_id;
END;
-- Llamada al procedimiento
CALL sp_actualizar_stock(1, 50);
12. Entorno de Práctica Libre
Utilice este entorno para ejecutar sus propias consultas sobre la base de datos relacional del ejemplo. Las estructuras y datos volverán a su estado original si recarga la página o hace clic en "Restablecer".