
Proyecto final
PROYECTO FINAL
FINAL BASE DE DATOS I
- Definir el enunciado del problema a sistematizar según las necesidades detectadas. (Debe ser Claro y tener mínimo 8 tablas) (Entrega 1)
Una tienda minorista tiene dificultades para mantener un control de su inventario. El sistema actual basado en registros manuales en hojas de cálculo y manejo de información por sistemas no adecuados como WhatsApp, ha generado problemas como pérdida de información, dificultad para gestionar productos de baja existencia, errores en los pedidos a proveedores, y falta de control sobre las devoluciones. Estos problemas han resultado en productos fuera de inventario, exceso de inventario de productos no deseados, y pérdidas financieras debido a la mala gestión de las devoluciones.
Las necesidades principales:
- Gestión efectiva de productos y proveedores.
- Registro y control de pedidos.
- Gestión detallada de las ventas, incluyendo productos vendidos y clientes.
- Manejo de devoluciones.
- Generación de reportes sobre productos más vendidos, existencias bajas.
2 REALIZAR LO SIGUIENTE:
2.1. Darle un nombre a la base de datos.
R\\: Inventario
2.2. Listado de tablas que llevara la BD. (Cuales son referenciales y cuales son de movimiento)
R\\:
Tablas referenciales:
- Productos
- Proveedores
- Clientes
Tablas de movimiento:
- Ventas
- Detalles_Venta
- Pedidos_Proveedores
- Detalles_Pedido
Relaciones:
Productos:
Un producto puede aparecer en muchos detalles de ventas y en muchos detalles de pedidos.
- Relación con Detalles_Venta: 1 producto → N detalles de venta.
- Relación con Detalles_Pedido: 1 producto → N detalles de pedido.
Un proveedor puede tener muchos pedidos.
- Relación con Pedidos_Proveedores: 1 proveedor → N pedidos.
Un cliente puede realizar muchas ventas.
- Relación con Ventas: 1 cliente → N ventas (opcional).
Ventas:
Una venta puede tener muchos detalles de venta.
- Relación con Detalles_Venta: 1 venta → N detalles de venta.
Detalles_Venta:
Detalles_Venta pertenecen a una venta y a un producto.
- Relación con Ventas: N detalles → 1 venta.
- Relación con Productos: N detalles → 1 producto.
Pedidos_Proveedores:
Un pedido puede tener muchos detalles de pedido.
- Relación con Detalles_Pedido: 1 pedido → N detalles de pedido
Detalles_Pedido:
Detalles_Pedido pertenecen a un pedido y a un producto.
- Relación con Pedidos_Proveedores: N detalles → 1 pedido.
- Relación con Productos: N detalles → 1 producto.
2.3. Diseñar el diccionario de datos de cada tabla (campo, nombre el campo, tipo, tamaño y descripción).
R\\:
2.4. Montar o diseñar el modelo entidad relación y dibujar el Diagrama relacional.
3. Crear la BD y las tablas respectivas en MySQL.
3.1:(guardar evidencias del código MySQL con el que resuelva dicha actividad) e insertar 10 registros en cada tabla
4. Diseñar ejercicios en los que se apliquen los diferentes comandos que se utilizaron durante el semestre con su respectivo análisis y resultados.
Crear un procedimiento para insertar un producto en la tabla producto
R//:
Análisis:
Qué desea mostrar:
- Crear un procedimiento que permita insertar un nuevo producto en la tabla producto con los datos proporcionados (ID del producto, nombre, precio de costo, precio de venta, y cantidad disponible).
Tablas involucradas:
- producto
Relaciones:
- No se requieren relaciones con otras tablas ya que la inserción se realiza solo en la tabla producto.
Función a utilizar:
- CREATE PROCEDURE
- INSERT INTO
Código:
MariaDB [inventario]> Delimiter //
MariaDB [inventario]> Create procedure insertar_producto( in _id_producto char(20), in _nombre char(45), in _Precio_costo int(45), in _Precio_venta int(45), in _Disponible int(45))
-> Begin
-> Insert into producto values(_id_producto, _nombre, _Precio_costo, Precio_venta,Disponible);
-> end
-> //
MariaDB [inventario]> Delmiter ;
MariaDB [inventario]> Call insertar_producto("P0011"," Refrigerador Toyota",2000000,0,0); Query OK, 1 row affected (0.003 sec)
Crear un procedimiento para listar todos los productos
R//:
Análisis:
Qué desea mostrar:
- Listar todos los productos almacenados en la tabla producto con todos sus campos.
Tablas involucradas:
- producto
Relaciones:
- No se requieren relaciones con otras tablas ya que solo se necesita consultar la tabla producto.
Función a utilizar:
- CREATE PROCEDURE
- SELECT
Código:
MariaDB [inventario]> Delimiter //
MariaDB [inventario]> Create procedure listar_producto()
-> Begin
-> Select * from producto;
-> end
-> //
MariaDB [inventario]> Delimiter ;
MariaDB [inventario]> call listar_producto;
show create procedure listar_producto;
Crear un procedimiento para consultar un producto específico por ID
R//:
Análisis:
Qué desea mostrar:
- Consultar y mostrar los detalles de un producto específico en la tabla producto, utilizando el id_producto como criterio de búsqueda.
Tablas involucradas:
- producto
Relaciones:
- No se requieren relaciones con otras tablas, ya que la consulta se realiza únicamente en la tabla producto.
Función a utilizar:
- CREATE PROCEDURE
- SELECT
Código:
MariaDB [inventario]> Create procedure consultar_producto(in _id_producto char(20))
-> Begin
-> select * from producto where id_producto=_id_producto;
-> End
-> //
MariaDB [inventario]> Delimiter ;
MariaDB [inventario]> show procedure status;
MariaDB [inventario]> call consultar_producto("P002");
Crear un procedimiento para eliminar un producto específico por ID
R//:
Análisis:
Qué desea mostrar:
- Eliminar un producto de la tabla producto usando el id_producto como criterio para identificar el registro a eliminar.
Tablas involucradas:
- producto
Relaciones:
- No se requieren relaciones con otras tablas, ya que la eliminación se realiza únicamente en la tabla producto.
Función a utilizar:
- CREATE PROCEDURE
- DELETE
Código:
MariaDB [inventario]> Delimiter //
MariaDB [inventario]> Create procedure eliminar_producto(in _id_producto char(20))
-> Begin
-> Delete from producto where id_producto=_id_producto;
-> End
-> //
MariaDB [inventario]> Delimiter ;
MariaDB [inventario]> show procedure status;
MariaDB [inventario]> call eliminar_producto("P0011");
Query OK, 1 row affected (0.003 sec)
MariaDB [inventario]> select * from producto;
Crear un procedimiento para modificar un producto específico por ID
R//:
Análisis:
Qué desea mostrar:
- Actualizar los datos de un producto existente en la tabla producto utilizando el id_producto para identificar el producto, permitiendo modificar su nombre, precio de costo, precio de venta y cantidad disponible.
Tablas involucradas:
- producto
Relaciones:
- No se requieren relaciones con otras tablas, ya que la actualización se realiza únicamente en la tabla producto.
Función a utilizar:
- CREATE PROCEDURE
- UPDATE
Código:
MariaDB [inventario]> Delimiter //
MariaDB [inventario]> Create procedure modificar_producto(in _id_producto char(20), in _nombre char(45), in _Precio_costo int(45), in _Precio_venta int(45), in _Disponible int(45))
-> Begin
-> Update producto set nombre = _nombre, Precio_costo = _Precio_costo, Precio_venta = _Precio_venta, Disponible = _Disponible where id_producto = _id_producto;
-> End
-> //
MariaDB [inventario]> Delimiter ;
MariaDB [inventario]> call modificar_producto("P010","Plancha_Toyota", 90000, 0, 70);
Query OK, 1 row affected (0.004 sec)
MariaDB [inventario]> select * from producto;
Actualizar el precio de venta en la tabla de productos
R//:
Análisis:
Qué desea mostrar:
- Actualizar el campo Precio_venta de cada producto en la tabla producto, incrementándolo en un 25% sobre el Precio_costo.
Tablas involucradas:
- producto
Relaciones:
- No se necesitan relaciones externas ya que el ajuste se realiza dentro de la misma tabla producto.
Función a utilizar:
- UPDATE
Código:
update producto set Precio_venta = Precio_costo + (Precio_costo * 0.25);
Visualizar el valor del producto más barato
R//:
Análisis:
Qué desea mostrar:
- El valor del Precio_venta más bajo entre todos los productos de la tabla producto.
Tablas involucradas:
- producto
Relaciones:
- No se requieren relaciones externas, ya que el cálculo se realiza únicamente en la tabla producto.
Función a utilizar:
- SELECT
- MIN
Código:
select min(Precio_venta) "Valor producto más barato" from producto;
Comando que actualiza el nombre de un proveedor identificado por un id_proveedor específico.
Análisis:
Qué desea mostrar:
- Actualizar el campo nombre de un proveedor en particular.
Tablas involucradas:
- proveedores:
Relaciones:
- Este comando no requiere relaciones entre tablas ya que la actualización es específica a la tabla proveedores.
Función a utilizar:
- UPDATE:
Código:
update proveedores set nombre="TecnoElectro_Toyota" where id_proveedor="PR004";
Consulta que muestra los detalles de ventas de productos cuyo Precio_costo es mayor a 1,000,000. La consulta utiliza una consultas anidada.
Análisis:
Qué desea mostrar:
- Mostrar las ventas de aquellos productos que tienen un costo superior a 1,000,000.
Tablas involucradas:
- Detalles_Venta:
- producto:
Relaciones:
- Detalles_Venta.FK_producto = producto.id_producto:
Función a utilizar:
- SELECT
- WHERE
Código:
select id_detalleVent, Cantidad_vendida, FK_venta, FK_producto from Detalles_Venta where FK_producto in(select id_producto from producto where Precio_costo > 1000000);
Consulta que muestra los productos cuyo inventario es menor a 50 unidades.
Análisis:
Qué desea mostrar:
- Identificar los productos con baja disponibilidad en inventario.
Tabla involucrada:
- producto:
Relaciones:
- No se necesitan relaciones con otras tablas.
Función a utilizar:
- SELECT
- WHERE
Código:
select id_producto, nombre, disponible from producto where Disponible < 50;
Visualizar los detalles de ventas con información del cliente y producto
R//:
Análisis:
Qué desea mostrar:
- Información de las ventas, incluyendo:
- ID de la venta.
- Fecha de la venta.
- Nombre del cliente.
- Nombre del producto.
- Cantidad vendida.
Tablas involucradas:
- venta
- cliente
- Detalles_Venta
- producto
Relaciones:
- venta.FK_cliente = cliente.id_cliente: Relaciona cada venta con el cliente correspondiente.
- venta.id_venta = Detalles_Venta.FK_venta: Relaciona cada venta con sus detalles específicos en la tabla Detalles_Venta.
- Detalles_Venta.FK_producto = producto.id_producto: Vincula cada producto vendido en una venta específica.
Función a utilizar:
- INNER JOIN
Código:
select venta.id_venta, venta.Fecha, cliente.nombre AS nombre_cliente, producto.Nombre AS Nombre_producto, Detalles_Venta.Cantidad_vendida from venta inner join cliente on venta.FK_cliente = cliente.id_cliente inner join Detalles_Venta on venta.id_venta = Detalles_Venta.FK_venta inner join producto on Detalles_Venta.FK_producto = producto.id_producto;
Crear una copia de la tabla cliente
R//:
Análisis:
Qué desea mostrar:
- Crear una nueva tabla llamada copia que tenga la misma estructura de la tabla cliente.
Tablas involucradas:
- cliente (tabla original a copiar).
- copia
Relaciones:
- No se necesitan relaciones con otras tablas, ya que este comando solo hace una copia de la tabla cliente
Función a utilizar:
- CREATE TABLE LIKE
Código:
create table copia like cliente;
TXT.Con_todos_los-Comandos: