martes, 5 de noviembre de 2019

Análisis de resultados

Horas de trabajo:
Anthony: 16 horas
Carlos : 4 horas
Total: 20 horas

Resultados:

-Bitacora:

  •  Los eventos se manejan a través de triggers lo cuales fueron probados y no arrojaron ningún problema. Con respecto a UPDATE y DELETE trabajan validando el campo activo, esto se explica más detalladamente en el post de triggers.


-Consultas del administrador:

  • Consulta 1: Esta consulta no se logró desarrollar por falta de tiempo además de varias dudas sobre lo que se pedía en esta
  • Consulta 2: Funciona correctamente sin tomar en cuenta el numero de días, si no se toma en cuenta este parámetro la consulta sí funciona.
  • Consulta 3: Provee todos los datos solicitados menos la cuenta que le aporta mayor beneficio a la persona, esta funcionalidad no se logró implementar debido a que no se encontró cómo llevarla a cabo. 
-Simulación:

  • Los cambios al script de simulación y las nuevas tablas para el procesamiento de COs fueron implementados con éxito, ya que era crear dos tablas nuevas y añadir un de código poco al script de simulación para leer los datos de las CO del xml de simulación, y procesar cada día los depósitos y redenciones de las CO, era adaptar el código de la etapa pasada para las CO.


Segunda consulta del administrador

Tiempo: 3:00 pm a 7:00 pm

Creación de la vista para la consulta, las tablas utilizadas para crear la cita fueron: CuentsDeAhorro, TiposDeCuenta y EstadosDeCuenta. El nombre de la vista es "Consulta2".

A diferencia de a vista de la tercera consulta, el diseño de esta me costó un poco más pensarlo ya que tenía planeado usar la tabla movimientos para revisar si una cuenta había recibido una multa o no pero estaba generando problemas al unirla con la tabla de estados de cuenta así que opté por utilizar las tablas descritas al inicio.
Con respecto al SP de la consulta no fue muy complicado pero me tomó un buen rata haciendo pruebas de concepto para asegurarme que funcionaban bien como por ejemplo la condición del if, también tuve que investigar algunas funcione sencillas como AVG para obtener el promedio o MONTH y YEAR para obtener únicamente el mes y el año de una fecha.
Gracias a las pruebas de concepto me percaté que no habían multas por exceso de retiros en CH en los datos de prueba lo que me ahorró un posible bloqueo. El nombre del SP es "ConsultaAdmin2".
Adjunto una imagen del SP para mostrar su método de funcionamiento.

Como se puede observar en la imagen el SP procesa la vista de una manera parecida a la que se usa en la simulación y se insertan los datos solicitados en una nueva tabla.

Fuentes: 
https://docs.microsoft.com/es-es/sql/t-sql/functions/month-transact-sql?view=sql-server-ver15
http://www.forosdelweb.com/f21/comando-sql-para-sacar-promedio-751088/
http://www.sqlservertutorial.net/sql-server-stored-procedures/sql-server-if-else/

lunes, 4 de noviembre de 2019

Tercera consulta de administrador

Tiempo: 1:00 pm a 10:00 pm

-Empecé por investigar el funcionamiento de las vistas, lo cual no me tomó mucho tiempo entender.
-Cree la vista con los datos que creí necesarios para realizar la consulta.El nombre de la vista es MatarAhorrantes.
-Para realizar la consulta cree un SP llamado consulta 3. Aquí tuve varios problemas.

Cantidad de cuenta de las que recibe dinero el beneficiario: Esta parte me tomó alrededor de una hora tuve que investigar como contar elementos repetidos y luego investigar como agrupar los campos que deseaba buscar, en este caso quería buscar cuantas cuentas de ahorro estaban asociadas a un mismo beneficiario para esto utilicé la clausula GROUP BY que agrupa campos en base a otro por ejemplo la cantidad de cuentas que poseen una misma persona. Para contar los campos repetidos utilicé la instrucción COUNT dado como resultado lo siguiente: SELECT count(M.idCuenta) AS CantCuentas from MatarAhorrantes M group by idPersona

Obtener la cuenta de la cual recibe mayor beneficio: Esta parte no la he podido completar ya que estoy bloqueado sobre como obtener el número de cuenta de la cuenta de ahorro que tiene el mayor saldo de entre las cuentas de las cuales es beneficiario una persona, he intentado utilizando la instrucción HAVING, utilizando subquerys, entre otras cosas. Adjunto parte de los códigos que he utilizado.



Fuentes consultadas:
http://www.forosdelweb.com/f21/urgente-seleccionar-maximo-valor-grupo-registros-291169/
https://social.msdn.microsoft.com/Forums/es-ES/6aa42b11-5446-4aeb-ae11-aee6d654604b/contar-las-veces-que-se-repite-un-campo-en-una-tabla?forum=sqlserveres
https://es.stackoverflow.com/questions/56151/top-1-por-cada-grupo-de-un-group-by-sql-server
https://geeks.ms/lmblanco/2015/07/06/tratamiento-de-datos-duplicados-en-sql-server-1/
https://www.tutorialesprogramacionya.com/sqlserverya/temarios/descripcion.php?cod=43&punto=37&inicio=

domingo, 3 de noviembre de 2019

Cambios al script de simulación y tablas nuevas

Tiempo: 19:20 - 21:45 y 22:20 - 00:01 (3 noviembre)

Cree las tablas de MovimientosCO y TipoMovimientosCO necesarias para la implementación de los depósitos y redenciones de las cuentas objetivo, además de crear los scripts de llenado para TipoMovimientosCO, y la tabla creada por Anthony: TipoEvento.

Después modifiqué el script de simulación de la etapa pasada para que creara las cuentas objetivo que vienen en el nuevo xml de simulación. Tuve algunos problemas con esto porque cambiaron el formato en el que vienen los datos en el xml, entoces el formato enviado por el profesor que utilizaba antes ya no me servía, y tuve que adaptarlo. Lo logré adaptar gracias a los siguintes foros: https://stackoverflow.com/questions/769980/how-do-i-select-a-top-level-attribute-of-an-xml-column-in-sql-server-2005 , https://dba.stackexchange.com/questions/143861/get-attribute-value-of-xml

Me tomé un descanso para comer y seguí trabajando en el script de simulación, ahora con los depósitos y redenciones de las cuentas objetivo. Cree un trigger para que al añadir un MovimientoCO, se sumara el saldo a la cuenta objetivo, igual que hice en la etapa pasada con los movimientos normales. Para las redenciones hice lo mismo pero por algún motivo que desconozco, algunas cuentas no quedaban con saldo cero al cerrarse, entonces borré el trigger y puse el código del trigger en el script. Perdí bastante tiempo porque para probar el código tenía que correr la simulación, y esto duraba varios minutos.