En esta sección, vamos a implementar el proyecto final del curso de SQL. Este proyecto integrará todos los conceptos y habilidades que has aprendido a lo largo del curso. Asegúrate de seguir cada paso cuidadosamente y de revisar tu trabajo para garantizar que todo funcione correctamente.

Objetivos del Proyecto

  1. Crear una base de datos y tablas: Diseñar y crear una base de datos con las tablas necesarias.
  2. Insertar datos: Poblar las tablas con datos relevantes.
  3. Realizar consultas: Ejecutar consultas para extraer y manipular datos.
  4. Optimizar consultas: Aplicar técnicas de optimización para mejorar el rendimiento.
  5. Implementar transacciones: Asegurar la integridad de los datos mediante el uso de transacciones.
  6. Crear procedimientos almacenados y triggers: Automatizar tareas comunes y mantener la integridad de los datos.

Paso 1: Crear la Base de Datos y Tablas

1.1 Crear la Base de Datos

CREATE DATABASE ProyectoFinal;
USE ProyectoFinal;

1.2 Crear las Tablas

Vamos a crear tres tablas: Clientes, Pedidos y Productos.

CREATE TABLE Clientes (
    ClienteID INT PRIMARY KEY AUTO_INCREMENT,
    Nombre VARCHAR(100) NOT NULL,
    Email VARCHAR(100) NOT NULL,
    FechaRegistro DATE NOT NULL
);

CREATE TABLE Productos (
    ProductoID INT PRIMARY KEY AUTO_INCREMENT,
    Nombre VARCHAR(100) NOT NULL,
    Precio DECIMAL(10, 2) NOT NULL,
    Stock INT NOT NULL
);

CREATE TABLE Pedidos (
    PedidoID INT PRIMARY KEY AUTO_INCREMENT,
    ClienteID INT,
    ProductoID INT,
    Cantidad INT NOT NULL,
    FechaPedido DATE NOT NULL,
    FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID),
    FOREIGN KEY (ProductoID) REFERENCES Productos(ProductoID)
);

Paso 2: Insertar Datos

2.1 Insertar Datos en la Tabla Clientes

INSERT INTO Clientes (Nombre, Email, FechaRegistro) VALUES
('Juan Perez', '[email protected]', '2023-01-15'),
('Maria Lopez', '[email protected]', '2023-02-20'),
('Carlos Sanchez', '[email protected]', '2023-03-10');

2.2 Insertar Datos en la Tabla Productos

INSERT INTO Productos (Nombre, Precio, Stock) VALUES
('Laptop', 1200.00, 10),
('Mouse', 25.00, 100),
('Teclado', 45.00, 50);

2.3 Insertar Datos en la Tabla Pedidos

INSERT INTO Pedidos (ClienteID, ProductoID, Cantidad, FechaPedido) VALUES
(1, 1, 1, '2023-04-01'),
(2, 2, 2, '2023-04-02'),
(3, 3, 1, '2023-04-03');

Paso 3: Realizar Consultas

3.1 Consultar Todos los Clientes

SELECT * FROM Clientes;

3.2 Consultar Pedidos con Detalles de Clientes y Productos

SELECT p.PedidoID, c.Nombre AS Cliente, pr.Nombre AS Producto, p.Cantidad, p.FechaPedido
FROM Pedidos p
JOIN Clientes c ON p.ClienteID = c.ClienteID
JOIN Productos pr ON p.ProductoID = pr.ProductoID;

3.3 Consultar Productos con Bajo Stock

SELECT * FROM Productos
WHERE Stock < 20;

Paso 4: Optimizar Consultas

4.1 Crear Índices

CREATE INDEX idx_cliente_email ON Clientes(Email);
CREATE INDEX idx_producto_nombre ON Productos(Nombre);

4.2 Analizar el Rendimiento de Consultas

Utiliza la instrucción EXPLAIN para analizar el rendimiento de las consultas.

EXPLAIN SELECT * FROM Productos WHERE Stock < 20;

Paso 5: Implementar Transacciones

5.1 Ejemplo de Transacción

START TRANSACTION;

UPDATE Productos SET Stock = Stock - 1 WHERE ProductoID = 1;
INSERT INTO Pedidos (ClienteID, ProductoID, Cantidad, FechaPedido) VALUES (1, 1, 1, '2023-04-04');

COMMIT;

Paso 6: Crear Procedimientos Almacenados y Triggers

6.1 Procedimiento Almacenado para Crear un Pedido

DELIMITER //

CREATE PROCEDURE CrearPedido(
    IN p_ClienteID INT,
    IN p_ProductoID INT,
    IN p_Cantidad INT
)
BEGIN
    DECLARE p_Stock INT;

    SELECT Stock INTO p_Stock FROM Productos WHERE ProductoID = p_ProductoID;

    IF p_Stock >= p_Cantidad THEN
        START TRANSACTION;
            UPDATE Productos SET Stock = Stock - p_Cantidad WHERE ProductoID = p_ProductoID;
            INSERT INTO Pedidos (ClienteID, ProductoID, Cantidad, FechaPedido) VALUES (p_ClienteID, p_ProductoID, p_Cantidad, CURDATE());
        COMMIT;
    ELSE
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Stock insuficiente';
    END IF;
END //

DELIMITER ;

6.2 Trigger para Actualizar Stock

DELIMITER //

CREATE TRIGGER ActualizarStock AFTER INSERT ON Pedidos
FOR EACH ROW
BEGIN
    UPDATE Productos SET Stock = Stock - NEW.Cantidad WHERE ProductoID = NEW.ProductoID;
END //

DELIMITER ;

Conclusión

En esta sección, hemos implementado un proyecto completo utilizando SQL. Hemos creado una base de datos y tablas, insertado datos, realizado consultas, optimizado el rendimiento, implementado transacciones y creado procedimientos almacenados y triggers. Este proyecto te ha permitido aplicar todos los conceptos aprendidos a lo largo del curso y te ha preparado para enfrentar desafíos del mundo real en el uso de SQL. ¡Felicidades por llegar hasta aquí!

Curso de SQL

Módulo 1: Introducción a SQL

Módulo 2: Consultas básicas de SQL

Módulo 3: Trabajando con múltiples tablas

Módulo 4: Filtrado avanzado de datos

Módulo 5: Manipulación de datos

Módulo 6: Funciones avanzadas de SQL

Módulo 7: Subconsultas y consultas anidadas

Módulo 8: Índices y optimización de rendimiento

Módulo 9: Transacciones y concurrencia

Módulo 10: Temas avanzados

Módulo 11: SQL en la práctica

Módulo 12: Proyecto final

© Copyright 2024. Todos los derechos reservados