Informe BDII GRUPO 7 Sistema de Ventas de Comida Rapida
Informe BDII GRUPO 7 Sistema de Ventas de Comida Rapida
Docente:
Ph.D. Rogelio Mamani Ramos
La Paz – Bolivia
2025
ÍNDICE
ÍNDICE................................................................................................................................... 2
I. INTRODUCCIÓN .......................................................................................................... 4
V. APLICACIÓN ........................................................................................................... 25
5.1. CREACIÓN DE LA BASE DE DATOS .................................................................. 25
BIBLIOGRAFÍA .................................................................................................................. 50
1.2. PROBLEMAS
- Seguimiento de entregas ineficiente: No hay un sistema que permita rastrear en tiempo real
el estado de los pedidos y las asignaciones de repartidores.
La empresa CRUNCH & GO carece de un sistema de base de datos que permita la gestión
eficiente y automatizada de todos los procesos relacionados con la venta de comida rápida,
desde la administración de productos y clientes hasta el procesamiento completo de pedidos
y entregas, lo que genera ineficiencias operativas, pérdida de oportunidades de negocio y una
experiencia de usuario subóptima.
1.3. OBJETIVOS
- Diseñar una estructura de base de datos que garantice la integridad referencial y minimice
la redundancia de datos.
1.4. JUSTIFICACIÓN
La implementación de este sistema de base de datos se justifica por múltiples factores
estratégicos y operativos. En primer lugar, la industria de comida rápida requiere procesos
ágiles y eficientes para mantener la competitividad en un mercado cada vez más exigente.
Un sistema automatizado reduce significativamente los errores humanos y los tiempos de
procesamiento.
Finalmente, la escalabilidad del sistema garantiza que pueda adaptarse al crecimiento futuro
de la empresa, soportando mayores volúmenes de transacciones y funcionalidades
adicionales sin comprometer el rendimiento.
2. REQUERIMIENTOS
2.1. DIAGNÓSTICO
Métodos Utilizados:
Técnicas e Instrumentos:
- Para definir interacciones específicas entre actores y sistema, también se realizó casos de
uso.
- Se realizo un análisis minucioso para asegurar que todos los requerimientos estén cubiertos
en el diseño.
Se empleó el modelo E-R para identificar entidades principales, sus atributos y las relaciones
entre ellas. Esta técnica permitió establecer la estructura conceptual base del sistema.
Casos de uso:
CLIENTE
Objetivo: Realizar pedidos y gestionar su experiencia.
CAJERO
Caso de Uso Descripción
REPARTIDOR
Gestión de Usuarios:
El sistema debe manejar diferentes tipos de usuarios (clientes, empleados y rol de empleados)
con permisos y funcionalidades específicas. Esto requiere un diseño que permita
escalabilidad en roles futuros.
Flujo Completo de Pedidos:
Control en tiempo real de stock con alertas automáticas, fundamental para evitar ventas de
productos no disponibles.
Marketing y Fidelización:
Comunicación Integrada:
Sistema de chat y notificaciones que mantenga a los clientes informados sobre el estado de
sus pedidos.
Subsistema de Marketing:
Subsistema de Entregas:
- Asignación de repartidores
- Seguimiento de entregas
Subsistema de Comunicación:
PostgreSQL:
Motor de base de datos relacional elegido por su robustez, capacidades avanzadas y soporte
para características empresariales como triggers, funciones y procedimientos almacenados.
Draw.io:
Estándares de Nomenclatura:
El modelo E-R del sistema presenta las siguientes entidades principales y sus relaciones:
Entidades Principales:
Relaciones Principales:
-- Tabla usuario
CREATE TABLE usuario (
id_usuario SERIAL PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
correo VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
tipo_usuario VARCHAR(20) NOT NULL,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabla rol
CREATE TABLE rol (
id_rol SERIAL PRIMARY KEY,
nombre_rol VARCHAR(50) NOT NULL,
descripcion TEXT,
permisos TEXT
);
-- Tabla empleado
CREATE TABLE empleado (
id_empleado SERIAL PRIMARY KEY,
id_usuario INT NOT NULL UNIQUE REFERENCES usuario(id_usuario),
id_rol INT REFERENCES rol(id_rol),
telefono VARCHAR(20),
fecha_ingreso DATE DEFAULT CURRENT_DATE
);
-- Tabla cliente
CREATE TABLE cliente (
id_cliente SERIAL PRIMARY KEY,
id_usuario INT NOT NULL UNIQUE REFERENCES usuario(id_usuario),
cedula_identidad VARCHAR(20) UNIQUE,
telefono VARCHAR(20)
);
-- Tabla categoria
CREATE TABLE categoria (
id_categoria SERIAL PRIMARY KEY,
nombre_categoria VARCHAR(100) NOT NULL,
descripcion TEXT
);
-- Tabla producto
CREATE TABLE producto (
id_producto SERIAL PRIMARY KEY,
nombre_producto VARCHAR(100) NOT NULL,
descripcion TEXT,
precio DECIMAL(8,2) NOT NULL,
imagen TEXT,
disponible BOOLEAN DEFAULT TRUE,
id_categoria INT REFERENCES categoria(id_categoria)
);
-- Tabla inventario
CREATE TABLE inventario (
id_inventario SERIAL PRIMARY KEY,
id_producto INT UNIQUE REFERENCES producto(id_producto),
cantidad INT NOT NULL,
stock_minimo INT,
fecha_actualizacion DATE DEFAULT CURRENT_DATE
);
-- Tabla promocion
CREATE TABLE promocion (
id_promocion SERIAL PRIMARY KEY,
titulo VARCHAR(100),
descripcion TEXT,
activa BOOLEAN DEFAULT TRUE,
monto INTEGER,
fecha_inicio DATE,
fecha_fin DATE
);
-- Tabla campania
CREATE TABLE campania (
id_campania SERIAL PRIMARY KEY,
nombre VARCHAR(100),
descripcion TEXT,
activa BOOLEAN DEFAULT TRUE,
fecha_inicio DATE,
fecha_fin DATE
);
-- Tabla cupon
CREATE TABLE cupon (
id_cupon SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL UNIQUE,
descripcion TEXT,
descuento NUMERIC(5,2),
fecha_inicio DATE,
fecha_fin DATE,
uso_maximo INT,
usado INT DEFAULT 0,
id_campania INT REFERENCES campania(id_campania)
);
-- Tabla pedido
CREATE TABLE pedido (
id_pedido SERIAL PRIMARY KEY,
id_cliente INT REFERENCES cliente(id_cliente),
fecha_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
estado VARCHAR(30),
metodo_entrega VARCHAR(30),
direccion_entrega TEXT,
total DECIMAL(10,2),
id_cupon INT REFERENCES cupon(id_cupon)
);
-- Tabla detalle_pedido
CREATE TABLE detalle_pedido (
id_detalle SERIAL PRIMARY KEY,
id_pedido INT REFERENCES pedido(id_pedido),
id_producto INT REFERENCES producto(id_producto),
cantidad INT,
precio_unitario DECIMAL(8,2)
);
-- Tabla pago
CREATE TABLE pago (
id_pago SERIAL PRIMARY KEY,
id_pedido INT REFERENCES pedido(id_pedido),
metodo_pago VARCHAR(50),
monto DECIMAL(10,2),
fecha_pago TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
estado_pago VARCHAR(50)
);
-- Tabla comentario
CREATE TABLE comentario (
id_comentario SERIAL PRIMARY KEY,
id_pedido INT REFERENCES pedido(id_pedido),
id_cliente INT REFERENCES cliente(id_cliente),
calificacion INT,
texto TEXT,
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabla chat
CREATE TABLE chat (
id_chat SERIAL PRIMARY KEY,
id_cliente INT REFERENCES cliente(id_cliente),
id_empleado INT REFERENCES empleado(id_empleado),
mensaje TEXT,
fecha_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
tipo VARCHAR(20)
);
-- Tabla notificacion
CREATE TABLE notificacion (
id_notificacion SERIAL PRIMARY KEY,
id_cliente INT REFERENCES cliente(id_cliente),
mensaje TEXT,
leido BOOLEAN DEFAULT FALSE,
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabla direccion_cliente
CREATE TABLE direccion_cliente (
id_direccion SERIAL PRIMARY KEY,
id_cliente INT REFERENCES cliente(id_cliente),
direccion TEXT,
referencia TEXT,
ciudad VARCHAR(100),
latitud NUMERIC(10,6),
longitud NUMERIC(10,6),
activa BOOLEAN DEFAULT TRUE
);
-- Tabla asignacion_repartidor
CREATE TABLE asignacion_repartidor (
id_asignacion SERIAL PRIMARY KEY,
id_pedido INT REFERENCES pedido(id_pedido),
id_empleado INT REFERENCES empleado(id_empleado),
fecha_asignacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
estado_entrega VARCHAR(30)
);
/*
╔════════════════════════════════════════════════════╗
║ inserción de datos a las tablas ║
╚════════════════════════════════════════════════════╝
*/
Extraído de PostgreSQL
La función retorna una tabla con los siguientes campos: ID de la promoción, título,
descripción, monto de descuento, fecha de inicio y fecha de finalización. Esta función fue
diseñada para facilitar la consulta rápida de promociones vigentes desde el sistema web,
permitiendo su visualización en una tabla accesible desde una interfaz PHP. Gracias a esta
función, se mejora la eficiencia del sistema al centralizar la lógica de filtrado dentro de la
base de datos.
Codigo php
<?php
include "layout.php"; // incluye la barra lateral y encabezado
include "database/conf.php"; // conexión a la BD
?>
if ($result) {
echo "<div class='alert alert-success text-center w-75 mx-auto'>
<strong>Éxito:</strong> El pago fue registrado
correctamente.
</div>";
} else {
echo "<div class='alert alert-danger text-center w-75 mx-auto'>
<strong>Error:</strong> No se pudo registrar el pago. "
. pg_last_error($conn) . "
</div>";
}
}
?>
Codigo php
<?php
session_start();
require 'database/conf.php';
function deletePedido($id_pedido) {
global $conn;
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Gestión de Pedidos</title>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.cs
s">
</head>
<body class="bg-light">
<?php include "layout.php"; ?>
<div class="table-responsive">
<table class="table table-bordered table-hover align-middle">
<thead class="table-light">
<tr>
<th>ID</th>
<th>ID Cliente</th>
<th>Estado</th>
<th>Método Entrega</th>
<th>Dirección Entrega</th>
<th>Total</th>
<th>Actualizar</th>
<th>Eliminar</th>
</tr>
</thead>
<tbody>
<?php while ($row = pg_fetch_assoc($result_pedidos)): ?>
<tr>
<form method="POST" class="row g-1">
<td>
<input type="hidden" name="id_pedido" value="<?=
htmlspecialchars($row['id_pedido']) ?>">
<?= htmlspecialchars($row['id_pedido']) ?>
</td>
<td><input type="number" class="form-control"
name="id_cliente" value="<?= htmlspecialchars($row['id_cliente']) ?>"
required></td>
<td><input type="text" class="form-control"
name="estado" value="<?= htmlspecialchars($row['estado']) ?>" required></td>
<td><input type="text" class="form-control"
name="metodo_entrega" value="<?= htmlspecialchars($row['metodo_entrega'])
?>" required></td>
<td><input type="text" class="form-control"
name="direccion_entrega" value="<?=
htmlspecialchars($row['direccion_entrega']) ?>" required></td>
<td><input type="number" step="0.01" class="form-
control" name="total" value="<?= htmlspecialchars($row['total']) ?>"
required></td>
<td>
<input type="hidden" name="action"
value="update_pedido">
<button type="submit" class="btn btn-sm btn-
warning">Actualizar</button>
</td>
</form>
<td>
<form method="POST" style="display:inline;">
<input type="hidden" name="action"
value="delete_pedido">
<input type="hidden" name="id_pedido" value="<?=
htmlspecialchars($row['id_pedido']) ?>">
<button type="submit" class="btn btn-sm btn-
danger" onclick="return confirm('¿Eliminar pedido?');">Eliminar</button>
</form>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
</div>
<script
src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.m
in.js"></script>
</body>
</html>
6. RESULTADOS
6.1. SELECCIÓN DE DATOS
BIBLIOGRAFÍA
1. Silberschatz, A., Galvin, P. B., & Gagne, G. (2018). Operating System Concepts
(10th ed.). John Wiley & Sons. Capítulos relacionados con sistemas de bases de datos
y gestión de transacciones.
2. Elmasri, R., & Navathe, S. B. (2019). Fundamentals of Database Systems (7th ed.).
Pearson. Texto fundamental para diseño de bases de datos relacionales y
normalización.
3. Ramakrishnan, R., & Gehrke, J. (2017). Database Management Systems (3rd ed.).
McGraw-Hill Education. Enfoque práctico en diseño e implementación de sistemas
de bases de datos.
4. Korth, H. F., & Silberschatz, A. (2019). Database System Concepts (7th ed.).
McGraw-Hill. Conceptos avanzados de diseño y optimización de bases de datos.
5. Hernández, R., Fernández, C., & Baptista, P. (2020). Metodología de la Investigación
(6ta ed.). McGraw-Hill. Metodologías aplicadas en el levantamiento de
requerimientos.
6. Pressman, R. S., & Maxim, B. R. (2019). Software Engineering: A Practitioner's
Approach (9th ed.). McGraw-Hill. Ingeniería de software aplicada a sistemas de
información.
SITIOS ACADÉMICOS