Professional Documents
Culture Documents
ESCUELA DE INFORMÁTICA
CATEDRA DE INGENIERÍA DE SISTEMAS
Tarea: Intercambio Tecnológico
Grupo 32
Integrantes:
Fecha: 26/02/2011
1
Universidad Nacional Ingeniería de Sistemas III Cátedra de
Escuela de Informática I Ciclo 2011 Ingeniería de Sistemas
1. Introducción
1.1 Objetivos
• Promover el aprendizaje colaborativo entre estudiantes y profesores.
• Exponer los hallazgos, opciones y solución que implementaron durante el
desarrollo de su proyecto en materia de las TIC
Sabemos que un sistema usualmente tiene mucha participación la base de datos, esto
lleva a un criterio que si la base de datos es solida y está bien diseñada, tendrá un
nivel de éxito mayor, con esto y debido a que el sistema que nuestro grupo esta
implementado tiene un nivel de consultar exigente, múltiples datos y acceso de
múltiples usuarios a una misma consulta, sin olvidar que por la magnitud del sistema
contiene una número de tablas a considerar. Se presento el problema de cómo hacer
frente a esta programación de la base de datos, si implementábamos un
procedimiento para cada instrucción o solicitud eso sería muy enorme y luego difícil de
manejar.
Con lo anterior surgió la siguiente interrogante e investigación; ¿Cómo optimizar los
procedimientos almacenados de tal forma que tan solo con una llamada podamos
implementar varios tipos de consultas o solicitudes a la base de datos?
2
1.3 Metodología de investigación.
/*==============================================================*/
/* Table: PERSONA */
/*==============================================================*/
create table PERSONA (
CEDULA int not null,
PRIMER_NOMBRE varchar(50) null,
SEGUNDO_NOMBRE varchar(50) null,
APELLIDO_MAR varchar(50) null,
APELLIDO_PAR varchar(50) null,
TELFONO varchar(12) null,
SEXO char null,
CELULAR varchar(12) null,
DIRECCION varchar(50) null,
FECHA_NACIMIENTO datetime null,
constraint PK_PERSONA primary key (CEDULA)
)
Go
/*******----ADD-----******/
3
BEGIN TRY
BEGIN TRAN
INSERT INTO PERSONA(CEDULA,PRIMER_NOMBRE, SEGUNDO_NOMBRE,APELLIDO_MAR,
APELLIDO_PAR,TELEFONO , SEXO ,CELULAR, DIRECCION,FECHA_NACIMIENTO)
VALUES(@CEDULA,@PRIMER_NOMBRE, @SEGUNDO_NOMBRE ,@APELLIDO_MAR ,
@APELLIDO_PAR ,@TELEFONO , @SEXO ,@CELULAR , @DIRECCION ,
@FECHA_NACIMIENTO )
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
PRINT ERROR_MESSAGE()
END CATCH
GO
/*******----DEL-----******/
/*******----UPD-----******/
/*******----SLT-----******/
4
@COD_PROCEDIMIENTO INT, @DESCRIPCION VARCHAR(50)
AS
SET NOCOUNT ON
BEGIN TRY
BEGIN TRAN
SELECT P.CEDULA,
P.PRIMER_NOMBRE,P.SEGUNDO_NOMBRE,P.APELLIDO_PAR,P.APELLIDO_MAR,
P.TELFONO,P.SEXO,P.CELULAR,P.DIRECCION,P.FECHA_NACIMIENTO FROM PERSONA P
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
PRINT ERROR_MESSAGE()
END CATCH
GO
/*==============================================================*/
/* Table: Articulo */
/*==============================================================*/
Para no tener que implementar los procedimientos insertar, eliminar y modificar por
separado se hace lo siguiente:
5
alter PROCEDURE SP_IMEARTICULO
@MODO int, @PSCODIGO VARCHAR(100),
@PSDESCRIPCION VARCHAR(100),
@PLBLOQUEADO VARCHAR(1),
@POCATEGORIA VARCHAR(100),
@POUNIDAD VARCHAR(100),
@POPROVEEDOR VARCHAR(100),
@POBODEGA VARCHAR(100),
@PSCOMENTARIO VARCHAR(100),
@PBEXISTENCIAREAL NUMERIC(18,2),
@PBEXISTENCIAMIN NUMERIC(18,2),
@PBVOLUMEN NUMERIC(18,2),
@PBCOSTOUNIDAD NUMERIC(18,2),
@PSEMPAQUETADO VARCHAR(100)
AS
BEGIN TRY
BEGIN TRAN
IF @MODO=1
BEGIN ----- ingresa articulos
INSERT INTO Articulos
VALUES(@PSCODIGO,@PSDESCRIPCION,@PLBLOQUEADO,@POCATEGORIA,@POUNIDAD,
@POPROVEEDOR,@POBODEGA,
@PSCOMENTARIO,@PBEXISTENCIAREAL,@PBEXISTENCIAMIN,@PBVOLUMEN,@PBCOSTOUNIDAD,@PSEM
PAQUETADO)
END
IF @MODO=2
BEGIN -------actualiza articulos
UPDATE Articulos SET psDescripcion=
@PSDESCRIPCION,plBloqueado= @PLBLOQUEADO,poCategoria= @POCATEGORIA,poUnidad=
@POUNIDAD,
poProveedor= @POPROVEEDOR,poBodega= @POBODEGA,psComentario=
@PSCOMENTARIO, pbExistenciaReal= @PBEXISTENCIAREAL,
pbExistenciaMin= @PBEXISTENCIAMIN ,pbVolumen=
@PBVOLUMEN,pbCostoUnidad= @PBCOSTOUNIDAD , psEmpaquetado= @PSEMPAQUETADO
WHERE psCodigo= @PSCODIGO
END
IF @MODO=3
BEGIN ---- elimina articulos
DELETE FROM Articulos WHERE psCodigo= @PSCODIGO
END
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
PRINT ERROR_MESSAGE()
END CATCH
Sin embargo muchos podrían decir es lo mismo solo que lo unifico, pues para la base
de datos sí, pero el script hace que la base de datos sea pesada únicamente por los
datos, sin olvidar que cuando los llamemos al código del lenguaje que implementemos
será mejor, porque solo necesitaremos llamar un procedimiento. Hay que acotar que
las bases de datos son muy rápidas y más eficientes que el código, para la base de
datos no va a representar mayos dificultad que lo normal. La solicitud se hará en
segundos y para uno como programador representara menos tiempo y menor
desarrollo de código.
Ahora dos detalles más para ejecutar lo anterior usamos lo siguiente:
6
---------------ejecuta el procedure
EXEC sp_IMEARTICULO
1,"DE","BLOQUEO","CATE","UNI","PRO","BODE","COMEN",4,2,10,200,30,"20"
Go
De esta manera podemos hacer una consulta específica y otra de todos los datos. Así
al igual que el procedimiento anterior solo debemos llamar a un solo procedimiento
para ejecutar varias solicitudes. Y de igual forma se ejecuta de la siguiente manera:
1.5 Conclusiones
Es sorprendente ver que la forma que uno hace las cosas no siempre es la mejor y la
más ideal, también existen mejores formas de implementar los diferentes problemas
que se le pueden presentar, aun así existe la posibilidad de que exista mejores formas
de poder realizar las diferentes implementaciones.
No obstante uno como desarrollador siempre debe de buscar la mejor forma de hacer
o implementar una solución, esto porque un sistema que maneje grandes sumas de
datos la eficiencia y la exactitud favorece contra el tiempo, sin olvidar que nosotros
estamos entregando un sistema de calidad.
7
1.6 Recomendaciones