Created
December 2, 2019 00:16
-
-
Save ebobby/c85c06bd46f525bebb978bb0b740fc15 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| \documentclass[12pt, a4paper]{article} | |
| \usepackage{graphicx} | |
| \graphicspath{ {images/} } | |
| \usepackage[spanish]{babel} | |
| \usepackage{listings} | |
| \lstset{basicstyle=\fontsize{10}{13}\selectfont\ttfamily} | |
| \begin{document} | |
| \begin{titlepage} | |
| \begin{center} | |
| \vspace{1.0cm} | |
| {\huge\scshape{\textbf{Sistema de administración de barra de \textbf{Kraken | |
| Gastropub}}} \par} | |
| \vspace{1.2cm} | |
| {\large Trabajo final: \textbf{Bases de Datos}\par} | |
| \vfill | |
| {\large\scshape Presentado Por: \par} | |
| {\Large\scshape\textbf{Francisco Antonio Muñoz Soto} \par} | |
| \vspace{2.5cm} | |
| \small | |
| {\scshape División de estudios de posgrado e investigación \par} | |
| {\scshape Instituto Tecnológico de Hermosillo \par} | |
| {\scshape Hermosillo, Sonora, México \par} | |
| {\large \today\par} | |
| \end{center} | |
| \end{titlepage} | |
| \tableofcontents | |
| \newpage | |
| \section{Descripción de la empresa} | |
| \textit{Kraken Gastropub} es un restaurante-bar donde se fusiona la comida | |
| americana tradicional y las mejores cervezas artesanales de la región. Se | |
| encuentra localizado en la ciudad de Hermosillo, Sonora, México. | |
| \newpage | |
| \section{Requerimientos} | |
| Se modela el proceso de recepción de barriles de cerveza artesanal en el | |
| local, el cálculo de costos y precios y el control de inventario, es decir, | |
| producto restante en el barril. | |
| \subsection{Recepción} | |
| La información que se tiene al momento de recibir un barril son: cantidad de | |
| líquido, precio del barril y desglose de impuestos, las características de la | |
| cerveza y la cervecería. | |
| \bigskip | |
| El sistema debe de recibir esta información y guardar en catálogos la cervecería | |
| (nombre, dirección web, log) y la cerveza (estilo, nombre, abv, ibus, | |
| descripción). Es posible recibir varias cervezas de la misma cervecería y | |
| recibir la misma cerveza también, es decir, con los mismos atributos. | |
| \bigskip | |
| Utilizando la cantidad de líquido, el precio del barril y el desglose de | |
| impuestos el sistema deberá calcular: | |
| \begin{itemize} | |
| \item Costo total, con impuestos. | |
| \item Onzas recibidas en el barril. | |
| \item Onzas totales de venta después de merma (configurable). | |
| \item Costo por onza. | |
| \item Precio de venta normal al público por onza. | |
| \item Precio de venta promoción al público por onza. | |
| \item Fecha de recepción del barril. | |
| \end{itemize} | |
| \subsection{Control de inventarios} | |
| El sistema deberá permitir la captura de venta diaria por barril que consiste en | |
| vasos vendidos, venta total y día de la venta. Con estos datos el sistema | |
| calculará: | |
| \begin{itemize} | |
| \item Onzas vendidas. | |
| \item Onzas vendidas en total. | |
| \item Ventas totales del barril. | |
| \item Ganancia del barril (venta - costo). | |
| \item Onzas y vasos restantes. | |
| \end{itemize} | |
| Es posible que vasos restantes se haga negativo. Es decir, que se estima un | |
| número determinado de vasos por la merma y el barril dio más. | |
| \bigskip | |
| El sistema también debe permitir marcar un barril como terminado lo cual cerrara | |
| cualquier registro de venta y el despliegue del barril como activo en barra. | |
| \newpage | |
| \section{Propuesta} | |
| \subsection{Diagrama E-R.} | |
| \includegraphics{diagrama-er} | |
| \subsection{Diagrama relacional} | |
| \includegraphics[scale=0.70]{diagrama-relacional} | |
| \subsection{Verificación de 3ra. forma normal} | |
| La base de datos no se encuentra en tercera forma funcional (3NF) de manera | |
| intencional. | |
| \bigskip | |
| Aunque se puede obtener los totales de venta por barril y de onzas vendidas | |
| utilizando la tabla \textbf{keg\_sales}, estos datos se agregan y se redundan en | |
| la tabla \textbf{kegs}. | |
| \bigskip | |
| Esto se debe a algunas de las consultas que deben realizarse. Se ocupan que sean | |
| mas sencillas y más rápidas por los requerimientos de hardware del sistema. | |
| \newpage | |
| \section{Procesos} | |
| \subsection{Barriles activos} | |
| \begin{lstlisting}[language=SQL] | |
| SELECT | |
| k.id keg_id, | |
| b.style beer_style, | |
| br.name brewery_name, | |
| ROUND(k.price_per_ounce, 2) ppo, | |
| ROUND(k.price_per_ounce_promo, 2) ppop, | |
| ROUND(current_sales, 2) sales, | |
| ROUND(estimated_ounces - sold_ounces,2) lo | |
| FROM kegs k | |
| JOIN beers b ON b.id = k.beer_id | |
| JOIN breweries br ON br.id = b.brewery_id | |
| WHERE k.finished_at IS NULL; | |
| keg_id | beer_style | ppo | ppop | sales | lo | |
| ---------+-------------------+------+------+---------+-------- | |
| 311 | PALE ALE | 6.25 | 5.00 | 320.00 | 486.10 | |
| 325 | coffe stout | 6.25 | 4.58 | 1322.50 | 324.10 | |
| 327 | chocolate stout | 6.25 | 5.00 | 2340.05 | 144.10 | |
| 328 | CALIFORNIA COMMON | 5.42 | 4.17 | 1095.00 | 261.65 | |
| 330 | chocolate stout | 6.25 | 5.00 | 2396.24 | 120.10 | |
| 332 | PALE ALE | 5.83 | 4.58 | 1757.50 | 228.10 | |
| 333 | AMERICAN WHEAT | 6.25 | 5.00 | 1267.50 | 336.10 | |
| 334 | mazapan stout | 5.83 | 4.17 | 2477.49 | 108.10 | |
| 335 | irish red | 5.83 | 4.17 | 2080.00 | 186.10 | |
| 336 | pilsner | 6.25 | 5.00 | 2396.24 | 150.10 | |
| 337 | NEIPA | 7.50 | 5.83 | 1917.50 | 264.10 | |
| 338 | imperial porter | 6.25 | 5.00 | 682.50 | 444.10 | |
| 339 | NEIPA | 6.67 | 5.00 | 1477.50 | 312.10 | |
| \end{lstlisting} | |
| \newpage | |
| \subsection{Ventas por mes} | |
| \begin{lstlisting}[language=SQL] | |
| SELECT | |
| EXTRACT(month from sold_at) AS month, | |
| EXTRACT(year from sold_at) AS year, | |
| ROUND(SUM(amount), 2) sales, | |
| ROUND(SUM(ounces), 2) ounces | |
| FROM keg_sales | |
| GROUP by 1,2 | |
| ORDER by 2 DESC, 1 DESC; | |
| month | year | sales | ounces | |
| -------+------+----------+---------- | |
| 6 | 2019 | 41121.22 | 7050.00 | |
| 5 | 2019 | 75252.05 | 13272.00 | |
| 4 | 2019 | 62197.37 | 11148.00 | |
| 3 | 2019 | 73786.91 | 12924.00 | |
| 2 | 2019 | 52051.62 | 9420.00 | |
| 1 | 2019 | 71505.94 | 12786.00 | |
| 12 | 2018 | 68706.69 | 12264.00 | |
| 11 | 2018 | 77294.80 | 13878.00 | |
| 10 | 2018 | 72428.05 | 13152.00 | |
| 9 | 2018 | 71871.11 | 13974.00 | |
| 8 | 2018 | 70039.85 | 12666.00 | |
| 7 | 2018 | 70969.37 | 12270.00 | |
| 6 | 2018 | 77031.99 | 14016.00 | |
| 5 | 2018 | 4262.48 | 768.00 | |
| \end{lstlisting} | |
| \newpage | |
| \subsection{Ventas por cervecería} | |
| \begin{lstlisting}[language=SQL] | |
| SELECT | |
| br.name, | |
| ROUND(SUM(amount), 2) sales, | |
| ROUND(SUM(ounces), 2) ounces | |
| FROM keg_sales ks | |
| JOIN kegs k ON k.id = ks.keg_id | |
| JOIN beers b ON b.id = k.beer_id | |
| JOIN breweries br ON br.id = b.brewery_id | |
| GROUP BY br.id ORDER BY 2 DESC; | |
| name | sales | ounces | |
| --------------------------+-----------+---------- | |
| El Bandido Cerveceria | 184268.29 | 33888.00 | |
| Buqui Bichi Brewing | 129818.40 | 23130.00 | |
| Isla Negra Cerveceria | 109171.74 | 19986.00 | |
| GILA Cerveza Artesanal | 109142.12 | 18834.00 | |
| 662 Cerveceria | 93280.46 | 15840.00 | |
| Cerveceria Venado | 66072.40 | 12078.00 | |
| SOHA Cerveza Artesanal | 54848.72 | 9462.00 | |
| Lucky Monkey Brewing Co. | 40240.21 | 7422.00 | |
| Cerveceria B55 | 38871.03 | 7206.00 | |
| Cerveceria Argova | 37304.50 | 6948.00 | |
| Cerveceria Velodromo | 22954.08 | 4260.00 | |
| Octopus Brewing | 2547.50 | 534.00 | |
| \end{lstlisting} | |
| \newpage | |
| \section{Requerimientos del sistema} | |
| \subsection{Hardware} | |
| Los requerimientos del sistema son mínimos en términos de hardware: | |
| \begin{itemize} | |
| \item 1GB memoria RAM | |
| \item 1 vCPU | |
| \item 20GB de almacenamiento | |
| \end{itemize} | |
| \bigskip | |
| Para el propósito de correr la aplicación se utiliza un ``droplet'' en | |
| Digital Ocean\footnote{https://www.digitalocean.com}. El costo del droplet es de | |
| \$5 USD mensuales. | |
| \subsection{Software} | |
| \begin{itemize} | |
| \item Ruby 2.5.1 | |
| \item Bundler 1.16.2 | |
| \item Nginx 1.10.3 | |
| \item PostgreSQL 10.11 | |
| \end{itemize} | |
| \end{document} | |
| %%% Local Variables: | |
| %%% mode: latex | |
| %%% TeX-master: t | |
| %%% End: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment