sábado, 23 de noviembre de 2013

Diagrama de la Base de Datos V2.0

Se corrige el diagrama de la base de datos de acuerdo a las correciones del profe y otras mas realizadas por nosotros, se supone que solo existe un periodico por lo cual se elimina la tabla periodico, y se agrega la portada y la edicion del periodico.




Fecha: 23/11/2013
Hora Inicio: 10:00 am
Hora Finalizada: 11:00 am
Tiempo Laborado:  1 hora

viernes, 22 de noviembre de 2013

Creacion de tablas y diagrama de base de datos en SQL

Se realiza en MS SQL el diagrama de la base de datos que realizamos anteriormente en papel y se crean todas las primary key y configuraciones iniciales para la base de datos del periodico digital



Fecha: 22/11/2013
Hora Inicio: 12.15 pm
Hora Finalizada: 1:00 pm
Tiempo Laborado:  45 minutos

jueves, 21 de noviembre de 2013

Diseño Datos Prueba

Se diseñaron las tablas no normalizadas que contendrán los datos de prueba. Se usaran dos tablas las cuales están dividido de la siguiente manera:

Tabla1:
Tabla2:

Fecha: 21/11/2013
Hora Inicio: 1.15 pm
Hora Finalizada: 1:40 pm
Tiempo Laborado:  25 minutos

Modelo Borrador

Realizamos un modelo borrador en papel de la base de datos. En conclusión determinamos 11 tablas diferentes, las cuales mostramos en seguida:


Como se puede observar los respectivos ranking se controlan con los campos de la tabla Noticia, esto debido a dar mas claridad y pensar que las transacciones se realicen de una manera mas sencilla. El paso siguiente es pasarlo a SQL y mostrárselo al profesor para que lo valide.

Fecha: 21/11/2013
Hora Inicio: 11.15 am
Hora Finalizada: 1:00 pm
Tiempo Laborado: 1hora con 45 minutos

Primer Avance

Se lee y se discute la especificación de la tarea con la idea de entender bien el problema. Se sacan palabras clave para poder hacer el modelo de una manera mas sencilla y eficiente. El tema que mas se discutió fue el ranking de las noticias.


Fecha: 21/11/2013
Hora Inicio: 10.15 am
Hora Finalizada: 11:00 am
Tiempo Laborado:  45 minutos

Especificacion Tercera Tarea Programada

ITCR – Escuela de Computación – Bases de datos – Prof, Fquiros – Noviembre 2013

Tercer Proyecto


Considere el siguiente problema:


Un periódico digital organiza las noticias por temas y subtemas, ejemplos de temas: Nacionales, Internacionales, sucesos, etc. Ejemplo de subtemas, para el tema Internacionales: América Latina, Europa, Asia, etc. Un usuario puede entrar a la portada, que muestra las principales noticias, o entrar a la página según el tema.


En la portada, quien la diseña, indica cuales principales noticias de cada tema son mostradas en la portada.


Cada noticia, al ser visitada, puede ser calificada, enviada por correo o comentada. Se llevan un “ranking” de las noticias, según han sido enviadas, calificadas (de 1 a 5 estrellas), comentadas o simplemente visitadas.  Este ranking, puede ser consultado por tema, subtema o de manera general (para todos los temas). Con respecto a la calificación, al desplegarse cada noticias se muestra su calificación basado en el promedio de todas las calificaciones recibidas. Para calificar, el usuario debe estar registrado (no puede ser un usuario anónimo).


Un usuario puede escoger que se le envíen automáticamente noticias por email, ya sea por tema o subtema, o según la persona que redacto la noticia.


Se pide:

+ Implementar la base de datos, mediante un script que creara la bd sobre una instalación inicialmente limpia.
+ Scripts de migración y llenado de datos
+ Hacer los procedimientos almacenados que implementan estas acciones:
 Aumentar la cuenta de visita a una noticia.
 Registro de una calificación y actualización del promedio de calificaciones.
 Listado de ultimas noticias, ya sea por tema, o de interés general (en la portada), de la más reciente a la más antigua, hay un máximo de noticias, que es establecido como un parámetro del sistema.

Listado de las noticias más visitadas (de más a menos), o más enviadas por correo (de más a menos) o mejor calificadas (de más a menos), ya sea por tema o por noticia de portada, sin exceder el máximo establecido como parámetro del sistema.


La generación de correos automáticos a usuarios, cuando una noticia ingresa.  No es necesario que implemente el envió del correo, pero sí que se registre que se envió.


+ Grupos de 2. Documentación. La misma indicada para los 2 proyectos previos.

miércoles, 20 de noviembre de 2013

Análisis de Resultados y Resumen de la Segunda Experiencia


El presente Proyecto se implemento según lo visto y aprendido en clases, ademas de la investigación por aparte de los lenguajes y programas utilizados en la elaboración del mismo. Se implemento siguiendo la programación por capas, las cuales son: Capa de interfaz, capa de negocio y capa de datos según lo aprendido en clases, véase también: Programacion por capas

El presente proyecto nos ayudo a fortalecer las bases aprendidas del primer proyecto, mejoramos en varios aspectos lo que sabíamos. En este caso los errores fueron menos aunque presentes como en todo trabajo programado, pero supimos resolverlos de mejor manera y mas rápidamente.

Se utilizaron los lenguajes SQL y C# para la elaboración del proyecto, la capa lógica se hizo en este ultimo.


A = Tarea cumplida, B = Tarea implementada parcialmente, pues tiene casos en los que falla, C = Tarea implementada solo en la lógica (no se realizó su aplicación correcta), D = Tarea no implementada

Tarea
Cumplimiento
Script de creación de la Base de Datos y todos sus objetos
A
Script de llenado de datos básicos o catálogos
A
Script de migración de la base de datos con datos de prueba a la BD del proyecto
A
El código de la aplicación de escritorio para el administrador
A

Horas trabajadas en el Proyecto: 38


Horas trabajadas por cada estudiante:

Cristian Araya: 35
David Vargas: 30

Conceptos y Funciones de SQL aprendidas



  • Se aprendió de la primera tarea programada el uso correcto de el BEGIN TRANSACTION, pues lo utilizamos en todas nuestras consultas por mas simples que fueran, el profesor nos corrigió ese detalle
  • Uso de Variables Tabla, ejemplo:

Declare @TablaVariable TABLE 
(
  Id INT PRIMARY KEY IDENTITY(1, 1) NOT NULL,
  NombreCurso varchar(50), 
  NotaCurso int,
  Codigo varchar(10),
  cantidad int
)
-- Llenando la variable tabla con los datos de las tablas de la base de datos Matricula
insert into @TablaVariable (Codigo, NombreCurso, NotaCurso, cantidad)
Select Cur.Codigo, Cur.Nombre, GM.Nota, 0
From Estudiante Est, Curso Cur, Matricula M, GrupoMatriculado GM, Grupo G,EstadoCurso E
Where Est.Carnet = @IdEstudiante 
 and M.FKEstudiante = Est.Id
 and M.Id = GM.FKMatricula
 and GM.FKGrupo = G.Id
 and G.FKCurso = Cur.Id
 and GM.FKEstado = E.Id

  • Se realizaron consultas mas complejas y completas en un mismo Stored Procedure (SP), ya que en la primera tarea los implementamos de manera separada, hacíamos varios SP para un mismo trabajo en lugar de hacerlo en uno mismo.
  • Trabajamos mas en la base de datos y no enviamos resultados de consultas a capa lógica para trabajarlos ahí, sino que los trabajamos en capa de datos.

Funciones:
  1. AVG
  2. Count
  3. Set


Cristian Araya
David Vargas

Horas: 3

REUNIONES

Nos reunimos los días: 

Jueves 7 de noviembre después de clases para definir el modelo de la base de datos y así poder empezar con la migración y los datos de prueba asignados al grupo.

Martes 12 de noviembre: Se hacen correcciones al Script de migración y a los datos de prueba, se consulta al profesor por correo sobre lo realizado a los datos.

Lunes 18 de noviembre: nos reunimos para realizar los procedimientos y consultas que faltaban realizar, y empezar a unirlo con la capa de interfaz.

Martes 19 de noviembre: continuamos con los procedimientos y lo relacionado con las demás capas del proyecto.

Cristian Araya
David Vargas

Horas: 15

Uso del AVG

Se utilizo el AVG de SQL Server para obtener los promedios de los cursos llevados de un estudiante segun el carnet, el ejemplo de AVG seria:

Select AVG(GM.Nota) as NotaPonderadaAprobados
From Estudiante Est, Curso Cur, Matricula M, GrupoMatriculado GM, Grupo G,EstadoCurso E
Where Est.Carnet like @IdEstudiante 
 and M.FKEstudiante = Est.Id
 and M.Id = GM.FKMatricula
 and GM.FKGrupo = G.Id
 and G.FKCurso = Cur.Id
 and GM.FKEstado = E.Id
 and E.Estado = 'Aprobado'


Esta pequeña consulta se utilizó para el punto C2 de las consultas enviadas por el profesor al correo.

Cristian Araya
David Vargas

Horas: 2

domingo, 17 de noviembre de 2013

Migración de Bases de Datos

La migración de las bases de datos se realizo de la siguiente manera:

En un solo script según lo visto y aprendido en clases, se realizaron las siguientes operaciones de SELECT y UPDATE de una base a la otra:

--Inserta en la tabla Universidad
INSERT INTO [Matricula].dbo.Universidad
 (Nombre)
SELECT distinct V.NombreUniversidad
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreUniversidad != 'NULL'

--Inserta en la tabla Escuela
INSERT INTO [Matricula].dbo.Escuela
 (FK_Universidad,Nombre)
SELECT distinct (Select T.Id from [Matricula].dbo.Universidad T
where T.Nombre = (V.NombreUniversidad COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreEscuela
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

--Inserta en la tabla Curso
INSERT INTO [Matricula].dbo.Curso
 (FKEscuela,Nombre,Creditos,Codigo)
SELECT distinct (Select T.Id from [Matricula].dbo.Escuela T
where T.Nombre = (V.NombreEscuela COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreCurso,V.CreditosCurso,V.CodigoCurso
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

--Inserta en la tabla Carrera
INSERT INTO [Matricula].dbo.Carrera
 (FKEscuela,Nombre)
SELECT distinct (Select T.Id from [Matricula].dbo.Escuela T
where T.Nombre = (V.NombreEscuela COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreCarrera
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

--Inserta en la tabla Curriculum
INSERT INTO [Matricula].dbo.Curriculum
 (FKCarrera,Nombre,AñoCreacion,AñoCerrado)
SELECT distinct (Select T.Id from [Matricula].dbo.Carrera T
where T.Nombre = (V.NombreCarrera COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreCurriculum,V.AñoCreacionCurriculum,V.AñoCierreCurriculum
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

Y así con el resto de tablas de las dos bases, este es un pequeño ejemplo de la migración.


Cristian Araya
David Vargas

Horas invertidas: 8

Datos de Prueba


Al grupo se le asigno realizar los datos de prueba para el Proyecto II Matricula, los cuales constan de dos tablas con la información  y los campos necesarios para la creación de la base de datos. Esta información se guardo en 2 tablas en un documento Excel para ser guardadas en una base de datos No Normalizada, esto con el fin de que los grupos y nosotros podamos hacer la migración de esa base no normalizada a la normalizada la cual seria utilizada para realizar el proyecto.

Ejemplo de los datos de prueba creados:





A los diferentes grupos se les envio un archivo de texto con varias explicaciones de ciertos campos creados en los datos de prueba para una mayor claridad y para evitar confusiones.

Contenido del archivo:

"Datos Prueba Tarea Programada V2.0

Informacion Archivo1
N/A en requisitos o correquistos es que no tiene
0 en el añoCierreCurriculum significa que el plan no se ha cerrado, en otras palabras es el plan actual
NumeroSemestre: Es el semestre al que pertenece el curso en el plan o curriculum
En el Nombre del Curriculum: IC-P-410, El primer campo se refiere a la carrera, la p a plan y el numero de plan correspondiente

Informacion Archivo2
Hay materias con el mismo nombre pero son impartidas por diferentes escuelas, esto para un manejo mas sencillo
En los últimos registros se muestran muchos campos con N/A esto es porque son estudiantes que nunca han matriculado,
 por lo cual solo se muestran los datos del estudiante
y en los demás campos se aprovecho para poner nueva informacion de los profesores, aulas, tipo de semestre y los estados
 de curso que existen.
En otras palabras los últimos registros son solo campos de información que no tienen relación entre una cosa y otra por
ejemplo el estudiante y el profesor no tienen relación alguna."

Ademas de esta información se dejaron datos de contactación de nosotros por cualquier duda o sugerencia.


Cristian Araya
David Vargas

Horas invertidas: 10

PROYECTO 2