0% encontró este documento útil (0 votos)
8 vistas10 páginas

Base de Datos para Farmacia FARMACORP

Un proyecto donde se aplican los modelos tanto conceptual, lógicos y físicos

Cargado por

Lord Reylend
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas10 páginas

Base de Datos para Farmacia FARMACORP

Un proyecto donde se aplican los modelos tanto conceptual, lógicos y físicos

Cargado por

Lord Reylend
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD AUTÓNOMA GABRIEL RENÉ

MORENO

FACULTAD DE INGENIERÍA EN
CIENCIAS DE LA COMPUTACIÓN Y
TELECOMUNICACIONES

“PROYECTO”
Materia: Base de Datos I
Docente: Ing. Josue Obed Veizaga Gonzales
Estudiante: Renato Rebollo Condori | 222018720

Santa Cruz-Bolivia

1
ÍNDICE

1.- Planteamiento del Problema .......................................................................................................... 3


2.- Diseño Conceptual .......................................................................................................................... 4
3.- Diseño Lógico ................................................................................................................................... 5
4.- Diseño Físico .................................................................................................................................... 6

2
BASE DE DATOS DE UNA
FARMACIA
1.- Planteamiento del Problema
La farmacia FARMACORP desea implementar un sistema que le permita administrar
eficientemente su información operativa y comercial. El sistema debe estar enfocado
principalmente en el registro y control de ventas de medicamentos, así como en la
gestión del inventario, clientes, empleados, recetas médicas y proveedores.
Los clientes de la farmacia pueden realizar compras con o sin receta médica, por lo
tanto, es necesario almacenar sus datos personales y registrar, cuando corresponda,
las recetas que respaldan la venta de medicamentos de uso restringido. Estas
recetas son emitidas por doctores externos, de los cuales se debe conservar al
menos su nombre, matrícula profesional y especialidad, ya que no forman parte del
personal interno de la farmacia.
En cuanto a los empleados, deben registrarse sus datos personales, su cargo,
salario y fecha de ingreso. La farmacia puede tener empleados con roles jerárquicos,
por lo que el sistema debe permitir identificar quiénes tienen jefes directos dentro del
mismo staff. Cada venta registrada debe estar asociada a un empleado responsable
que la haya realizado.
Los medicamentos que comercializa FARMACORP deben controlarse mediante un
sistema de lotes, donde cada lote incluye una fecha de vencimiento, cantidad
disponible (stock) y precio unitario. Algunos medicamentos requieren receta para su
venta, por lo que el sistema debe identificar esta condición. Además, se debe
vincular la información de los proveedores que abastecen los medicamentos, ya que
un mismo medicamento puede ser provisto por varios proveedores distintos.
Finalmente, cada venta registrada debe incluir un desglose de los medicamentos
vendidos a través de un detalle de venta, que incluya cantidad, precio unitario y el
lote al que pertenece cada producto vendido. Esto garantiza una correcta trazabilidad
del stock.

3
2.- Diseño Conceptual

• Se parte de una entidad general llamada Persona, de la cual derivan dos


especializaciones: Cliente y Empleado. Se decidió emplear herencia para
evitar redundancia de datos.
• Un Cliente puede tener recetas o no, permitiendo también cubrir casos donde
se compren medicamentos de venta libre.
• Cada Receta puede estar relacionada con varios medicamentos, y a su vez,
cada medicamento puede aparecer en múltiples recetas. Para esta relación de
muchos a muchos, se ha creado Medicamento_Prescrito, que permite
además registrar datos adicionales.
• El autor de cada receta es un Doctor. No es considerado una subclase de
persona ya que su información personal tiene mínima relación con la farmacia.
• Los Empleados son de varios cargos desde limpieza hasta seguridad por lo
cual pueden tener de 0 a muchas ventas, también tienen superiores en el
ambiente laboral (jefes).

4
• Las Ventas agregan un Detalle de Venta, cada uno de los cuales representa
una venta individual. Esta agregación asegura que, si se elimina una venta,
sus detalles no deben de desaparecer o no tienen ¿por qué? ya que forma
parte del registro.
• Cada Lote pertenece a un Medicamento, con una relación de composición,
porque un lote no existe sin su medicamento. Esto garantiza integridad, un
medicamento puede tener muchos lotes según fecha de vencimiento, pero un
lote siempre corresponde a un solo producto.
• Los Medicamentos pueden ser abastecidos por uno o más Proveedores, y a
su vez un proveedor puede suministrar distintos medicamentos. Esta relación
de muchos a muchos se representó mediante una entidad asociativa llamada
Proveedor_Medicamento, cumpliendo con las buenas prácticas de
normalización.

3.- Diseño Lógico

PERSONA
PK FK
CI NOMBRE_COMPLETO TELÉFONO DIRECCION SALARIO CARGO FECHA_INGRESO CI_JEFE TIPO_C TIPO_E
1001 Ana Pérez 78945612 Calle 1 5000.00 Cajera 1/1/2022 1 1
1002 Luis Gómez 77889900 Av. Bolívar 4000.00 Auxiliar 10/5/2022 1001 0 1
1003 Carlos Rojas 76543210 Calle Luna 1 0
1004 Lucía Díaz 71234567 Av. Sol 4500.00 Encargada 15/3/2023 1001 0 1
1005 Paola Vargas 71230001 Calle Sur 1 0

