UNIVERSIDAD CATÓLICA DE SANTA MARÍA FACULTAD DE CIENCIAS E INGENIERÍAS FÍSICAS Y FORMALES PROGRAMA PROFESIONAL DE INGENIERÍA DE SISTEMAS CURSO: Administración de los datos y la información DOCENTE: ING. Guillermo Calderón Ruiz PRESENTADO POR: PEROCHENA CORNEJO IRVIN VALDEZ HUAMANI WILLIAM AREQUIPA – PERÚ 2013
64
Embed
INFORME-ADMINISTRACION DE LOS DATOS Y LA INFORMACION.pdf
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
O ENTIDAD USUARIO ......................................................................................................................................... 7
O ENTIDAD CONTENIDO .................................................................................................................................. 7
O ENTIDAD DESCARGA ..................................................................................................................................... 8
O ENTIDAD REGALO ........................................................................................................................................... 8
O ENTIDAD PROMOCIONES ............................................................................................................................ 8
O ENTIDAD CATEGORIA ................................................................................................................................... 9
O ENTIDAD RANKING......................................................................................................................................... 9
DIAGRAMA ENTIDAD – RELACION: ......................................................................................................... 9
O Categoria-Contenido (1:N) ........................................................................................................................13
O Contenido-Ranking (1:N) ...........................................................................................................................13
PASO 4: Transformación De 1: 1 ............................................................................................................................14
PASO 5: Transformación De N: M ..........................................................................................................................14
PASO 6: Transformación De Atributos Multivaluados ...............................................................................14
PASO 7: Transformación De Vínculos .................................................................................................................14
PASO 8: Información De Una Generalización. ............................................................................................14
DIAGRAMA RELACIONAL.............................................................................................................................................15
Breve Explicación ..........................................................................................................................................................15
DICCIONARIO DE DATOS .............................................................................................................................................16
CÓDIGO SQL PARA CADA UNA DE LAS CONSULTAS ...................................................................................19
MANUAL DE USUARIO ...................................................................................................................................................49
REQUERIMIENTOS DEL SISTEMA ........................................................................................................................49
ACCESO A LA APLICACIÓN .......................................................................................................................................49
O Insertar ......................................................................................................................................................54
O Modificar ...................................................................................................................................................54
O Eliminar .....................................................................................................................................................55
O Insertar ......................................................................................................................................................55
O Modificar ...................................................................................................................................................56
O Eliminar .....................................................................................................................................................57
O Insertar ......................................................................................................................................................58
O Modificar ...................................................................................................................................................59
O Eliminar .....................................................................................................................................................60
O Cargar Dinero .........................................................................................................................................61
O Cerrar Cuenta .........................................................................................................................................62
Modelado de Datos .............................................................................................................................................63
Estructura de Base de Datos ..........................................................................................................................63
El presente informe da a conocer paso a paso el desarrollo del proyecto de descarga
de contenidos en el cual mostramos suposiciones que el grupo considero necesarias,
el diseño del diagrama E-R el cual cumple con la definición del problema y responde a
todas las consultas del proyecto. A partir de dicho modelo realizamos la normalización
del esquema, descripción del esquema final implementado, diccionario de datos,
posteriormente especificaciones de códigos SQL para cada una de las consultas
requeridas, además de ellos el esquema relacional poblado y finalmente los
procedimientos almacenados.
En una última etapa las conclusiones que se extraen de este documento se concentran
en una muy detalla la comprensión de todos los factores que hacen posible el
desarrollo
INTRODUCCION
El presente informe consiste en la elaboración de un modelo de datos y sistema de
información asociado a un portal de descarga pagada de contenidos en formato de
imágenes (PNG, JPG, GIF o BMP), sonidos (MP3, MID o WAV) y videos (WMV, AVI, MPG
o MOV).
OBJETIVOS
Los objetivos principales del proyecto son:
a. Construir un modelo de datos Relacional que permita almacenar la
información del portal de descargas.
b. Implementación de consultas en la Base de Datos para el sistema de
descargas.
c. Implementar algunos procedimientos que sirven para implementar algunas
de las transacciones solicitadas como parte de los requerimientos iniciales del
proyecto. Los parámetros que reciben los procedimientos deben ser elegidos
según el esquema que estamos manejando.
6
SUPOSICIONES ADICIONALES
Al crear un nuevo usuario, se cargará automáticamente un valor de S/. 10.00 a su saldo actual, para q pueda realizar algunas descargas en forma de prueba del servicio.
Según las extensiones de los contenidos (definidas previamente en los requisitos del trabajo), será necesario ingresar los mime-type a la base de datos al momento de realizar las pruebas, ya que sólo de esta manera, el sistema reconocerá la clase de archivos que son, y así los podrá reproducir y/o visualizar.
Se considerará un atributo de estado en la tabla de cliente, para así notificar si está activo o inactivo, en el caso de que desee cerrar su cuenta.
Se creará un atributo de estado en la tabla de contenido, para que así, los usuarios puedan ver si lo que desean descargar aún se encuentra disponible, o fue de baja por el administrador, según sea el caso.
Se agregará el atributo de número de descargas al contenido, con un fin de poder tener un control más claro de las descargas que realizan los usuarios, y para realizar posteriormente los rankings o reportes.
Se considerará el uso de un árbol binario para la implementación de la entidad Categoría, de modo q se pueda ubicar de manera más fluida sus categorías padre y/o subcategorías.
Se realizará una notificación de regalo para el destinatario, y para reclamarlo, deberá ingresar el ID del regalo al sistema. De igual manera, se considerará un atributo del estado de regalo para el que lo manda, en este caso, se mostrará si el destinatario aceptó o rechazó el regalo.
DIAGRAMA DE ENTIDAD RELACIÓN ENTIDADES:
Describimos la arquitectura (modelo entidad - relación) de las entidades de nuestro sistema multimedia a realizar, las cuales están compuestas por siete entidades que describiremos a continuación
7
o ENTIDAD USUARIO En esta entidad se encuentran toda la información del usuario que será pertinente para nuestro sistema.
o ENTIDAD CONTENIDO
En esta entidad se guardara la información del producto y las características de dicho producto.
8
o ENTIDAD DESCARGA Para nuestro sistema es necesario tener una entidad descarga la cual se encargara de almacenar las descargas respectivas de cada usuario.
o ENTIDAD REGALO
Cada usuario tiene la opción de poder regalar un contenido o varios a un usuario el cual podrá rechazarlo o aceptarlo.
o ENTIDAD PROMOCIONES
El administrador vera por conveniente realizar promociones para aquellos usuarios que se comprometan con la página (haciendo descargas o regalando contenidos).
9
o ENTIDAD CATEGORIA Como nuestro sistema trata de la venta de productos multimedia debemos almacenar en una base de datos y deben estar clasificados esos productos, por lo tanto se organizan por categorías para que la administración de los datos sea eficiente.
o ENTIDAD RANKING
Creamos la entidad ranking donde se mostraran los 10 más descargados y los 10 más votados, la cual se actualizara cada semana.
DIAGRAMA ENTIDAD – RELACION:
Mostramos las entidades con sus relaciones respectivas haciendo recalcar lo anterior mostrado.
10
Normalización: Para la normalización tomamos como base los 8 pasos de transformación del modelo entidad-relación al modelo relacional – Navathe donde tomamos como punto principal:
11
PASO 1: Transformación de Entidades
PASO 2: Transformación de Entidades Débiles
No hay ninguna entidad de este tipo.
PASO 3: Transformación de 1: N
Para cada vinculo 1:N entre dos entidades E y F donde F está del lado N del vínculo, se añade a la relación correspondiente a la entidad F de alguna de las entidades la clave primaria de la otra entidad relacionada.
o USUARIO-PROMOCIONES (1:N)
12
o PROMOCIONES-CONTENIDO (1:N)
13
o CATEGORIA-CONTENIDO (1:N)
o CONTENIDO-RANKING (1:N)
14
PASO 4: Transformación de 1: 1 No hay ninguna relación de este tipo.
PASO 5: Transformación de N: M
No hay ninguna relación de este tipo. PASO 6: Transformación de atributos multivaluados
No hay ningún atributo de este tipo. PASO 7: Transformación de vínculos
Para cada vínculo se crea una relación R.
Los atributos de la relación R serán las claves primarias de todas las entidades relacionadas más los atributos propios del vínculo.
PASO 8: Información de Una Generalización.
No hay ninguna entidad de este tipo.
15
DIAGRAMA RELACIONAL Realizada en SQL SERVER 2012, las 8 tablas presentan sus respectivos campos
con sus PKs respectivamente
BREVE EXPLICACIÓN En nuestro diagrama, hemos considerado la creación de ocho tablas: Usuario, Descarga, Contenido, Regalo, Promoción, Ranking, Categoría y Archivo. A continuación la explicación:
Un usuario, al realizar la descarga de un contenido, deberá automáticamente darle una puntuación. Esta información, junto a la fecha de descarga, el ID del usuario, del contenido, ID de descarga, entre otros, será almacenada en la tabla de Descarga, para una mejor administración de los datos. A su vez, esta tabla le permitirá validar al sistema, el número de veces que el usuario califica un contenido (debe ser 1 vez y sólo a los contenidos descargados), la fecha de descarga, y la calificación en sí que le dio el usuario al contenido.
De igual manera, los usuarios podrán regalar contenidos (música, imágenes, videos) a
otras personas, para ello, al momento de realizar el pago del contenido, se le pedirá el nombre de usuario del destinatario, y éste para poder reclamar su regalo, deberá ingresar al sistema el código del regalo (IDRegalo) para su posterior descarga; sin embargo, también puede rechazar el regalo (Estado_Regalo).
El Usuario Administrador será el único capaz de asignar las promociones a los contenidos, así como también aplicarle el 20% de descuento a los Usuarios q les corresponda
Los contenidos almacenados en la base de datos, contarán con varias características, entre las que están las principales que aparecerán en pantalla para una mejor
16
descripción hacia el usuario, como el autor, nombre, precio, categoría, estado y puntuación promedio; sin embargo, hay otras que son necesarias para una mejor administración de la información, como el ID de la promoción a la cual está sujeto el contenido, árbol de categorías, tamaño, URL, secuencia en bytes, número de descargas, y algunos de estos datos, son extraídos de otras tablas presentes en la relación, como Categoría, Tipo de Archivo y Promoción.
Al ingresar a la Página de descargas, se visualizaran dos rankings, para lo cual se está integrando una tabla ranking la cual guardara dichos datos, los cuales brindaran información de los 10 contenidos más descargados en la semana anterior y otro de los 10 contenidos más votados en la semana anterior.
CARDINALIDAD
1 a 1: No hay ninguna relación de este tipo. 1 a MUCHOS: Se muestran las siguientes:
o USUARIO a REGALO.- Un determinado usuario puede realizar muchos regalos, y de igual manera, puede recibirlos. Un mismo regalo no puede ser dado a muchos usuarios, ya que cada uno de ellos es diferente y cuenta con un ID único.
o USUARIO a DESCARGA.- Un determinado usuario puede realizar muchas descargas. Una misma descarga no corresponde a muchos usuarios.
o CONTENIDO a REGALO.-Un mismo contenido puede ser parte de muchos regalos realizados. Un regalo incluye a un solo contenido.
o CONTENIDO a DESCARGA.- Un mismo contenido puede ser parte de muchas descargas. Una descarga incluye a un solo contenido.
o CATEGORIA a CONTENIDO.- Una categoría abarca muchos contenidos. Un contenido no puede ser parte de diferentes categorías.
o USUARIO a PROMOCIONES.-.- Un determinado Usuario (Administrador) puede establecer muchas promociones a uno o varios contenidos.
o CONTENIDO a PROMOCIONES.- Una misma promoción puede incluir muchos contenidos. Según los requisitos del trabajo, un contenido sólo puede tener una promoción asociada en el momento.
o TIPO_ARCHIVO a CONTENIDO.- Un determinado tipo de archivo puede ser para muchos contenidos. Un contenido sólo tiene un único tipo de archivo.
MUCHOS a MUCHOS: No hay ninguna relación de este tipo.
DICCIONARIO DE DATOS
Un diccionario de datos es un conjunto de metadatos que contiene las características lógicas y puntuales de los datos que se van a utilizar en el sistema que se programa, incluyendo nombre, descripción, alias, contenido y organización.
Identifica los procesos donde se emplean los datos y los sitios donde se necesita el acceso inmediato a la información, se desarrolla durante el análisis de flujo de datos y auxilia a los analistas que participan en la determinación de los requerimientos del sistema, su contenido también se emplea durante el diseño.
CONSULTA 1: − Número de descargas que se han efectuado desde la cuenta del cliente
con id X (ya sean propias o regalos a X) en los últimos 30 días. select IDUsuario, count (IDUsuario)as total from descargas where IDUsuario = 'U0043' and Fecha between dateadd( day , -40 , getdate() ) and dateadd( day , 0 , getdate()) group by IDUsuario order by total desc;
CONSULTA 2: − Número de descargas que se han efectuado desde la cuenta del cliente
con id X (ya sean propias o regalos a X) en el último año.
select IDUsuario, count(IDUsuario) as total from descargas where IDUsuario = 'U0043' and Fecha between dateadd( year , -1 , getdate() ) and dateadd( year , 0 , getdate() ) group by IDUsuario order by total desc
20
CONSULTA 3: − Nombre, tipo de contenido y extensión del contenido más descargado
en los últimos 30 días. select top(1) with ties c.Nombre_cont , c.Informacion , c.Extension , count( d.IDContenido) as total from descargas d , contenido c where d.IDContenido = c.IDContenido and d.Fecha between dateadd( day , -30 , getdate() ) and dateadd( day , 0 , getdate() ) group by c.Nombre_cont , c.Informacion , c.Extension order by total desc
CONSULTA 4: − Nombre, tipo de contenido y extensión del contenido más descargado
en el último año select top(1) with ties c.Nombre_cont , c.Informacion , c.Extension,count( d.IDContenido) as total from descargas d , contenido c where d.IDContenido = c.IDContenido and d.Fecha between dateadd( year , -1 , getdate() ) and dateadd( year , 0 , getdate() ) group by c.Nombre_cont , c.Informacion , c.Extension order by total desc
21
CONSULTA 5: − Nombre y promedio de notas de todos los contenidos. Si nadie ha
puesto nota a un contenido, ésta debe aparecer con valor nulo. Se debe ordenar por nota (la mayor primero)
select CONTENIDO.Nombre_cont, AVG(CONTENIDO.Nota_prom)"Promedio" from CONTENIDO group by CONTENIDO.Nombre_cont,CONTENIDO.Nota_prom order by CONTENIDO.Nota_prom desc;
22
CONSULTA 6: − Nombre de todos los clientes que han regalado contenidos junto con el
nombre del destinatario y del contenido. select orig.Nombre , dest.Nombre as Destino , c.Nombre_cont from USUARIO dest , USUARIO orig , CONTENIDO c where dest.IDUsuario in (select r.IDUsuario_Dest from REGALO r where orig.IDUsuario = r.IDUsuario and r.IDContenido = c.IDContenido )
CONSULTA 7: − Nombre de todos los clientes que han regalado al menos 10 contenidos
diferentes. select u.Nombre from USUARIO u where ( select count( distinct c.Nombre_cont ) from contenido c , regalo r where u.IDUsuario = r.IDUsuario and r.IDContenido = c.IDContenido ) >= 10
23
CONSULTA 8:
− Nombre, tipo de contenido y extensión de los contenidos que han sido descargados por el cliente con id X (ya sean propias o regalos a X) y cuyo precio es mayor a Y.
select c.Nombre_cont , c.Informacion , c.Extension from usuario u , descargas d , contenido c where u.IDUsuario = 'U0002' and u.IDUsuario = d.IDUsuario and d.IDContenido = c.IDContenido and c.precio > 8
CONSULTA 9: − Nombre, tipo de contenido y extensión de los contenidos que han sido
descargados por el cliente con id X (ya sean propias o regalos a X) y cuya nota promedio es mayor o igual a Y.
select c.Nombre_cont , c.Informacion , c.Extension ,c.Nota_prom, u.IDUsuario from usuario u , descargas d , contenido c where u.IDUsuario = 'U0002' and u.IDUsuario = d.IDUsuario and d.IDContenido = c.IDContenido and c.Nota_prom >= 8
24
CONSULTA 10: − Nombre, autor, descripción, precio, extensión de archivo y la categoría a
la que pertenece (la más baja en el árbol de categorías) el contenido con id X
select con.Nombre_cont , con.Autor , con.Descripcion , con.Precio , con.Extension , cat.Desc_cat from categoria cat , contenido con where cat.IDhijo_izq IS NULL and cat.IDhijo_der IS NULL and cat.IDCategoria = con.IDCatg_cont and con.IDContenido = 'C0009'
CONSULTA 11: − Nombre de todos los clientes ordenados de acuerdo al número de
descargas efectuadas (ya sean propias o por regalos) en los últimos 6 meses (de más a menos)
select USUARIO.Nombre, count (USUARIO.Nombre) AS TOTAL from USUARIO inner join DESCARGAS on USUARIO.IDUsuario=DESCARGAS.IDUsuario where DESCARGAS.Fecha > DateAdd(MONTH, -6, GETDATE()+1) and DESCARGAS.Fecha<=GETDATE() group by USUARIO.Nombre order by total desc
25
CONSULTA 12: − Nombre de todos los contenidos que pertenecen directamente a la
categoría raíz del árbol de categorías, junto con el nombre de la categoría− Nombre de todos los contenidos del autor X y que han sido regalados alguna vez
select con.Nombre_cont , cat.Desc_cat from categoria cat , contenido con where cat.IDCat_Padre IS NULL and cat.IDCategoria = con.IDCatg_cont
CONSULTA 13:
− Nombre de todos los contenidos del autor X y que han sido regalados alguna vez
select DISTINCT c.Nombre_cont from contenido c where c.autor = 'VERNIZ HERNANDEZ' and exists( select * from regalo r where r.IDContenido = c.IDContenido)
26
CONSULTA 14: − Nombre de todos los contenidos con precio entre X e Y inclusive, y
que han sido alguna vez parte de una promoción que determinaba un descuento mayor o igual al Z%.
select c.Nombre_cont from contenido c where c.precio >= 5 and c.precio <= 8 and exists ( select * from promocion p where p.IDPromocion = c.IDPromocion and p.Decuento >= 30 )
27
CONSULTA 15: − Nombre de todos los contenidos con precio entre X e Y inclusive, y que
han sido alguna vez parte de una promoción que determinaba un descuento mayor o igual al Z%
select CONTENIDO.Nombre_cont, PROMOCION.Fecha_ini, PROMOCION.Fecha_fin from PROMOCION inner join CONTENIDO on PROMOCION.IDPromocion = CONTENIDO.IDPromocion where PROMOCION.Fecha_ini >= CAST('20080101' AS DATETIME ) AND PROMOCION.Fecha_fin <= CAST('20081231' AS DATETIME );
28
PROCEDIMIENTOS ALMACENADOS:
AbrirCuenta: o Este procedimiento realiza el ingreso de un nuevo usuario asigandole
un estado activo, un monto inicial de 200 soles y al mismo tiempo un codigo unico de usuario.
CREATE PROCEDURE AbrirCuenta @ApellidoP AS VARCHAR(50), @ApellidoM AS VARCHAR(50), @Nombre AS VARCHAR(50), @Contraseña AS VARCHAR(8), @Correo AS VARCHAR(50), @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try INSERT INTO USUARIO VALUES ('TRUE', 'TRUE',@ApellidoP, @ApellidoM, @Nombre, @Contraseña, @Correo, 0, 200, 'FALSE', 0) SET @msg = '*****REGISTRO EXITOSO*****' COMMIT TRAN Tadd End try Begin Catch SET @msg = '*****ERROR AL REGISTRAR*****' Rollback TRAN Tadd End Catch END GO DECLARE @msg AS VARCHAR(100); EXEC AbrirCuenta 'Cervantes', 'Castillo', 'Haydee', '1234','[email protected]',@msg OUTPUT SELECT @msg AS msg SELECT * FROM USUARIO; DELETE FROM USUARIO WHERE IDUsuario='105' DROP PROCEDURE AbrirCuen
29
Cerrar Cuenta: o Para poder cerrar una cuenta de usuario se tiene que verificar que el
saldo de dicho cliente se encuentre en cero de lo contrario no se podrá realizar el cierre de su cuenta, tomando en cuenta que no se eliminara el usuario solo se le asignara un estado de inactivo.
CREATE PROCEDURE CerrarCuenta @Correo AS VARCHAR(50), @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try IF(SELECT Saldo_Actual FROM USUARIO WHERE @Correo = Correo) = 0 BEGIN UPDATE USUARIO SET Estado_Usuario = 'FALSE' WHERE Correo = @Correo ; SET @msg = '***USUARIO PASO DE ACTIVO A INACTIVO***' END ELSE SET @msg = '***EL CAMBIO NO SE PUEDE REALIZAR PORQUE EL USUARIO AUN TIENE SALDO EN SU CUENTA***' COMMIT TRAN Tadd End try Begin Catch SET @msg = '***ERROR AL ACTUALIZAR***' Rollback TRAN Tadd End Catch END GO DECLARE @msg AS VARCHAR(100); EXEC CerrarCuenta '[email protected]',@msg OUTPUT SELECT @msg AS msg select * from USUARIO; drop procedure CerrarCuenta; UPDATE USUARIO SET Saldo_Actual='0' WHERE IDUsuario= 107
30
Descarga: o Para realizar una descarga se tiene que tomar en cuenta si es que el
usuario cuenta con el saldo suficiente para realizar una descarga y al mismo tiempo verificar si el usuario ya descargó ese contenido; si no cumple estas dos condiciones el usuario no podrá realizar la descarga. Si se cumplen las condiciones se procederá a descontar de su saldo el monto de dicho producto ya sea que presente descuento o no, se incrementara su número de descargas y se generara una nueva tupla en la tabla descargas.
CREATE PROCEDURE Descargar @Correo AS VARCHAR(50), @Nom_Cont AS VARCHAR(30), @Puntuacion AS SMALLINT, @msg AS VARCHAR(100) OUTPUT AS BEGIN DECLARE @ID_C AS INT, @ID_U AS int ,@ID_D AS int SET NOCOUNT ON; Begin Tran Tadd Begin Try SELECT @ID_C = (SELECT IDContenido FROM CONTENIDO WHERE Nombre_cont = @Nom_Cont AND IDCatg_cont = 2 ) SELECT @ID_U = (SELECT IDUsuario FROM USUARIO WHERE Correo = @Correo ) SELECT @ID_D = (SELECT COUNT (IDDescargas) FROM DESCARGAS WHERE IDUsuario = @ID_U AND IDContenido = @ID_C) SET @msg = @ID_D IF(@ID_D) > 0 BEGIN SET @msg = '***CONTENIDO YA DESCARGADO***' END IF(@ID_D) = 0 BEGIN DECLARE @DSCT INT IF(SELECT Monto_Usu FROM USUARIO WHERE IDUsuario = @ID_U) >=150 BEGIN SET @DSCT = (SELECT Precio FROM CONTENIDO WHERE IDContenido = @ID_C)*0.8 UPDATE USUARIO SET Saldo_Actual = Saldo_Actual - @DSCT , Monto_Usu = Monto_Usu + @DSCT , Num_Dscg_Usuario = Num_Dscg_Usuario + 1 WHERE IDUsuario = @ID_U; END ELSE BEGIN SET @DSCT = (SELECT PRECIO FROM CONTENIDO WHERE IDContenido = @ID_C) UPDATE USUARIO SET Saldo_Actual = Saldo_Actual - @DSCT , Monto_Usu = Monto_Usu + @DSCT , Num_Dscg_Usuario = Num_Dscg_Usuario + 1 WHERE IDUsuario = @ID_U; END
31
INSERT INTO DESCARGAS VALUES(@ID_U,@ID_C,@Puntuacion,GETDATE()) SET @msg = '***DESCARGA EXITOSA***' END COMMIT TRAN Tadd End try Begin Catch SET @msg = '***ERROR EN LA DESCARGA***' Rollback TRAN Tadd End Catch END GO DECLARE @msg AS VARCHAR(100); EXEC Descargar '[email protected]','HE VUELTO', 7,@msg OUTPUT SELECT @msg AS MENSAJE DROP PROCEDURE Descargar; SELECT * FROM USUARIO; SELECT* FROM DESCARGAS;
32
Regalo: o Para realizar un regalo se verifica si el usuario cuenta con el saldo
suficiente, se asigna a que usuario va dirigido el regalo, se realiza el descuento del monto al usuario emisor y se realiza el registro del regalo en las tablas Regalo y Descargas.
CREATE PROCEDURE Regalos @UsuarioR AS VARCHAR(30), @UsuarioD AS VARCHAR(30), @Nom_Cont AS VARCHAR(30), @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try DECLARE @ID_C AS INT, @ID_UR AS int , @ID_UD AS int , @ID_D AS int , @ID_R AS int SET @ID_C = (SELECT IDContenido FROM CONTENIDO WHERE Nombre_cont= @Nom_Cont AND IDCatg_cont = 2 ) SET @ID_UR = (SELECT IDUsuario FROM USUARIO WHERE Correo= @UsuarioR ) SET @ID_UD = (SELECT IDUsuario FROM USUARIO WHERE Correo= @UsuarioD ) INSERT INTO REGALO VALUES ('1',GETDATE(),@ID_UR,@ID_UD,@ID_C) SET @ID_R = (SELECT IDRegalo FROM REGALO WHERE IDUsuario= @ID_UR AND IDUsuario_Dest = @ID_UD) IF(SELECT Estado_Regalo FROM REGALO WHERE IDUsuario = @ID_UR AND IDUsuario_Dest = @ID_UD) = 1 BEGIN DECLARE @DSCT INT INSERT INTO DESCARGAS VALUES(@ID_UD,@ID_C,7,GETDATE()) IF(SELECT Monto_Usu FROM USUARIO WHERE IDUsuario = @ID_UR) >= 150 BEGIN SET @DSCT = (SELECT Precio FROM CONTENIDO WHERE IDContenido = @ID_C)*0.8 UPDATE USUARIO SET Saldo_Actual = Saldo_Actual - @DSCT , Monto_Usu = Monto_Usu + @DSCT , Num_Dscg_Usuario = Num_Dscg_Usuario + 1 WHERE IDUsuario = @ID_UR; END ELSE BEGIN SET @DSCT = (SELECT Precio FROM CONTENIDO WHERE IDContenido = @ID_C) UPDATE USUARIO SET Saldo_Actual = Saldo_Actual - @DSCT , Monto_Usu = Monto_Usu + @DSCT , Num_Dscg_Usuario = Num_Dscg_Usuario + 1 WHERE IDUsuario = @ID_UR; END END COMMIT TRAN Tadd SET @msg = '***REGALO EXITOSO***' End try
33
Begin Catch SET @msg = '***ERROR AL PROCESAR EL REGALO***' Rollback TRAN Tadd End Catch END GO DECLARE @msg AS VARCHAR(100); EXEC Regalos '[email protected]','[email protected]','HE VUELTO',@msg OUTPUT SELECT @msg AS msg DROP PROCEDURE Regalos; SELECT * FROM USUARIO; SELECT * FROM REGALO; SELECT * FROM DESCARGAS;
Agregar Contenido: o Para agregar un contenido el administrador de la BD registra la
información requerida por los campos de la tabla Contenido.
CREATE PROCEDURE AgregarContenido @NomCont AS VARCHAR(50), @Descripcion VARCHAR(50), @Autor AS VARCHAR(50), @Estado AS bit, @Precio AS float, @Tamaño AS VARCHAR(50), @SecB AS IMAGE, @IDPromo AS INT, @IDCategoria AS INT, @Informacion AS VARCHAR(50), @Extension AS VARCHAR(50), @MMT AS VARCHAR(50), @msg AS VARCHAR(100) OUTPUT AS BEGIN DECLARE @ID_CONT INT SET NOCOUNT ON; Begin Tran Tadd Begin Try INSERT INTO CONTENIDO VALUES (@NomCont,@Descripcion, @Autor,@Estado,@Precio,@Tamaño,@SecB,0,0,@IDPromo, @IDCategoria,@Informacion,@Extension,@MMT) SET @ID_CONT= (SELECT IDContenido FROM CONTENIDO WHERE Nombre_cont = @NomCont) INSERT INTO PUENTECONTPROMO VALUES (@IDPromo,@ID_CONT)
SET @msg = '***COTENIDO AGREGADO***'
34
COMMIT TRAN Tadd End try Begin Catch SET @msg = '***ERROR AL AGRAGAR CONTENIDO***' Rollback TRAN Tadd End Catch END GO DECLARE @msg AS VARCHAR(100); EXEC AgregarContenido 'CARITA DE PASAPORTE','SALSA','N´SAMBLE','true',5.00,'3000kb',NULL,1,1,'MUSIC','.mp3','WINDOWS MEDIA',@msg OUTPUT SELECT @msg AS msg SELECT * FROM CONTENIDO
Ingresar Promoción: o Para asignar una promoción a un contenido el administrador de la BD
registra la información requerida por los campos de la tabla Promocion.
CREATE PROCEDURE IngresarPromocion @IDPromocion AS INT, @Descripcion AS VARCHAR(50), @Descuento AS FLOAT, @FechaI AS DATETIME, @FechaF AS DATETIME, @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try INSERT INTO PROMOCION VALUES (@IDPromocion,@Descripcion,@Descuento, @FechaI,@FechaF) SET @msg = '***PROMOCION INGRESADA***' COMMIT TRAN Tadd
35
End try Begin Catch SET @msg = 'ERROR AL INGRESAR PROMOCION' Rollback TRAN Tadd End Catch END GO DECLARE @msg AS VARCHAR(100); EXEC IngresarPromocion 11,'PROMOCION11',5,'05/05/2013','05/06/2013',@msg OUTPUT SELECT @msg AS msg DROP PROCEDURE IngresarPromocion; SELECT * FROM PROMOCION; SET DATEFORMAT dmy;
Cargar Dinero: o Para aumentar el saldo de la cuenta de un usuario se verifica el
depósito de dinero; una vez realizado el depósito el administrador de la BD aumenta el saldo con dicho monto.
CREATE PROCEDURE CargarDinero @IDUsu AS INT, @Saldo AS VARCHAR(50), @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try UPDATE USUARIO SET Saldo_Actual = Saldo_Actual + @saldo WHERE IDUsuario = @IDUsu SET @msg = '***RECARGA EXITOSA***' COMMIT TRAN Tadd End try Begin Catch SET @msg = '***ERROR AL RECARGAR DINERO***' Rollback TRAN Tadd
36
End Catch END GO DECLARE @msg AS VARCHAR(100); EXEC CargarDinero 1,35,@msg OUTPUT SELECT @msg AS msg DROP PROCEDURE CargarDinero; SELECT * FROM USUARIO;
Crear Categoría: o Para crear una categoría el administrador de la Base de datos asigna la
información requerida por los campos de la tabla Categoria. CREATE PROCEDURE CrearCategoria @Descripcion AS VARCHAR(50), @IDPadre AS INT, @IDHIzq AS INT, @IDHDer INT, @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try INSERT INTO CATEGORIA VALUES (@Descripcion,@IDPadre,@IDHIzq, @IDHDer) SET @msg = '***CATEGORIA CREADA CON EXITO***' COMMIT TRAN Tadd End try Begin Catch SET @msg = '***ERROR AL CREAR CATEGORIA***' Rollback TRAN Tadd End Catch
37
END GO DECLARE @msg AS VARCHAR(100); EXEC CrearCategoria 'VIDEOS MUSICALES BACHATAS',NULL,NULL,NULL,@msg OUTPUT SELECT @msg AS msg DROP PROCEDURE CrearCategoria; SELECT * FROM CATEGORIA;
38
DESCRIPCION GENERAL DE LA ARQUITECTURA
1. LOGIN
a. Para poder realizar una descarga debemos estar registrados, el cual es
el encargado de verificar si eres usuario o administrador mostrandote
un mensaje de verificacion de haber ingresado correctamente al
sistema.
public string bandest = ""; public int estado = 2; public string usuario; public int log = 0; public int logC = 1; protected void Page_Load(object sender, EventArgs e) { logC = (int)(Session["loginCerrar"]); if (log == 1) { Server.Transfer("DatosUsuario.aspx"); } if(logC == 0) { log = 0; estado = 2; usuario = ""; Session.Add("Estado", estado); Session.Add("Correo", usuario); Session.Add("login", log); } else { Session.Add("Estado", estado); Session.Add("login", log); } } protected void Button1_Click(object sender, EventArgs e) {
SqlConnection con = new SqlConnection(cadenaconexion); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader dr; con.Open(); dr = cmd.ExecuteReader(); if (dr.Read()) {
SqlDataAdapter daCategory = new SqlDataAdapter ("Descargar", cn); daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;
44
var cm = new SqlCommand("Descargar", cn); cm.CommandType = System.Data.CommandType.StoredProcedure; cm.Parameters.AddWithValue("@Correo", nombre); cm.Parameters.AddWithValue("@ID_C", IDContenido); cm.Parameters.AddWithValue("@Puntuacion", nota); cn.Open(); cm.ExecuteNonQuery(); cn.Close(); txtUsuarioD.Text = ""; txtNotaD.Text = ""; }
5. ADMINISTRACION
a. Esta pestaña es utilizada únicamente por el administrador de la BD en cual podrá modificar, insertar y eliminar los Contenidos de la BD, la funcionalidad para administrar contenidos es la siguiente: INSERTAR CONTENIDO: Para poder insertar un contenido debemos conocer los campos que se almacenan en la BD, con tal conocimiento podemos crear las respectivas variables que almacenaran los datos a ingresar una vez hecho ese proceso se envían las variables al procedimiento de inserción.
protected void btnInsertarCont_Click(object sender, EventArgs e) { var cn = new SqlConnection();
string selectSQL = "SELECT * FROM CONTENIDO'"; SqlConnection con = new SqlConnection(cadenaconexion); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader dr; try { con.Open(); dr = cmd.ExecuteReader(); GridView1.DataSource = dr; con.Close(); } catch (Exception err) { lblAlerta.Text = err.Message; } }
MODIFICAR CONTENIDO: Para realizar la modificación primero mostramos los datos en un gridView el cual nos dará mayor facilidad; seleccionando la tupla a modificar y cargando los valores en las variables, las cuales son enviadas como parámetros al procedimiento a ejecutar.
protected void btnModificarCont_Click(object sender, EventArgs e) { var cn = new SqlConnection();
string selectSQL = "SELECT * FROM CONTENIDO'"; GridView1.AutoGenerateSelectButton = true; SqlConnection con = new SqlConnection(cadenaconexion); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader dr; try { con.Open(); dr = cmd.ExecuteReader(); GridView1.DataSource = dr; con.Close(); } catch (Exception err) { lblAlerta.Text = err.Message; } } }
ELIMINAR CONTENIDO Para eliminar un contenido solo nos fijamos en su ID y el procedimiento almacenado hace referencia a ese ID con la tabla, en la cual se borrara el dato una vez que hayamos enviado los datos al procedimiento almacenado
47
protected void btnEliminarPro_Click(object sender, EventArgs e) { var cn = new SqlConnection();
string selectSQL = "SELECT * FROM CONTENIDO'"; SqlConnection con = new SqlConnection(cadenaconexion); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader dr; try { con.Open(); dr = cmd.ExecuteReader(); GridView1.DataSource = dr; con.Close(); } catch (Exception err) { lblAlerta.Text = err.Message; } }
a. Aparte de realizar mantenimiento a los contenidos de la BD, también
puede realizar mantenimiento a los Usuarios como son Cargar Dinero, Cerrar Cuenta, la funcionalidad para administrar Usuarios es la siguiente: CARGAR DINERO
Las variables utilizadas en este procesamiento son: Correo Electrónico Monto
El correo electrónico es el que identifica a que usuario se le va a recargar el dinero guardando el valor en una variable y enviándolo al procedimiento almacenado.
protected void btnRecargar_Click(object sender, EventArgs e) { var cn = new SqlConnection();