Implementación una base de datos que almacene la información relativa a una tarjeta de crédito utilizando PostgreSQL y BoltDB.

Bases de Datos I: Trabajo Práctico

1. Introducción

El objetivo del trabajo práctico es implementar una base de datos que almacene la información relativa a una tarjeta de crédito. A su vez desarrollar funciones capaces de cargar instancias de los datos, autorizar una compra, generar un resumen de una tarjeta y generar alertas a los clientes en caso de ciertas irregularidades. Por último, para poder comparar el modelo relacional con un modelo no relacional NoSQL, se implementa una base de datos NoSQL (BoltDB) basada en JSON, la cual carga tres instancias de datos de 3 entidades pertenecientes a la base de datos.

2. Descripción

En esta sección se describen las principales dificultades que fueron apareciendo a lo largo del trabajo y las soluciones de las mismas.

En la autorización de compra

Con respecto a la autorización de la compra, la principal dificultad estuvo en delimitar las diferentes condiciones propuestas para determinar que una compra fue aprobada o rechazada. Se opto por la implementación de un método auxiliar que vaya agregando los rechazos cada vez que se producían en la tabla correspondiente y a la vez determinar la cantidad de rechazos introducidos por cada tarjeta, ya que era otra condición requerida en la sección de alertas.

En la generación del resumen

En este apartado el principal problema fue poder identificar que el campo de una tabla se encontrara vacío ya que si el campo estaba vacío el numero de resumen debería solamente comenzar con 1, en cambio si no lo estaba lo que debería hacer es buscar el ultimo numero de resumen para luego incrementar en 1 su valor y obtener el numero de resumen que necesitamos. La solución fue utilizar la sentencia <campo > IS NOT NULL para ver si el campo estaba vacío y para el otro caso hacer un MAX() del campo para hallar el ultimo numero de resumen añadido.

En las alertas a los clientes

En este desarrollo, nuestra mayor dificultad se encontró al momento de ordenar los diferentes requerimientos respecto a las condiciones en las cuales se debía cargar una alerta. Por lo que se decidió realizar diferentes funciones para dividir las cláusulas pedidas. En primer lugar, se dispuso a crear una función que agregue una alerta cada vez que se realizaba un rechazo. Después se decidió chequear los limites de rechazos cuando se rechazaba una compra, para ir determinado las alertas agregadas. Posteriormente, se decidió realizar una función aparte que controle la diferencia de tiempos entre compras y localizaciones. En el ultimo caso, la principal dificultad fue investigar nuevos métodos para el manejo de timestamps y tener en claro las condiciones pedidas.

3. Implementación

Al momento de implementar la base de datos SQL se opto hacerlo mediante el RDBMS postgreSQL. Por otro lado para introducir toda la inteligencia y datos fue utilizado el lenguaje de programación GO. Para ello se implementaron 6 módulos los cuales serán descriptos a continuación:

Módulo Main
  • Es el modulo principal, su principal función es actuar de mediador entre el programa y el usuario, para ello muestra un menú por consola, el cual permite realizar acciones tales como crear la base de datos, cargar tablas en ella, cargar foreign keys y primary keys, cargar las tablas etc.

Código de main.go
link:main.go[]
Módulo SQL
  • Este modulo funciona como una capa de abstracción entre el modulo main y los stored procedures de la base de datos, también contiene algunos métodos básicos para la creación de base de datos. .Código de main.go

link:funciones/sql.go[]
Módulo Tablas
  • Este modulo se encarga de hacer todas las querys necesarias para crear y cargar las tablas en la base de datos.

link:funciones/tablas.go[]
Módulo StoredProcedures
  • Este modulo define todos los Stored Procedures utilizados en el trabajo.

link:funciones/storedProcedures.go[]
Módulo cargarSPsyTriggers
  • Este modulo se encarga de cargar los triggers y los stored procedures en la base de datos.

link:funciones/cargarSPsyTriggers.go[]
Módulo NoSql
  • Este modulo contiene todas las funciones necesarias para tratar con la base de datos no SQL basada en JSON.

link:funciones/nosql.go[]

4. Conclusiones

Ya al final, podemos decir que a pesar del desafió que significó el trabajo práctico, no solo pudimos hacerle frente, sino que también mejoramos nuestras habilidades sobre el manejo de una base de datos secuencial, sobre git y aprendimos a programar en GO.

Durante el desarrollo del trabajo, nos encontramos con problemas de los cuales sacamos nuevos conocimientos ya sea, a partir de la lectura de la documentación de postgres o a partir del cuidadoso análisis del material presentado en las clases. Uno de estos podría ser por ejemplo, la utilización de un PERFORM en lugar de un SELECT.

Un problema que no pudimos resolver fue que queríamos que la base de datos se borrara al apretar el '0' en el menú, pero a la primera vez saltaba un error que decia "database "tarjeta" is being accessed by other users". Por el momento no hemos conseguido arreglarlo. La base de datos se borrar si corremos de nuevo el programa y apretamos '0' directamente.

Similar Resources

A CRUD Phone Book app by REST-API, Golang and PostgreSQL

A CRUD Phone Book app by REST-API, Golang and PostgreSQL

in this repository, I've created a CRUD Phone Book app by REST-API, Golang and PostgreSQL. in this app, you can: 1-Create a new contact 2-See all contacts 3-Search among the contacts 4-Delete a contact by it's name 5-Delete a contact by it's number 6-Delete all contacts

Oct 8, 2022

Kaastolon - A fork of solon PostgreSQL HA With our customizations

Kaastolon - A fork of solon PostgreSQL HA With our customizations

kaastolon a fork of stolon - PostgreSQL cloud native High Availability stolon is

Dec 30, 2022

Creacion de una applicacion web en go con acceso a operaciones CRUD en base de datos.

CRUD_con_go_tut Creacion de una applicacion web en go con acceso a operaciones CRUD. Repo de seguimiento del tutorial del canal Developteca de Youtube

Jan 13, 2022

Mostrar y aceptar datos - Mostrar y aceptar datos en GO

Mostrar y aceptar datos en GO En GOLANG podemos usar la funcion "Scan" del paque

Feb 2, 2022

Proyecto para comprobación y migración de base de datos con versionado modular

rfcheckbd El objetivo de este proyecto es poder realizar migraciones y comprobaciones de bases de datos sin tener que depender de proyectos externos c

Dec 27, 2021

API con información de servicios del sistema de transporte público metropolitano de Santiago (Red y Metro)

APIs de Transporte Público en Santiago Saldo Bip! Permite obtener el saldo de una tarjeta Bip!, consultándolo en el sitio de RedBip!. Ejemplo: https:/

Nov 28, 2022

Uma linguagem que há um bom tempo tenho curiosidade de aprende-la

Aprendendo Go O que é a linguagem Go? 🤔 Go é uma linguagem de programação criada pela Google e lançada em código livre em novembro de 2009. É uma lin

May 14, 2021

Repositorio que guarda el certamen 2 extendido del ramo Lenguajes de Programación

certamen2-ex Repositorio que guarda el certamen 2 extendido del ramo Lenguajes de Programación. Instrucciones de ejecucion 2/main.go go run main.go pa

Dec 16, 2021

A Go implementation of an in-memory bloom filter, with support for boltdb and badgerdb as optional data persistent storage.

Sprout A bloom filter is a probabilistic data structure that is used to determine if an element is present in a set. Bloom filters are fast and space

Jul 4, 2022

TechTalk: Procesamiento masivo de datos con Go y sync.Pool

Procesamiento masivo de datos en Go Si quieres probarlo, descarga alguno de los

Jul 4, 2022

Apis para la administracion de notifiaciones, utilizando servicios como AWS SNS y AWS SQS

notificacion_api Servicio para envío de notificaciónes por difusión en AWS SNS Especificaciones Técnicas Tecnologías Implementadas y Versiones Golang

Jan 7, 2022

API em Golang utilizando clean architecture

Clean Arch in Go Read about Clean Architecture Build make Run tests make te

Dec 23, 2021

PoC de infraestrutura de comunicação utilizando RabbitMQ e Kafka

comm-infra PoC de infraestrutura de comunicação utilizando RabbitMQ e Kafka. Pré-requisitos Git Visual Studio Code Docker Docker Compose Go Instruções

Jan 16, 2022

Basic-crud-with-go - API Rest utilizando go

basic-crud-with-go API Rest utilizando go API Docs Postman file at docs/Books.po

Jan 16, 2022

Um chat feito em go utilizando gorilla/websocket, go-redis/redis,golang-jwt/jwte labstack/echo.

go-chat Um chat feito em go utilizando gorilla/websocket, go-redis/redis,golang-jwt/jwte labstack/echo. Why Eu gostaria de aprender algumas ferramenta

Jul 14, 2022

Go code for PostgreSQL. A Go language code which connects to PostgreSQL database for CRUD operation

Go code for PostgreSQL. A Go language code which connects to PostgreSQL database for CRUD operation

Jan 25, 2022

Go-Postgresql-Query-Builder - A query builder for Postgresql in Go

Postgresql Query Builder for Go This query builder aims to make complex queries

Nov 17, 2022

Prueba de concepto: Boletia, una aplicación para venta de boletos, basada en microservicios event-driven. Desarrollada sobre AWS Serverless: Api Gateway, Lambda, DynamoDB, DynamoDB Streams

Prueba de concepto: Boletia, una aplicación para venta de boletos, basada en microservicios event-driven. Desarrollada sobre AWS Serverless: Api Gateway, Lambda, DynamoDB, DynamoDB Streams

Prueba de concepto: Boletia, una aplicación para venta de boletos, basada en microservicios event-driven. Desarrollada sobre AWS Serverless: Api Gatew

May 7, 2022

Pasaje de código de JS a Golang. Ejemplo de funcionamiento de una blockchain simple.

Pasaje de código de JS a Golang. Ejemplo de funcionamiento de una blockchain simple.

blockchain-dummy-test Pasaje de código de JS a Golang. Ejemplo de funcionamiento de una blockchain simple. Fuente: https://medium.com/geekculture/bloc

Oct 3, 2022
Mostrar y aceptar datos - Mostrar y aceptar datos en GO

Mostrar y aceptar datos en GO En GOLANG podemos usar la funcion "Scan" del paque

Feb 2, 2022
Proyecto para comprobación y migración de base de datos con versionado modular

rfcheckbd El objetivo de este proyecto es poder realizar migraciones y comprobaciones de bases de datos sin tener que depender de proyectos externos c

Dec 27, 2021
API desarrollada en Go (Golang) para modificar precios en una tienda eCommerce (Shopify)
API desarrollada en Go (Golang) para modificar precios en una tienda eCommerce (Shopify)

Go eCommerce API API para modificar precios de productos en una tienda eCommerce de Shopify. Instrucciones Ingresar a la tienda eCommerce. Seleccionar

Oct 1, 2021
API REST para saber en base a un punto (lat, long), la sucursal más cercana al mismo.

location API REST para saber en base a un punto (lat, long), la sucursal más cercana al mismo. Construido con ?? Golang - Lenguaje de programación. SQ

Oct 3, 2022
Jeen is a package wrapper that is used as a web application base for the go language.

Jeen Jeen is a package wrapper that is used as a web application base for the go language. Package Wrappers? Yes, because jeen works by using other av

Feb 21, 2022
A restful api's with Gin Framework with a structured project that defaults to PostgreSQL database
A restful api's with Gin Framework with a structured project that defaults to PostgreSQL database

Welcome to Golang Gin boilerplate v2 The fastest way to deploy a restful api's with Gin Framework with a structured project that defaults to PostgreSQ

Oct 15, 2021
Best lightweight, powerful and really fast Api with Golang (Fiber, REL, Dbmate) PostgreSqL

Best lightweight, powerful and really fast Api with Golang (Fiber, REL, Dbmate) PostgreSqL

Dec 26, 2021
GO API with Gin Gonic with postgresql using gorp

GO API with Gin Gonic with postgresql using gorp Tips: Make sure you have project in src folder of $GOPATH Also, iniitalize go mod init project-name a

Jul 28, 2022
Writing an application using Go and PostgreSQL by Henrique Vicente

pgxtutorial This is an accompanying repository of the article Back to basics: Writing an application using Go and PostgreSQL by Henrique Vicente. Feel

Dec 29, 2022
REST API written in GO with PostgreSQL and Nginx Proxy + Certbot Let's Encrypt HTTPS certificates + Graphical Frontend in PHP. Deployed via docker-compose.

SSOA-PT REST APP Services Backend: REST API in Go Database: PostgreSQL Web Proxy: Nginx Let's Encrypt HTTPS certificates with certbot Frontend: PHP Ap

Mar 19, 2022