martes, 26 de noviembre de 2013

ANÁLISIS DE RESULTADOS Y RESUMEN

Este tercer proyecto del curso de Bases de Datos I del Instituto Tecnológico de Costa Rica, consiste en la implementacion de un sistema de base de datos para un Periódico Digital, el cual se tiene que realizar en Microsoft SQL Server. 

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. 

Este Proyecto nos ayudo a crecer como estudiantes ya que aprendimos mas herramientas que ofrece el Microsoft SQL Server que no conocíamos y tuvimos varios problemas en la realización del mismo durante el tiempo en que se realizó la tarea. Muchos errores que desconocíamos completamente nos quitaron tiempo ya que en varias ocasiones se debieron invertir varias horas en la búsqueda de su solución, pero en base a esto aprendimos cosas que no tenían que ver con el proyecto.

En el proyecto se realizo:
- El diagrama de la base de datos 
- La creación de todas las tablas en SQL Server
- La migración de datos de una base de datos no normalizada a la base de datos original
- La consulta de insertar una calificación y actualizar los promedios a una noticia
- La consulta de registrar los correos enviados

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
 Implementar la base de datos, mediante un script que creara la bd sobre una instalación inicialmente limpia.
A
Scripts de migración y llenado de datos
A
Procedimientos almacenado que realiza:
 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. 
A
Procedimientos almacenado que: Inserta los cambios cuando un email se envio.
A


Horas Totales:  29 Horas y 50 Minutos



En esta consulta se realiza un listado de las ultimas noticias, ya sea por tema o de interés general, ordenado de la mas antigua a la mas reciente. Se recibe un parametro que será la cantidad de noticias que se quiere ver, ademas de los parámetros Id del tema y de manera opcional según el enunciado de la tarea, el nombre del Subtema si se deseara buscar por Tema y Subtema, sino solo se buscaría solo por el Tema siendo este el modo de Buscar de manera General.

Entre los principales componentes de la consulta estan:

Declaración de variables y Variables Tabla:

DECLARE @EdicionesAux TABLE (Id int IDENTITY(1,1), Nombre varchar(100), FechaDesde date, FechaHasta date)

-- Variable tabla con los datos de los Subtemas --
DECLARE @SubTemasNoticias TABLE (Id int IDENTITY(1,1),Tema int, Nombre varchar(100), IdSubtema int)
-- Tiene el Id y contenido de las noticas, despues de filtrarlas por subtema
DECLARE @NoticiasAux TABLE (Id int IDENTITY(1,1), Contenido text, IdNoticia int, Subtema int, Edicion int)
-- Ediciones y sus fechas
DECLARE @EdicionesAux TABLE (Id int IDENTITY(1,1), Nombre varchar(100), FechaDesde date, FechaHasta date)

Llenado de variable tabla:
Insert into @NoticiasAux(Contenido, IdNoticia, Subtema, Edicion)
Select  N.Contenido, N.Id as IdNoticia, N.FKSubTema as NumSubtema, NPE.FKEdicion
from Noticia N, @SubTemasNoticias STN, NoticiaPorEdicion NPE
Where STN.IdSubtema = N.FKSubTema

AND NPE.FKNoticia = N.Id

Obtener informacion de las Variable Tabla:
Select top (@cantidad) N.Contenido,N.IdNoticia, N.Edicion, E.FechaDesde, E.FechaHasta
from @NoticiasAux N, @EdicionesAux E
where N.Edicion = E.Id
Order By E.FechaDesde



Fecha: 26/11/2013
Hora Inicio: 1:30 pm
Hora Finalizada: 4:00 pm
Tiempo Laborado:  2 horas y 30 minutos

Insercion de Promedios Terminado

Con los cálculos realizados en el primer avance, lo que falta es calcular el promedio nuevo e insertar los datos en la base de datos, a continuación presentamos el código que realizado lo antes dicho

SET @PromedioNuevo =  ((@PromedioActual*@NumCalificaciones) + @Calificacion) / (@NumCalificaciones + 1)

-- Inserta en la tabla Calificacion
BEGIN TRANSACTION

INSERT INTO Calificacion
(FKTipoCalificacion, FKUsuario,FKNoticia)
SELECT @Calificacion,@IdUsuario,@IdNoticia

UPDATE Noticia
SET CalifPromedio = @PromedioNuevo
WHERE Id = @IdNoticia

COMMIT TRANSACTION

