PROYECTO FINAL

FINAL BASE DE DATOS I

  1. Definir el enunciado del problema a sistematizar según las necesidades detectadas. (Debe ser Claro y tener mínimo 8 tablas) (Entrega 1)

Una papelería local enfrenta dificultades en la gestión de su inventario, ventas, distribuidores y consumidores frecuentes. Actualmente, el manejo de estos procesos es manual, lo que ocasiona errores en el control del inventario, retrasos en la reposición de productos, falta de información actualizada sobre el inventario disponible y dificultades para ofrecer un buen servicio al cliente. Estos problemas afectan la eficiencia de las operaciones y limitan el crecimiento del negocio. 

Las necesidades principales 

Detalles de productos en cada pedido: Es necesario registrar cada producto solicitado en un pedido (cantidad solicitada, precio unitario, subtotal) para obtener un desglose completo de los productos adquiridos a cada distribuidor, asegurando una administración detallada del inventario y control de costos.

    • Relación: Cada Detalle_Pedido está asociado a un único Producto y a un único Pedido_Distribuidor, formando una relación muchos a 1 entre Detalles_Pedido y Producto, y muchos a 1 entre Detalles_Pedido y Pedidos_Distribuidores.
  • Detalles de productos en cada venta: Se requiere almacenar los detalles de cada producto vendido en una transacción (cantidad, precio unitario, subtotal) para obtener un desglose detallado de las ventas, lo que facilita la generación de reportes y el análisis de los productos más vendidos.

    • Relación: Cada Detalle_Venta se asocia a un único Producto y a una única Venta, creando una relación muchos a 1 entre Detalles_Venta y Producto, y muchos a 1 entre Detalles_Venta y Ventas.
  • Control de pedidos a distribuidores: La papelería necesita un registro de cada pedido realizado a los distribuidores, incluyendo la fecha, el distribuidor correspondiente y el monto total del pedido, para asegurar el reabastecimiento oportuno de productos.

    • Relación: Un Pedido_Distribuidor puede incluir múltiples Detalles_Pedido con diferentes productos solicitados. La relación entre Pedidos_Distribuidores y Detalles_Pedido es de 1 a muchos.
  • Registro de ventas: Se necesita registrar cada venta efectuada, incluyendo información como fecha de la venta, el consumidor involucrado, el monto total y el método de pago, para obtener un historial completo y preciso de las transacciones realizadas.

    • Relación: Una Venta puede incluir múltiples Detalles_Venta, ya que cada venta puede involucrar diferentes productos. La relación entre Ventas y Detalles_Venta es de 1 a muchos.
  • Seguimiento de consumidores frecuentes: La papelería requiere información de los consumidores frecuentes, como nombre, datos de contacto y preferencias de compra, para mejorar el servicio al cliente y realizar ofertas personalizadas.

    • Relación: Un Consumidor puede realizar múltiples Ventas a lo largo del tiempo, pero cada venta se asocia a un solo consumidor. La relación entre Consumidor y Ventas es de 1 a muchos.
  • Gestión de distribuidores: Es necesario almacenar los datos de contacto y localización de cada distribuidor para facilitar los pedidos y el seguimiento de las entregas, manteniendo siempre una relación clara y actualizada con los proveedores de productos.

    • Relación: Un Distribuidor puede tener múltiples Pedidos_Distribuidores asociados, pero cada pedido solo corresponde a un distribuidor. La relación entre Distribuidores y Pedidos_Distribuidores es de 1 a muchos.
  • Control de inventario: Se necesita un registro detallado de cada producto en el inventario de la papelería, incluyendo información como nombre, precio, stock disponible y el stock mínimo para gestionar reabastecimientos eficientemente.

    • Relación: Un Producto puede estar registrado en múltiples Detalles_Venta y Detalles_Pedido. La relación entre Producto y Detalles_Venta es de 1 a muchos, y también entre Producto y Detalles_Pedido, ya que un producto puede estar en varias ventas o pedidos.
  • 2 REALIZAR LO SIGUIENTE:

    2.1. Darle un nombre a la base de datos.

    Nombre: Papeleria

    2.2. Listado de tablas que llevara la BD. (Cuales son referenciales y cuales son de movimiento)

    Tablas Referenciales

    1. Producto: Datos de cada producto en el inventario (nombre, precio, stock).
    2. Distribuidores: Información de las empresas que suministran productos a la papelería.
    3. Consumidor: Datos sobre los consumidores frecuentes (nombre, contacto).

    Tablas de Movimiento

    1. Ventas: Registro de cada transacción de venta realizada.
    2. Pedidos_Distribuidores: Registro de pedidos solicitados a los distribuidores.
    3. Detalles_Venta: Detalle de los productos incluidos en cada venta.
    4. Detalles_Pedido: Detalle de los productos incluidos en cada pedido a distribuidores.

    2.3. Diseñar el diccionario de datos de cada tabla (campo, nombre el campo, tipo, tamaño y descripción).

    2.4. Montar o diseñar el modelo entidad relación.

    2.5. Dibujar el Diagrama relacional.

    3. Crear la BD y las tablas respectivas en MySQL (guardar evidencias del código MySQL con el que resuelva dicha actividad) e insertar 10 registros en cada tabla (Entrega 2)


    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. (Entrega 3)

    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 22% 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.22);

     Visualizar el valor del producto más caro

    Análisis:

    Qué desea mostrar:

    • El valor del Precio_venta más caro 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
    • Max

    Código: 

    select max(Precio_venta) "Valor producto más caro" from producto; 

    Comando que actualiza el nombre de un Distribuidor identificado por un id_distribuidor en específico.

    Análisis:

    Qué desea mostrar:

    • Actualizar el campo nombre de un distribuidor en particular.

    Tablas involucradas:

    • distribuidor

    Relaciones:

    • Este comando no requiere relaciones entre tablas ya que la actualización es específica a la tabla distribuidor

    Función a utilizar:

    • UPDATE:

    Código:

    update distribuidor set nombre="Papeles del sur" where id_distribuidor="D002"; 

    Comando que muestre una lista de productos con mas de cierta cantidad disponible

    Análisis:

    Qué desea mostrar: Una lista de productos que tienen más de 100 unidades disponibles en inventario, incluyendo el identificador del producto (id_producto), el nombre del producto (Nombre) y la cantidad disponible (Disponible).

    Tablas involucradas: producto

    Relaciones: No se requieren relaciones externas, ya que la consulta se realiza únicamente en la tabla producto.

    Función a utilizar: SELECT con la cláusula WHERE para filtrar los registros.

    Código:

    SELECT id_producto, Nombre, Disponible FROM producto WHERE Disponible > 100; 

    Mostrar un historial de un consumidor en especifico  

    Análisis:

    Qué desea mostrar: El historial de ventas para un cliente específico, en este caso, con el id_consumidor 'C001'. La consulta muestra el identificador de la venta (id_venta), la fecha de la venta (Fecha), la cantidad de producto vendida (Cantidad_vendida) y el nombre del producto (Nombre).

    Tablas involucradas:

    • venta
    • detalles_venta
    • producto

    Relaciones:

    • La tabla venta se une a detalles_venta a través de la relación v.id_venta = dv.FK_venta.
    • La tabla producto se une a detalles_venta mediante dv.FK_producto = p.id_producto.

    Funciones a utilizar:

    • SELECT para seleccionar los datos específicos de las tablas.
    • JOIN para unir las tablas de acuerdo con las claves foráneas y primarias.
    • WHERE para filtrar por un cliente específico.

    Código: 

    SELECT v.id_venta, v.Fecha, dv.Cantidad_vendida, p.Nombre FROM venta v JOIN detalles_venta dv ON v.id_venta = dv.FK_venta JOIN producto p ON dv.FK_producto = p.id_producto WHERE v.FK_consumidor = 'C001';

    Eliminar un producto de la tabla producto

    Análisis:

    Qué desea mostrar: El comando elimina un registro específico de la tabla producto, en este caso, el producto con id_producto igual a 'P010' (Calculadora).

    Tablas involucradas:

    • producto

    Relaciones: No se requieren relaciones externas, ya que el comando opera únicamente en la tabla producto.

    Función a utilizar:

    • DELETE para eliminar un registro específico de la tabla.

    Código:

    DELETE FROM producto WHERE id_producto = 'P010'; 

    Insertar un nuevo producto a la tabla producto

    Análisis:

    Qué desea mostrar: El comando inserta un nuevo registro en la tabla producto con los siguientes detalles: id_producto como 'P010', Nombre del producto como 'Bloc de notas', Precio_costo de 800, Precio_venta de 0, y Disponible con un valor de 200.

    Tablas involucradas:

    • producto

    Relaciones: No se requieren relaciones externas, ya que la operación se realiza únicamente en la tabla producto.

    Funciones a utilizar:

    • INSERT INTO para agregar un nuevo registro a la tabla.

    Código:

    INSERT INTO producto (id_producto, Nombre, Precio_costo, Precio_venta, Disponible) VALUES ('P010', 'Bloc de notas', 800, 0, 200);

    Calcular el valor de todas las ventas sacando el promedio

    Análisis:

    Qué desea mostrar: El comando calcula el valor promedio de la columna Precio_venta de todos los productos en la tabla producto, lo cual permite conocer el precio de venta promedio de los productos en el inventario.

    Tablas involucradas:

    • producto

    Relaciones: No se requieren relaciones externas, ya que la operación se realiza únicamente en la tabla producto.

    Funciones a utilizar:

    • SELECT: Para extraer datos de la tabla.
    • AVG(): Función de agregación que calcula el promedio de los valores en una columna.

    Código:

    SELECT AVG(Precio_venta) AS Promedio_Precio_Venta FROM producto; 

    Comando para hacer la copia de una tabla

    Análisis:

    Qué desea mostrar:

    Crear una tabla producto_copia con la misma estructura y datos que la tabla producto.

    Tablas involucradas:

    • producto: La tabla de origen desde donde se copiarán los datos.

    Relaciones:

    No se requieren relaciones externas, ya que la operación de copia de datos se realiza dentro de la misma tabla producto.

    Función a utilizar:

    • CREATE TABLE: Para crear una nueva tabla.
    • SELECT: Para seleccionar todos los registros de la tabla producto.
    • AS: Para renombrar la nueva tabla creada como producto_copia.

    Código:

    CREATE TABLE producto_copia AS SELECT * FROM producto; 

    Análisis:

    Qué desea mostrar:

    El comando ALTER TABLE distribuidor MODIFY COLUMN Telefono int busca modificar la columna Telefono en la tabla distribuidor, cambiando su tipo de datos a int (entero).

    Tablas involucradas:

    • distribuidor: La tabla en la que se encuentra la columna Telefono que será modificada.

    Relaciones:

    No se requieren relaciones externas, ya que solo se está modificando la estructura de la tabla distribuidor.

    Función a utilizar:

    • ALTER TABLE: Modifica la estructura de una tabla existente.
    • MODIFY COLUMN: Cambia el tipo de datos o las características de una columna.

    Código:

    ALTER TABLE distribuidor MODIFY COLUMN Telefono int; 

    Crear un procedimiento para listar todos los productos

    R//:

    Análisis:

    Qué desea mostrar:

    • Una Lista de 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 [papeleria]> delimiter //

    MariaDB [papeleria]> create procedure listar_producto()

    -> begin

    -> select * from producto;

    -> end

    -> //

    MariaDB [papeleria]> delimiter ;


    Comando para Visualizar los detalles de ventas con la información del consumidor y la del producto

    Análisis:

    Qué desea mostrar:

    Este comando tiene como objetivo mostrar información detallada sobre las ventas, incluyendo el ID de la venta, la fecha, el nombre del consumidor, el nombre del producto y la cantidad vendida para cada venta registrada.

    Tablas involucradas:

    • venta: Contiene la información sobre las ventas, incluyendo el ID de la venta y la fecha de la venta.
    • consumidor: Contiene la información sobre los consumidores, y se hace una relación para obtener el nombre del consumidor.
    • Detalles_Venta: Contiene los detalles específicos de cada venta, como las cantidades de productos vendidas.
    • producto: Contiene información sobre los productos, y se hace una relación para obtener el nombre del producto.

    Relaciones:

    Este comando realiza varias relaciones entre las tablas para obtener la información combinada:

    • venta se une con consumidor a través de la clave foránea FK_consumidor en la tabla venta, que se relaciona con el campo id_consumidor en la tabla consumidor.
    • venta se une con Detalles_Venta a través del campo id_venta en venta, que se relaciona con FK_venta en Detalles_Venta.
    • Detalles_Venta se une con producto a través de la clave foránea FK_producto en Detalles_Venta, que se relaciona con id_producto en la tabla producto.

    Función a utilizar:

    • SELECT: Se usa para seleccionar las columnas que se desean visualizar.
    • INNER JOIN: Se usa para combinar las filas de varias tablas solo cuando hay coincidencias en ambas tablas.

    Código: 

    select venta.id_venta, venta.Fecha, consumidor.nombre AS nombre_consumidor, producto.Nombre AS Nombre_producto, Detalles_Venta.Cantidad_vendida from venta inner join cliente on venta.FK_consumidor = consumidor.id_consumidor inner join Detalles_Venta on venta.id_venta = Detalles_Venta.FK_venta inner join producto on Detalles_Venta.FK_producto = producto.id_producto;

    Análisis:

    Qué desea mostrar:

    Este comando crea una vista llamada consumidorz, que muestra todos los registros de la tabla consumidor cuyo campo nombre contiene la letra "z" en cualquier parte del nombre (debido al uso de %z en la cláusula LIKE).

    Tablas involucradas:

    • consumidor: La tabla de donde se extraen los datos del consumidor, específicamente aquellos cuyo nombre contiene la letra "z".

    Relaciones:

    No se requieren relaciones con otras tablas, ya que solo se está trabajando con una sola tabla (consumidor) y no hay uniones involucradas en esta consulta.

    Función a utilizar:

    • CREATE VIEW: Crea una vista en la base de datos que puede ser consultada como si fuera una tabla.
    • SELECT: Selecciona todos los registros de la tabla consumidor.
    • LIKE: Se usa para realizar una búsqueda de patrones. En este caso, '%z' busca nombres que contienen la letra "z" en cualquier parte del nombre.

    Código:

    create view consumidorz as select * from consumidor where nombre like '%z';

    5. Sustentación

    EXITOS...

    Sebastián Carvajal Ospina - Blog Academico
    2024
    Powered by Webnode Cookies
    Create your website for free! This website was made with Webnode. Create your own for free today! Get started