Objetivo
Este trabajo consiste en realizar una actividad que permita definir el conocimiento que
se tiene sobre la temática de base de datos.
Leer el documento anexo y seguir las instrucciones.
Crear un reporte de entrega.
Procedimiento
No. 1 y 2 Crear Modelo Relacional. En base a mi perspectiva resultaron 3 tablas:
No. 3 y 4 Creación de la Base de Datos y Tablas
CREATE DATABASE UnoMedicamentos;
CREATE TABLE TiposMedicamentos
(
IdTipoMedicamento INT AUTO_INCREMENT PRIMARY KEY,
NombreTipo VARCHAR(100)
);
CREATE TABLE Laboratorios
(
IdLaboratorio INT AUTO_INCREMENT PRIMARY KEY,
NombreLaboratorio VARCHAR(100),
PaisOrigen VARCHAR(50),
TelefonoContacto VARCHAR(15),
EmailCorporativo VARCHAR(100)
);
CREATE TABLE Medicamentos
(
IdMedicamentos INT AUTO_INCREMENT PRIMARY KEY,
NombreComercial VARCHAR(100),
PrincipioActivo VARCHAR(100),
Concentracion VARCHAR(20),
PrecioCompra DOUBLE(6,2),
StockDisponible INT,
FechaVencimiento DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FkIdLaboratorio INT,
FkIdTipoMedicamento INT,
FOREIGN KEY (FkIdLaboratorio) REFERENCES Laboratorios(IdLaboratorio),
FOREIGN KEY (FkIdTipoMedicamento) REFERENCES
TiposMedicamentos(IdTipoMedicamento)
);
No. 5 Inserción de Datos
5 Laboratorios Farmacéuticos
INSERT INTO Laboratorios (NombreLaboratorio, PaisOrigen, TelefonoContacto,
EmailCorporativo) VALUES
('Farmacéutica del Sol', 'México', '5551234567', 'contacto@[Link]'),
('BioSalud Global', 'Estados Unidos', '0012125557890', 'info@[Link]'),
('Laboratorios Andina', 'Perú', '511987654321', 'ventas@[Link]'),
('PharmaNova', 'Alemania', '493012345678', 'service@[Link]'),
('Salud Vital', 'Argentina', '541112345678', 'contacto@[Link]'),
('Meditech Labs', 'India', '911234567890', 'support@[Link]'),
('Laboratorios Sakura', 'Japón', '81312345678', 'info@[Link]'),
('GreenMed', 'Canadá', '14165551234', 'hello@[Link]'),
('VitalCare Pharma', 'España', '34911222333', 'info@[Link]'),
('NordicBio', 'Suecia', '46812345678', 'contact@[Link]');
5 Tipos de Medicamentos
INSERT INTO TiposMedicamentos (NombreTipo) VALUES
('Analgésicos'),
('Antibióticos'),
('Antiinflamatorios'),
('Antihistamínicos'),
('Antipiréticos'),
('Antidepresivos'),
('Vitaminas'),
('Antivirales'),
('Antifúngicos'),
('Anticonceptivos');
15 Medicamentos
INSERT INTO Medicamentos (NombreComercial, PrincipioActivo, Concentracion,
PrecioCompra, StockDisponible, FechaVencimiento, FkIdLaboratorio,
FkIdTipoMedicamento) VALUES
('Dolofast', 'Ibuprofeno', '400mg', 45.50, 120, '2026-05-10 00:00:00', 1, 3),
('Bactronix', 'Amoxicilina', '500mg', 60.00, 80, '2025-12-01 00:00:00', 2, 2),
('Histaliv', 'Loratadina', '10mg', 38.75, 150, '2026-03-15 00:00:00', 3, 4),
('Vitamax C', 'Ácido ascórbico', '1000mg', 25.00, 200, '2027-01-20 00:00:00',
4, 7),
('Neurocalm', 'Sertralina', '50mg', 120.00, 60, '2026-09-30 00:00:00', 5, 6),
('Antifungol', 'Fluconazol', '150mg', 70.00, 90, '2025-11-10 00:00:00', 6, 9),
('Virostop', 'Oseltamivir', '75mg', 95.00, 40, '2026-02-28 00:00:00', 7, 8),
('Femsecure', 'Levonorgestrel', '0.75mg', 85.00, 100, '2027-06-01 00:00:00',
8, 10),
('Paracetin', 'Paracetamol', '500mg', 30.00, 300, '2026-04-18 00:00:00', 9,
5),
('ZincoPlus', 'Zinc', '50mg', 22.00, 250, '2027-08-12 00:00:00', 10, 7),
('Alerfast', 'Cetirizina', '10mg', 40.00, 130, '2026-07-07 00:00:00', 1, 4),
('Antibiox Forte', 'Ciprofloxacino', '500mg', 65.00, 75, '2025-10-05
00:00:00', 2, 2),
('Inflamax', 'Naproxeno', '250mg', 50.00, 110, '2026-06-22 00:00:00', 3, 3),
('Serenitol', 'Fluoxetina', '20mg', 115.00, 55, '2026-12-31 00:00:00', 4, 6),
('Antivirax', 'Acyclovir', '200mg', 90.00, 70, '2027-03-10 00:00:00', 5, 8);
No. 6 Vista de Medicamentos por Laboratorio
CREATE VIEW vista_medicamentos_laboratorio AS SELECT
[Link] AS 'Nombre Laboratorio',
[Link] AS 'Pais de Origen',
[Link] AS 'Nombre del Medicamento',
[Link] AS 'Principio Activo',
[Link] AS 'Tipo Medicamento',
[Link] AS 'Stock',
[Link] AS 'Precio'
FROM Medicamentos me INNER JOIN Laboratorios la ON
[Link] = [Link]
INNER JOIN TiposMedicamentos ti ON [Link] =
[Link];
No. 7 Procedimiento Almacenado de Validación, en este procedimiento también se
puede validar que el precio del medicamento no sea nulo o menor a 0
DELIMITER //
DROP PROCEDURE IF EXISTS validar_stock_medicamento;
CREATE PROCEDURE validar_stock_medicamento(
IN p_NombreComercial VARCHAR(100),
IN p_PrincipioActivo VARCHAR(100),
IN p_Concentracion VARCHAR(20),
IN p_PrecioCompra DOUBLE(6,2),
IN p_StockDisponible INT,
IN p_FechaVencimiento DATETIME,
IN p_Laboratorio VARCHAR(100),
IN p_TipoMedicamento VARCHAR(100)
)
BEGIN
IF p_StockDisponible IS NULL OR p_StockDisponible < 0 THEN
SELECT 'ERROR: Ingresa una Cantidad de Stock Valida' AS Mensaje;
ELSEIF p_PrecioCompra IS NULL OR p_PrecioCompra <= 0 THEN
SELECT 'ERROR: Ingresa un Precio de Valido' AS Mensaje;
ELSE
INSERT INTO Medicamentos (NombreComercial, PrincipioActivo, Concentracion,
PrecioCompra,
StockDisponible, FechaVencimiento, FkIdLaboratorio, FkIdTipoMedicamento)
VALUES (p_NombreComercial, p_PrincipioActivo, p_Concentracion,
p_PrecioCompra,
p_StockDisponible, p_FechaVencimiento, p_Laboratorio, p_TipoMedicamento);
SELECT 'Datos registrados exitosamente' AS Mensaje;
END IF;
END //
DELIMITER ;
Uso 1: Correcto
CALL validar_stock_medicamento('Paracetamol 500mg', 'Paracetamol',
'500mg',15.50,100,'2026-12-31', '1','2');
Uso 2: Error Stock
CALL validar_stock_medicamento('Ibuprofeno 400mg', 'Ibuprofeno', '400mg',
20.00, -10, '2026-12-31', '1', '2');
Uso 3: Error Precio
CALL validar_stock_medicamento('Amoxicilina 500mg', 'Amoxicilina', '500mg', 0,
50, '2026-12-31', '1', '2');
No. 8 Consulta de Medicamentos por tipo:
SELECT
[Link] AS 'Tipo Medicamento',
[Link] AS 'Nombre del Medicamento',
[Link] AS 'Principio Activo',
[Link] AS 'Nombre Laboratorio',
[Link] AS 'Precio',
[Link] AS 'Stock'
FROM Medicamentos me INNER JOIN Laboratorios la ON
[Link] = [Link]
INNER JOIN TiposMedicamentos ti ON [Link] =
[Link] ORDER BY [Link] ASC, [Link] ASC;
Conclusión
Con esta actividad retomé comandos para por ejemplo insertar, crear vistas, hacer
uniones, identificar la estructura del problema, pequeños detalles como THEN, END IF,
ordenar por orden en las consultas, entre otras cosas recordé du función y forma de
uso, entre otras cosas.