DOCTOR
PK
MATRICULA NOMBRE_COMPLETO ESPECIALIDAD
1 Dr. Alberto Ruiz Pediatría
2 Dra. Marta Ríos Medicina General

RECETA
PK FK FK
ID FECHA OBSERVACIONES CI_CLIENTE MATRICULA_DOCTOR
1 1/6/2025 Tomar con agua 1001 1
2 5/6/2025 Antes de dormir 1003 2

MEDICAMENTO
PK
ID NOMBRE_COMERCIAL PRINCIPIO_ACTIVO PRESENTACION REQUIERE_RECETA
200 Paracetamol Acetaminofén Tabletas 1
201 Ibuprofeno Ibuprofeno Cápsulas 0
202 Amoxicilina Amoxicilina Jarabe 1

MEDICAMENTO_PRESCRITO
PK/FK PK/FK
ID_RECETA ID_MEDICAMENTO CANTIDAD INDICACIONES
1 200 10 Cada 8h
1 202 5 Cada 12h
2 200 6 Cada 6h

LOTE
PK PK/FK
ID ID_MEDICAMENTO FECHA_VENCIMIENTO STOCK PRECIO_UNITARIO
1 200 1/1/2026 100 2.50
2 201 15/12/2025 50 3.00
3 202 10/10/2025 20 5.50

PROVEEDOR
PK
ID RAZON_SOCIAL TELEFONO DIRECCION
1 BIOFARM 70112233 Calle Comercio 88
2 Medicentro SRL 70223344 Av. Principal 45

5
PROVEEDOR_MEDICAMENTO
PK/FK PK/FK
ID_PROVEEDOR ID_MEDICAMENTO
1 200
1 201
2 202

VENTA
PK FK FK
ID FECHA TOTAL CI_CLIENTE CI_EMPLEADO
1 10/6/2025 25.00 1003 1001
2 11/6/2025 10.00 1005 1004

DETALLE_VENTA
PK FK FK
ID CANTIDAD PRECIO_UNITARIO ID_VENTA ID_LOTE
1 1 1 5 2.50
2 1 2 2 3.00
3 2 2 1 3.00

4.- Diseño Físico

CREATE DATABASE Farmacia;


USE Farmacia;

CREATE TABLE persona (


ci INT PRIMARY KEY,
nombre_completo VARCHAR(100) NOT NULL,
telefono VARCHAR(10),
direccion VARCHAR(70),
cargo VARCHAR(50),
salario DECIMAL(10,2),
fecha_ingreso DATE,
jefe INT,
tipo_cliente BOOLEAN, -- 1 si es cliente
tipo_empleado BOOLEAN, -- 1 si es empleado
FOREIGN KEY (jefe) REFERENCES persona(ci)
ON UPDATE CASCADE
ON DELETE SET NULL
);

INSERT INTO persona VALUES (1001, 'Ana Pérez', '78945612', 'Calle 1', 'Cajera', 5000.00,
'2022-01-01', NULL, 1, 1);
INSERT INTO persona VALUES (1002, 'Luis Gómez', '77889900', 'Av. Bolívar', 'Auxiliar',
4000.00, '2022-05-10', 1001, 0, 1);
INSERT INTO persona VALUES (1003, 'Carlos Rojas', '76543210', 'Calle Luna', NULL, NULL,
NULL, NULL, 1, 0);
INSERT INTO persona VALUES (1004, 'Lucía Díaz', '71234567', 'Av. Sol', 'Encargada', 4500.00,
'2023-03-15', 1001, 0, 1);
INSERT INTO persona VALUES (1005, 'Paola Vargas', '71230001', 'Calle Sur', NULL, NULL, NULL,
NULL, 1, 0);

6
CREATE TABLE doctor (
matricula INT PRIMARY KEY,
nombre_completo VARCHAR(100) NOT NULL,
especialidad VARCHAR(60)
);

INSERT INTO doctor VALUES (1, 'Dr. Alberto Ruiz', 'Pediatría');


INSERT INTO doctor VALUES (2, 'Dra. Marta Ríos', 'Medicina General');

CREATE TABLE proveedor (


id INT AUTO_INCREMENT PRIMARY KEY,
razon_social VARCHAR(50),
telefono VARCHAR(10),
direccion VARCHAR(70)
);

INSERT INTO proveedor VALUES (1, 'BIOFARM', '70112233', 'Calle Comercio 88');
INSERT INTO proveedor VALUES (2, 'MEDICENTRO SRL', '70223344', 'Av. Principal 45');

CREATE TABLE medicamento (


id INT AUTO_INCREMENT PRIMARY KEY,
nombre_comercial VARCHAR(100),
principio_activo VARCHAR(100),
presentacion VARCHAR(100),
requiere_receta BOOLEAN NOT NULL
);

INSERT INTO medicamento VALUES (200, 'Paracetamol', 'Acetaminofén', 'Tabletas', TRUE);


INSERT INTO medicamento VALUES (201, 'Ibuprofeno', 'Ibuprofeno', 'Cápsulas', FALSE);
INSERT INTO medicamento VALUES (202, 'Amoxicilina', 'Amoxicilina', 'Jarabe', TRUE);

CREATE TABLE lote (


id INT AUTO_INCREMENT PRIMARY KEY,
id_medicamento INT NOT NULL,
fecha_vencimiento DATE,
stock INT,
precio_unitario DECIMAL(10,2),
FOREIGN KEY (id_medicamento) REFERENCES medicamento(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);

INSERT INTO lote VALUES (1, 200, '2026-01-01', 100, 2.50);


INSERT INTO lote VALUES (2, 201, '2025-12-15', 50, 3.00);
INSERT INTO lote VALUES (3, 202, '2025-10-10', 20, 5.50);

7
CREATE TABLE proveedor_medicamento (
id_proveedor INT,
id_medicamento INT,
PRIMARY KEY (id_proveedor, id_medicamento),
FOREIGN KEY (id_proveedor) REFERENCES proveedor(id)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (id_medicamento) REFERENCES medicamento(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);

INSERT INTO proveedor_medicamento VALUES (1, 200);


INSERT INTO proveedor_medicamento VALUES (1, 201);
INSERT INTO proveedor_medicamento VALUES (2, 202);

CREATE TABLE venta (


id INT AUTO_INCREMENT PRIMARY KEY,
fecha DATE NOT NULL,
total DECIMAL(10,2),
ci_cliente INT NOT NULL,
ci_empleado INT,
FOREIGN KEY (ci_cliente) REFERENCES persona(ci)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (ci_empleado) REFERENCES persona(ci)
ON UPDATE CASCADE
ON DELETE SET NULL
);

INSERT INTO venta VALUES (1, '2025-06-10', 25.00, 1003, 1001);


INSERT INTO venta VALUES (2, '2025-06-11', 10.00, 1005, 1004);

CREATE TABLE detalle_venta (


id INT AUTO_INCREMENT PRIMARY KEY,
id_venta INT NOT NULL,
id_lote INT NOT NULL,
cantidad INT NOT NULL,
precio_unitario DECIMAL(10,2),
FOREIGN KEY (id_venta) REFERENCES venta(id)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (id_lote) REFERENCES lote(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);

INSERT INTO detalle_venta VALUES (1, 1, 1, 5, 2.50);


INSERT INTO detalle_venta VALUES (2, 1, 2, 2, 3.00);
INSERT INTO detalle_venta VALUES (3, 2, 2, 1, 3.00);

8
CREATE TABLE receta (
id INT AUTO_INCREMENT PRIMARY KEY,
fecha DATE NOT NULL,
observaciones VARCHAR(100),
ci_cliente INT NOT NULL,
matricula_doctor INT NOT NULL,
FOREIGN KEY (ci_cliente) REFERENCES persona(ci)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (matricula_doctor) REFERENCES doctor(matricula)
ON UPDATE CASCADE
ON DELETE CASCADE
);

INSERT INTO receta VALUES (1, '2025-06-01', 'Tomar con agua', 1001, 1);
INSERT INTO receta VALUES (2, '2025-06-05', 'Antes de dormir', 1003, 2);

CREATE TABLE medicamento_prescrito (


id_receta INT,
id_medicamento INT,
cantidad INT,
indicaciones VARCHAR(100),
PRIMARY KEY (id_receta, id_medicamento),
FOREIGN KEY (id_receta) REFERENCES receta(id)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (id_medicamento) REFERENCES medicamento(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);

INSERT INTO medicamento_prescrito VALUES (1, 200, 10, 'Cada 8h');


INSERT INTO medicamento_prescrito VALUES (1, 202, 5, 'Cada 12h');
INSERT INTO medicamento_prescrito VALUES (2, 200, 6, 'Cada 6h');

#Listar todas ventas realizadas mostrando el nombre del cliente y el total de la venta

SELECT [Link], [Link], p.nombre_completo AS cliente, [Link]


FROM venta v, persona p
WHERE v.ci_cliente = [Link];

#Listar todos los empleados con su jefe

SELECT e.nombre_completo AS empleado, j.nombre_completo AS jefe


FROM persona e, persona j
WHERE [Link] = [Link] AND e.tipo_empleado = 1;

#Listar todas las recetas emitidas por la Dra. Marta Ríos

SELECT [Link], [Link], p.nombre_completo AS cliente


FROM receta r, persona p, doctor d
WHERE r.ci_cliente = [Link] AND r.matricula_doctor = [Link] AND d.nombre_completo = 'Dra.
Marta Ríos';

9
#Medicamentos y sus proveedores

SELECT m.nombre_comercial, p.razon_social


FROM proveedor_medicamento pm, medicamento m, proveedor p
WHERE pm.id_medicamento = [Link] AND pm.id_proveedor = [Link];

10

También podría gustarte