print 'Calificacion de una Noticia: '
print ''
   print 'Usuario: ' + @Usuario
print 'Noticia: ' + @Noticia
print 'NumCalificacion: ' +  CAST( @NumCalificaciones as varchar(5) )
print 'Promedio Actual: ' + CAST( round(@PromedioActual,2,1) as varchar(5) )
print 'Promedio Nuevo: ' + CAST( round(@PromedioNuevo,2,1) as varchar(5) )


Fecha: 26/11/2013
Hora Inicio: 9:30 am
Hora Finalizada: 11:10 am
Tiempo Laborado:  1hora y 40 minutos

ERROR: Desbordamiento aritmético para el tipo varchar

El día 26 de noviembre al estar trabajando con la consulta del promedio de las calificaciones, tuvimos un error que el SQL lo menciaba como ´Desbordamiento aritmético para el tipo varchar´.
El error se nos presenta cuando queremos mostrar los resultados del calculo en consola, para corregir este error se tuvo que redondear las cantidades decimales que nos daba en dos decimales y esto lo logramos con la funcion de redonde de SQL, de la siguente manera: 

round(@PromedioActual,2,1)

Y asi pudimos obtener el numero con dos decimales y asi no lograr el desbordamiento aritmetico que se daba antes

Fuentes Consultadas
http://technet.microsoft.com/es-es/library/ms163363(v=sql.105).aspx
http://support.microsoft.com/kb/87797/es

Fecha: 26/11/2013
Hora Inicio: 9:00 am
Hora Finalizada: 9:30 am
Tiempo Laborado:  30 minutos

AVANCE: Store Procedure: Insercion de Promedios

Se realiza el primer avance del store procedure de los promedios, lo que se hace en este analizar y pensar en la respuesta, así como declarar el procedimiento y las variables que se ocupan, y también se le asignaron a los siguientes variables, valores que se ocuparan después para realizar cálculos o bien para insertar en una variable

-- Id del usuario
SET @IdUsuario = (
SELECT U.Id
FROM Usuario U
WHERE U.Nombre = @Usuario)

-- Id de la noticia
SET @IdNoticia = (
SELECT N.Id 
FROM Noticia N
WHERE N.Titulo = @Noticia)

-- Numero de Calificaciones de la noticia
SET @NumCalificaciones = (
SELECT count(*) 
FROM Calificacion C
WHERE C.FKNoticia = @IdNoticia)

-- Promedio Actual
SET @PromedioActual = (
SELECT N.CalifPromedio
FROM Noticia N

WHERE N.Id = @IdNoticia)

Fecha: 26/11/2013
Hora Inicio: 7:00 am
Hora Finalizada: 8:20 am
Tiempo Laborado:  1hora y 20 minutos

Migracion Terminada

Para finalizar la migración lo que nos hacia falta era trasladar la información de las tablas variables, a las tablas de la base de datos real, por lo cual se realiza toda la inserción en todas las tablas usando el INSERT TO, como por ejemplo:

--Inserta en la tabla NoticiaPorEdicion
INSERT INTO [PeriodicoDigital].dbo.NoticiaPorEdicion
(FKNoticia,FKEdicion)
SELECT NPE.Noticia, NPE.Edicion FROM @NOTICIASPOREDICION NPE

Otra cosa que nos faltaba era crear la migración pero en un procedimiento, y no en muchas consultas como se ha venido realizando por lo cual se declara el store procedure migración, donde se controlan las excepciones con el try y el catch, y un aspecto muy importante es donde poner el begin transaction y el commit transaction, cosa que se hace cuando se esta insertando en la base de datos original solamente. 

Fecha: 26/11/2013
Hora Inicio: 3:00 am
Hora Finalizada: 5:10 am
Tiempo Laborado:  2hora y 10 minutos


Avance Migracion III

Se terminan de hacer las tablas variables que faltaban en la migración, se realizaron las siguientes tablas:

- DECLARE @NOTICIASPOREDICION TABLE (Id INT IDENTITY(1,1), Noticia INT, Edicion INT)

- DECLARE @PORTADA TABLE (Id INT IDENTITY(1,1), Edicion INT)

- DECLARE @TEMAELEGIDO TABLE (Id INT IDENTITY(1,1), Usuario INT, Tema INT)

- DECLARE @SUBTEMAELEGIDO TABLE (Id INT IDENTITY(1,1), Usuario INT, SubTema INT)

- DECLARE @NOTICIASPORTADA TABLE (Id INT IDENTITY(1,1),Portada INT, NoticiasEdicion INT)

Fecha: 26/11/2013
Hora Inicio: 1:00 am
Hora Finalizada: 2:10 am
Tiempo Laborado:  1hora y 10 minutos

lunes, 25 de noviembre de 2013

Error... 

Se estaba definiendo la variable tabla como se define una tabla temporal y se creaba el siguiente error,  pues la tabla temporal se crea y se guarda en la base de datos mientras la variable tabla se utiliza temporalmente y no se almacena solo esta en memoria.

Se estaba haciendo de la siguiente manera, ejemplo:


  • CREATE TABLE #NombreTabla  (Col1 int, Col2 int)


Y lo correcto seria para obtener una variable tabla:


  • DECLARE @NombreTabla TABLE (Col1 int, Col2 int)


"Msg 2714, Level 16, State 6, Line 1
There is already an object named '#tmp' in the database."


Fecha: 22/11/2013
Hora Inicio: 8:00 am
Hora Finalizada:  8:30 am
Tiempo Laborado:   30 minutos

A todos los grupos se les envió la siguiente información, para que se ubicaran mejor con los datos de prueba realizados por nuestro grupo:

En un documento .txt:

Datos de Prueba 3Progra

- Las calificaciones y comentarios son hechos por usuarios

Hoja1
- Las ediciones tienen una fecha de inicio y una fecha de fin que es como el periodo de validez de la edicion
- Las noticias pueden aparecer en varias ediciones
- Cada edicion posee una portada
- N/A - No hay /No existe  -- comentario / UsuarioQueComento
- La columna NombrePeridodico no es necesario representarla en la base de datos se puede suponer solo un periodico
- Los datos de CantidadVisitada se refiere a la cantidad de clicks, cantidadEnviadasCorreo
- La calificacion promedio se puede agarrar de esta hoja o bien sacar el promedio con las calificaciones que vienen en la hoja2


Hoja2
- Si el usuario posee temaElegido y SUbtemaElegido diferente a N/A, esta registrado a ese
 tema y/o subtema para el envio de correos electrónicos



David Vargas
Cristian Araya

Fecha: 23/11/2013
Hora Inicio: 9:00 pm
Hora Finalizada:  9:20 pm
Tiempo Laborado:  20 minutos

Datos Prueba V3.0


Para esta versión se terminaron de agregar noticias, con comentarios, las ediciones y sus fechas y en la Hoja2 se registraron mas usuarios con sus respectivos datos, todo esto en base a las correcciones que el profesor sugirió para el modelo.
Las noticias se tomaron del sitio ya antes mencionado, de ahí se obtienen el Titulo, Contenido y comentarios de las noticias.

Las tablas quedaron de la siguiente manera:

Datos de la Hoja 1:



Datos de la Hoja 2:


Nota: Son mas registros de los que se pueden ver, esto es una muestra de los campos de las tablas y de la información que tienen.



David Vargas
Cristian Araya

Fecha: 23/11/2013
Hora Inicio: 1:00 pm
Hora Finalizada:  4:00 pm
Tiempo Laborado:   3 horas

domingo, 24 de noviembre de 2013

Datos Prueba V2.0

En la segunda versión ya el profesor reviso el modelo que habíamos propuesto y se paso a hacer los cambio pertinentes según las correcciones recibidas.


Los cambio ocurrieron de la siguiente manera:

Hoja1: Se cambió FechaNoticia por FechaInicioEdicion y ademas se agregaron los siguientes campos:


  • FechaFinEdicion
  • NombreEdicion
  • UsuarioQueComenta
  • PerteneceAPortada
Las tablas quedaron entonces de la siguiente manera:





Hoja 2:




Se agregaron mas noticias y comentarios.

David Vargas
Cristian Araya

Fecha: 22/11/2013
Hora Inicio: 5:00 pm
Hora Finalizada:  6:00 pm
Tiempo Laborado:   1 horas

Datos de Prueba V1.0

Se realiza la primera version de los datos de prueba


En esta edición se piensan y escriben los campos que van a tener los datos de prueba en el documento Excel.
Se insertan las primeras noticias y sus respectivas partes para completar los datos de prueba.
Las noticias se toman del sitio Pagina de Prensa Hondureña

La información entonces fue:

Hoja1:


 Hoja2:



David Vargas
Cristian Araya

Fecha: 21/11/2013
Hora Inicio: 1 pm
Hora Finalizada:  3:00 pm
Tiempo Laborado:   2 horas

Avance Migracion II

Se siguio realizando la migracion de los datos de prueba a la base de datos original, en este avance realizamos las siguientes variables tabla:


- DECLARE @SUBTEMA TABLE (Id INT IDENTITY(1,1),Tema INT, Nombre VARCHAR(50))

- DECLARE @USUARIO TABLE (Id INT IDENTITY(1,1), Nombre VARCHAR(100), Email VARCHAR(100))

- DECLARE @NOTICIA TABLE (Id INT IDENTITY(1,1), Redactor INT, SubTema INT, Titulo VARCHAR(1000), Contenido TEXT, INT,CalifPromedio INT,CantEnviadas INT)

- DECLARE @CALIFICACION TABLE (Id INT IDENTITY(1,1),TipoCalificacion INT,Usuario INT, Noticia INT)

- DECLARE @COMENTARIO TABLE (Id INT IDENTITY(1,1),Noticia INT,Usuario INT, Texto VARCHAR(1000))


Fecha: 23/11/2013
Hora Inicio: 5:00 pm
Hora Finalizada: 6:30 pm
Tiempo Laborado:  1hora y 30 minutos

Avance Migracion I

Se realizaron las primeras migraciones, para esta tarea se investigo las variables tabla para tener mas eficiencia en las consultas.

Para declarar una variable tabla se hace de la siguiente manera:


DECLARE @EDICION TABLE (Id INT IDENTITY(1,1), Nombre VARCHAR(50), FechaDesde DATE, FechaHasta DATE)

Lo que realizamos despues fue llenar estas tablas con la informacion de la base de datos de prueba o bien de los archivos de prueba que se encuentra en Excel.

-- Asignacion de Informacion a las variables tabla
INSERT INTO @EDICION (Nombre, FechaDesde, FechaHasta )
(SELECT DISTINCT V.NombreEdicion,V.FechaInicioEdicion,V.FechaFinEdicion
FROM [PruebaPeriodico].dbo.Hoja1$ V
WHERE V.NombreEdicion != 'NULL'
AND V.NombreEdicion != 'N/A' )

En este primer avance si realizaron las siguientes tablas:

DECLARE @REDACTOR TABLE (Id INT IDENTITY(1,1), Nombre VARCHAR(50))
DECLARE @TEMA TABLE (Id INT IDENTITY(1,1), Nombre VARCHAR(50))
DECLARE @TIPOCALIFICACION TABLE (Id INT IDENTITY(1,1), Nombre VARCHAR(50))

Fecha: 23/11/2013
Hora Inicio: 3:00 pm
Hora Finalizada: 4:30 pm
Tiempo Laborado:  1hora y 30 minutos

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

lunes, 30 de septiembre de 2013

ANALISIS RESULTADOS

Análisis de Resultados y Resumen de la Primera 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

Este Proyecto nos ayudo a crecer como estudiantes ya que aprendimos varios lenguajes de programación que no conocíamos y tuvimos muchos problemas en la realización del mismo durante el tiempo en que se realizó la tarea. Muchos errores que desconocíamos completamente nos quitaron bastante tiempo ya que en varias ocasiones se debieron invertir varias horas en la búsqueda de su solución.

Entre los lenguajes aprendidos están (y utilizados pues tal vez ya los conocíamos pero no a profundidad)

SQL: utilizado para la creación e interacción con la base de datos

C#: para la creación de la aplicación de escritorio, usando Visual Studio

PHP: implementado en la interacción del lado del servidor en la Aplicación web, este se comunica con la capa de interfaz y la capa de datos.

HTML: usado en la capa de interfaz que es el encargado de interactuar con el usuario, conocida también como capa de presentación.

Otros, utilizados pero en menor cantidad fueron CSS para darle estilo y formato a la interfaz gráfica en la Aplicación Web, JavaScript lenguaje del lado del cliente se utilizo en la capa de negocio o lógica de negocio en algunas ocasiones.

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 por web
A
El código de la aplicación de escritorio para el administrador
A

Horas trabajadas en el Proyecto: 90


Horas trabajadas por cada estudiante:

Cristian Araya: 83
David Vargas: 80

domingo, 29 de septiembre de 2013

INVESTIGACION: Script para eliminar todos los datos de las tablas MS SQL

