
Proyecto Final
Base de Datos

Modelado y Diccionario de Datos
https://remingtonedu-my.sharepoint.com/:u:/g/personal/luis_rendon_6273_miremington_edu_co/EZgfTzW3hrdIjGvivySHkaEB9cWRPCwsSSGTt4coxS6-nQ
Enunciado
Este proyecto busca ofrecer una solución tecnológica que permita gestionar de manera eficiente los procesos en los muelles de carga. Por esto, mediante esta herramienta se podrá llevar un control detallado para la carga, descarga, distribución y manejo de los contenedores, mediante el uso de bases de datos Mysql y programación en Java.
Una de las principales ventajas de esta herramienta es su enfoque en la facilidad de uso y accesibilidad para el personal encargado de las operaciones en los muelles de carga. La solución se presentará de manera gráfica e intuitiva, lo que facilitará su manejo y reducirá los márgenes de error en la ejecución de las tareas y actividades mencionadas.
Esta característica innovadora permitirá que el personal capacitado pueda utilizar la herramienta de manera eficiente sin necesidad de contar con conocimientos técnicos avanzados en programación o en el uso de software complejos. Además, la solución tecnológica permitirá reducir los costos de implementación y de entrenamiento del personal, lo que contribuirá a que la herramienta pueda ser adoptada con facilidad en empresas de diferentes tamaños y características.
En resumen, este proyecto de gestión de procesos en los muelles de carga busca ofrecer una solución tecnológica accesible e intuitiva que permita optimizar la gestión de las operaciones logísticas en estos puntos críticos de la cadena de suministro, lo que se traducirá en una mayor eficiencia, rentabilidad y seguridad en las operaciones de importación y exportación de mercancías.
Usuario



Base de Datos Normalizada en sus 3 Formas


Tablas
Tipo_Barco
Barco


Tipo_Persona
Propietario_Mercancia


Tipo_Mercancia
Contenedor


Mercancia
Ciudad


Puerto
Ruta


Capitan

Tabla de Movimiento (Principal)
Registro

Consultas
1. Crear un procedimiento para crear un nuevo Barco
Análisis: Esta función almacenada se llama InsertarBarco y acepta tres parámetros: p_IMO para el número IMO, p_Nombre para el nombre del barco y p_TipoBarcoCodigo para el código de tipo de barco. Cuando llames a esta función con los parámetros adecuados, insertará un nuevo registro en la tabla "barco" con los valores proporcionados.
Sintaxis:
DELIMITER //
CREATE PROCEDURE InsertarBarco(
IN p_IMO VARCHAR(7),
IN p_Nombre VARCHAR(255),
IN p_TipoBarcoCodigo INT)
BEGIN
INSERT INTO barco (IMO, Nombre, TipoBarcoCodigo) VALUES (p_IMO, p_Nombre, p_TipoBarcoCodigo);
END;
//
DELIMITER ;

Funcionamiento


2. Crear un procedimiento para eliminar un Barco
Análisis: Este procedimiento almacenado se llama EliminarBarco y toma un parámetro p_IMO que representa el número IMO del barco que deseas eliminar. Cuando llames a este procedimiento con un número IMO válido, eliminará el registro correspondiente de la tabla "barco".
Sintaxis:
DELIMITER //
CREATE PROCEDURE EliminarBarco(IN p_IMO VARCHAR(7))
BEGIN
DELETE FROM barco WHERE IMO = p_IMO;
END;
//
DELIMITER ;

Funcionamiento


3. Crear un procedimiento para consultar un Barco
Análisis: Este procedimiento almacenado se llama ConsultarBarco y toma un parámetro p_IMO que representa el número IMO del barco que deseas consultar. Cuando llames a este procedimiento con un número IMO válido, recuperará y mostrará la información del barco desde la tabla "barco".
Sintaxis:
DELIMITER //
CREATE PROCEDURE ConsultarBarco(IN p_IMO VARCHAR(7))
BEGIN
SELECT * FROM barco WHERE IMO = p_IMO;
END;
//
DELIMITER ;

Funcionamiento