Un script encontrado en la web y que es de gran importancia es eliminar todos los datos que se encuentran en todas las tablas en una base de datos. Esto lo utilizamos a la hora de hacer la migración, necesitábamos borrar todos los datos y navegando por la web encontramos el siguiente script. Sin embargo este script no reinicia los primary key, lo cual hay que hacerlo manualmente para cada tabla.


EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
GO

EXEC sp_MSForEachTable

'BEGIN TRY
   TRUNCATE TABLE ?
END TRY

BEGIN CATCH
   DELETE FROM ?
END CATCH;'

EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
GO

Para reiniciar los primary key lo vimos en una entrada anterior que era de la siguiente forma:

DBCC CHECKIDENT (Tabla, RESEED, 0)


Cristian Araya
David Vargas

sábado, 28 de septiembre de 2013

Investigación 

Pasar varibles de una pagina php a otra: 


Código empleado:

Pagina.php que lo envia: 

      session_start();  
      $_SESSION['valores'] = $varObtenerTipo;

Donde $varObtenerTipo; es el arreglo que se va a enviar.

Pagina.php que la recibe: 

       session_start(); 
       $mi_array = $_SESSION['valores']; 
$b = $mi_array[0];
echo "Largo de la lista... ".count($mi_array)."<br />"; // Largo de la lista
echo "Nombre ".$b['Nombre']; // Para saber el nombre del primer elemento de la lista que se recibio
                                                        // si es que tiene elementos

Cristian Araya
David Vargas

Horas empleadas: 1

viernes, 27 de septiembre de 2013

AVANCE: Migrar Datos de Excel a una Base de Datos Prueba

Se nos entregaron los siguientes archivos de Excel:

  • TablaHistorial
  • TablaUsuario
  • TablaVentas

Y se entregan varios archivos .txt haciendo referencia a los libros y su contenido
Se realiza con los tres archivos de excel, lo mencionado en la investigación que esta en la entrada anterior. De la cual obtenemos las siguientes tres tablas:


Cristian Araya
David Vargas

Horas Laboradas: 5horas

INVESTIGACION: Documento de Excel a una tabla en SQL

Tenemos el siguiente Excel y queremos trasladar estos datos a una base de datos en SQL Server.

Nos vamos a Microsoft SQL Server Management y le damos click derecho en una base de datos y seleccionamos la opción Tareas.

Se selecciona la opción importar datos


Aparecerá la siguiente ventana donde tenemos que elegir el documento de Excel y elegir la versión de Excel, así como seleccionar la opción que viene.


Se selecciona el destino tanto como el servidor como la base de datos


En la siguiente ventana podremos elegir copiar toda la tabla, o bien escribir una consulta para solo agregar algunos datos

Luego se seleccionan las pestañas del archivo de Excel y la tabla a la que se va a transferir



Se elige la opción finalizar

A continuación se realizara el proceso, y podemos ir viendo paso por paso, y ver si algo falla, cuando todo ha sido exitoso se muestra la siguiente ventana

Y ahora podemos ver que nuestra nueva tabla esta creada, y consultamos los datos y vemos que son los que contenía el archivo de Excel.


INVESTIGACION: Conexion con credenciales explicitas

Como vimos en la entrada anterior, hay varias maneras de conectarse a una base de datos, en esta ocasión hablaremos de la conexión de credenciales explicitas. Se pueden realizar de dos maneras solicitando las credenciales o bien usar las credenciales predeterminadas.
Solicitando las credenciales, se piden los datos y se concatenan al string de conexión.
Para usar credenciales predeterminadas no es nada recomendable poner la información en el código, ya que cualquiera lo podría ver, para esto se recomienda guardarlas cifradas en el archivo Web.config o bien en el registro de Windows como una subclave personalizada.
Para guardarlo en el archivo Web.config se debe creer un apartado de la siguiente manera:

<appSettings>
   <add key="mappedname" value="MyWebAppUser"/>
   <add key="mappedkey" value="Aje$31"/>
</appSettings>

Y en la aplicación leemos las credenciales de la propiedad estática AppSettings.
Dim user As String = System.Configuration.ConfigurationSettings. _
    AppSettings("mappedname")

Cuando usamos C# hay que agregar esta referencia al proyecto,


Y se escriben los valores en el app.config.

Para ver un ejemplo completo y ejemplo de como hacerlo en el registro de windows podemos acceder al link que se encuentra al final de esta entrada.

Fuente: http://msdn.microsoft.com/es-es/library/aa984237(v=vs.71).aspx