4. Crear un Trigger(Disparador) para que cuando se cree un nuevo Tipo de Mercancía, se cree una Mercancía nueva con este nuevo tipo a manera de prueba, además se debe utilizar la fecha y hora del sistema para el campo fecha/hora de esta.
Análisis: Este trigger se activará después de insertar un nuevo registro en la tabla "tipo_mercancia" y creará automáticamente una nueva fila en la tabla "mercancia" utilizando los valores del nuevo tipo de mercancía.
Sintaxis:
DELIMITER $$
CREATE TRIGGER InsertarMercanciaAfterTipoMercancia
AFTER INSERT ON Tipo_Mercancia
FOR EACH ROW
BEGIN
INSERT INTO Mercancia (Codigo, CantidadElementos, Peso, Descripcion, FechaHora, TipoMercanciaCodigo, PropietarioCedula, ContenedorCodigo)
VALUES (
NEW.Codigo, -- Nuevo código de la Mercancia
1, -- CantidadElementos
100.0, -- Peso
NEW.Descripcion, -- Descripción del nuevo tipo de mercancía
NOW(), -- Fecha/Hora actual
NEW.Codigo, -- Código del nuevo tipo de mercancía
1000000001 , -- PropietarioCedula
1001 -- ContenedorCodigo
);
END;
$$
DELIMITER ;

Funcionamiento




5. Se requiere que el campo 'Mapa' de la tabla Ruta sea un tipo Blob para que pueda almacenar las rutas de los mapas correctamente.
Análisis: Esta declaración cambiará el tipo de datos del campo "Mapa" a BLOB en la tabla "Ruta", Se utiliza este tipo de datos cuando se necesita almacenar imágenes, sonidos o textos muy largos.
Sintaxis:
ALTER TABLE Ruta
MODIFY Mapa BLOB;

Funcionamiento


6. Se requiere añadir a la tabla Registro una nuevo campo llamado 'Estado' de tipo SET donde se guarden los siguientes estados ('Activo', 'Inactivo', 'Pendiente', 'Suspendido').
Análisis: Para agregar un nuevo campo de tipo SET con los estados ('Activo', 'Inactivo', 'Pendiente', 'Suspendido') a la tabla "Registro", Usamos la declaración ALTER TABLE y el nuevo campo con su tipo.
Sintaxis:
ALTER TABLE Registro
ADD Estados SET('Activo', 'Inactivo', 'Pendiente', 'Suspendido');

Funcionamiento


7. Se desea consultar la Mercancia con la fecha de ingreso mas antigua.
Análisis: Encontrar la mercancía con la Fecha/Hora más antigua en la tabla "Mercancia" utilizando la función MIN() en una subconsulta sobre el mismo campo.
Sintaxis:
SELECT * FROM Mercancia
WHERE FechaHora = (SELECT MIN(FechaHora) FROM Mercancia);

Funcionamiento


7. Se desea crear una tabla llamada RutasPlanificadas a partir de la tabla Registro donde se conserven los campos Ruta, Barco y Capitan, para acceder rápido a esta información.
Análisis: Creamos una nueva tabla "RutasPlanificadas" que contiene los campos "Ruta," "Barco," y "Capitán" a partir de la tabla "Registro." utilizando el comando CREATE TABLE AS.
Sintaxis:
CREATE TABLE RutasPlanificadas AS
SELECT RutaCodigo, BarcoIMO, CapitanCedula
FROM Registro;

Funcionamiento


8. Se desea llenar la tabla "RutasPlanificadas" con datos a partir de las tablas "Ruta," "Barco," y "Capitan,".
Análisis: Esta consulta selecciona los datos de las tablas "Ruta," "Barco," y "Capitan," y los inserta en la tabla "RutasPlanificadas" correspondiente a los campos "RutaCodigo," "BarcoIMO," y "CapitanCedula."
Sintaxis:
INSERT INTO RutasPlanificadas (RutaCodigo, BarcoIMO, CapitanCedula)
SELECT
Ruta.Codigo,
Barco.IMO,
Capitan.Cedula
FROM Ruta, Barco, Capitan
LIMIT 8;

9. Se desea eliminar todos los datos de la tabla 'Mercancia' donde el tipo de mercancia corresponda al código '1' consultando desde la tabla 'tipo_mercancia'.
Análisis:
- Usamos la cláusula DELETE para eliminar datos de la tabla "Mercancia" y la alias como "m."
- Hacemos un JOIN con la tabla "tipo_mercancia" (alias "tm") en la columna "TipoMercanciaCodigo" de la tabla "Mercancia" y la columna "Codigo" de la tabla "tipo_mercancia."
- Luego, utilizamos una cláusula WHERE para especificar que solo queremos eliminar los registros donde el valor de "Codigo" en la tabla "tipo_mercancia" sea igual a 1.
Sintaxis:
DELETE m
FROM Mercancia m
JOIN tipo_mercancia tm ON m.TipoMercanciaCodigo = tm.Codigo
WHERE tm.Codigo = 1;

Funcionamiento

