Programación de Base de Datos - Unidad II: Aplicaciones con Arquitectura Clie...
Arquitectura cliente servidor
1. Sistemas de Base de Datos
CAPÍTULO V
ARQUITECTURA CLIENTE
SERVIDOR
DAI - Ing. Arturo Rozas Huacho 1
2. Sistemas de Base de Datos
5.1.- Arquitectura Cliente/Servidor
TCP/IP
TCP/IP BASE DE
DATOS
DAI - Ing. Arturo Rozas Huacho 2
3. Sistemas de Base de Datos
5.1.- Arquitectura Cliente/Servidor…
Servidores
• Servidores de archivos
Compartir documentos, imágenes, planos de
ingeniería y otros objetos de grandes
dimensiones.
• Servidores de bases de datos
Intercambio de mensajes Solicitud/Respuesta
mediante instrucciones SQL.
• Servidores de transacciones
El cliente invoca procedimientos remotos que
residen en el servidor. Los enunciados de SQL
aciertan o fallan todos como una sola unidad.
(OLAP: Online Transaction Processing)
DAI - Ing. Arturo Rozas Huacho 3
4. Sistemas de Base de Datos
5.1.- Arquitectura Cliente/Servidor…
Servidores
•Servidores de groupware
DAI - Ing. Arturo Rozas Huacho 4
5. Sistemas de Base de Datos
5.1.- Arquitectura Cliente/Servidor
Elementos de Construcción de Cliente/Servidor
e
w ar
l e
i dd
M
Cliente
Servidor
DAI - Ing. Arturo Rozas Huacho 5
6. Sistemas de Base de Datos
5.1.- Arquitectura Cliente/Servidor…
Servidor
• Espera las solicitudes de los clientes
• Ejecuta muchas solicitudes al mismo
tiempo
• Atiende primero a los clientes VIP
(very important person)
• Emprende y opera actividades de tareas en
segundo plano
• Se mantiene ejecutándose
permanentemente
DAI - Ing. Arturo Rozas Huacho 6
7. Sistemas de Base de Datos
5.1.- Arquitectura Cliente/Servidor…
¿Qué es middleware?
Es un término vago que abarca a todo
el software distribuido necesario para
el soporte de interacciones entre
clientes y servidores.
Es el enlace que permite que un
cliente obtenga un servicio de un
servidor.
DAI - Ing. Arturo Rozas Huacho 7
8. Sistemas de Base de Datos
5.2.- Servicios de Base de Datos
Los servicios de BD se almacenan en la base de datos y pueden ser
funciones y procedimientos.
Aplicación
Solicitud Servicios (SQL)
Aplicación BASE DE
DATOS
Datos
Servicio 1
Aplicación Servicio 2
Servidor …
Servicio n
Clientes
DAI - Ing. Arturo Rozas Huacho 8
9. Sistemas de Base de Datos
5.2.- Servicios de BD
Los servicios de BD pueden ser de tipo función
o de tipo procedimiento (stored procedure)
Son un grupo de sentencias SQL que es
compilado una vez, y luego puede ser ejecutado
muchas veces.
Las funciones y los procedimientos
almacenados se almacenan en la base de datos
y constituyen los servicios que ofrece la base
de datos (Cliente/Servidor).
Las funciones y los procedimientos
almacenados cuando se ejecutan no tienen que
ser recompilados cada vez, este hecho hace
que sean muy eficientes.
DAI - Ing. Arturo Rozas Huacho 9
10. Sistemas de Base de Datos
5.3.- Funciones Definidas por el Usuario
Se tienen tres tipos:
Escalares: Retornan un tipo de los datos
como int, money, varchar, real, etc. Pueden
ser utilizadas dentro de sentencias SQL .
De tabla en Linea: Retornan la salida de una
simple declaración SELECT. La salida se
puede utilizar dentro de composiciones o
consultas como si fuera una tabla de
estándar.
De multisentencia: Dan como resultado una
tabla, puede estar constituido por varias
sentencias SQL, y puede llamar a otras
funciones. La salida también se puede
utilizar en operaciones de tabla.
DAI - Ing. Arturo Rozas Huacho 10
11. 5.3.- Funciones Definidas
Sistemas de Base de Datos por el
Usuario…
Funciones escalares:
/* ********************************************
Function que convierte una nota de tipo texto a número
********************************************* */
CREATE FUNCTION fnNota (@NotaTexto varchar(3))
RETURNS int
AS
BEGIN
declare @Nota int;
set @Nota = case
when @NotaTexto = 'NSP' then 0
else Cast(@NotaTexto as int)
end;
return(@Nota);
END
DAI - Ing. Arturo Rozas Huacho 11
12. 5.3.- Funciones Definidas
Sistemas de Base de Datos por el
Usuario…
Funciones escalares:
/* *********************************************
Function que convierte una nota a número
********************************************** */
CREATE FUNCTION fnRecuperarNota (@Semestre varchar(7),
@Cod_Asignatura varchar(5),
@Cod_Alumno varchar(6))
RETURNS int
AS
BEGIN
declare @Nota int;
select @Nota = dbo.fnNota(Nota)
from MATRICULA
where (Semestre = @Semestre) and
(Cod_Asignatura = @Cod_Asignatura) and
(Cod_Alumno = @Cod_Alumno)
return(@Nota)
END
DAI - Ing. Arturo Rozas Huacho 12
13. 5.3.- Funciones Definidas
Sistemas de Base de Datos por el
Usuario…
Funciones de tabla en Línea:
/* *******************************************************
Function que devuelve las asignaturas aprobadas
******************************************************* */
ALTER FUNCTION fnAsignaturasAprobadas(@Cod_CP varchar(2))
RETURNS TABLE
AS
RETURN (SELECT M.Semestre, M.Cod_CP, M.Cod_Alumno,
M.Cod_Asignatura,
A.Nombre_Asignatura, A.Creditos, A.Categoria,
Nota = dbo.fnNota(M.Nota)
FROM MATRICULA M inner join ASIGNATURA A
ON (M.Cod_Asignatura = A.Cod_Asignatura) and
(M.Cod_CP = A.Cod_CP)
WHERE ((M.Cod_CP = @Cod_CP) or (@Cod_Cp = '*')) and
(dbo.fnNota(M.Nota) > 10))
DAI - Ing. Arturo Rozas Huacho 13
15. 5.3.- Funciones Definidas
Sistemas de Base de Datos por el
Usuario…
Funciones de multisentencia:
-- Recuperar información a la tabla temporal
insert into @taCreditosAcumulados
select Semestre, Cod_Alumno, sum(Creditos), sum(Creditos)
from dbo.fnAsignaturasAprobadas(@Cod_CP)
group by Semestre, Cod_Alumno
order by Cod_Alumno, Semestre
-- Acumular los creditos por semestre
-- Declarar e inicializar variables
declare @Cod_Alumno varchar(6),
@Creditos_Acum int;
set @Cod_Alumno = '';
set @Creditos_Acum = 0;
DAI - Ing. Arturo Rozas Huacho 15
16. 5.3.- Funciones Definidas
Sistemas de Base de Datos por el
Usuario…
Funciones de multisentencia:
-- Acumular creditos
update @taCreditosAcumulados
set @Creditos_Acum = Creditos_Acum = case
when @Cod_Alumno <>
Cod_Alumno then Creditos
else @Creditos_Acum +
Creditos
end,
@Cod_Alumno = Cod_Alumno;
-- Devolver resultado
INSERT INTO @taCreditosAcumuladosSemestre
SELECT C.Semestre, A.Cod_Alumno, A.Paterno, A.Materno, A.Nombres,
A.Cod_CP, C.Creditos, C.Creditos_Acum
from @taCreditosAcumulados C inner join ALUMNO A
ON C.Cod_Alumno = A.Cod_Alumno
RETURN
END
DAI - Ing. Arturo Rozas Huacho 16
17. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Se escriben utilizando el lenguaje de
programación de la base de Datos. Permiten
declaración de variables, sentencias de
asignación, estructuras selectivas y repetitivas.
Aceptan parámetros de entrada y salida
Pueden retornar conjunto de datos así como
también un solo valor.
Permiten la programación modular y puede
hacer referencia a otros procedimientos
almacenados, con lo que se puede simplificar
una serie de instrucciones complejas.
Pueden ser ejecutados desde otros
procedimientos almacenados, vistas,
disparadores y consultas en general.
DAI - Ing. Arturo Rozas Huacho 17
18. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Sintaxis :
CREATE PROCEDURE nombre procedimiento
@parametros tipo de dato [= valor],
@parametros_salida tipo de dato OUTPUT
AS
[DECLARE @Variables tipos]
BEGIN
sentencias sql
END
DAI - Ing. Arturo Rozas Huacho 18
19. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Escribir procedimientos almacenados
Escribir un procedimiento para determinar la
relación de alumnos de una determinada carrera
CREATE PROCEDURE sp_AlumnosPorCarrera
@Cod_Carrera varchar(2)
AS
BEGIN
-- Seleccionar alumnos de la carrera indicada
SELECT *
FROM ALUMNO
WHERE Cod_Carrera = @Cod_Carrera
END
Constituye el código fuente, se debe almacenar
como un archivo de extensión SQL.
Este código se debe compilar y almacenar en la
base de datos, para que pueda ser invocado como un
servicio.
DAI - Ing. Arturo Rozas Huacho 19
20. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejecución de un procedimiento.
Sintaxis :
[DECLARE @variables tipo de variable]
EXEC/EXECUTE nombre_procedimiento [@parametros], [@variables]
Ejemplo de ejecución:
exec sp_AlumnosPorCarrera ‘IN’
DAI - Ing. Arturo Rozas Huacho 20
21. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios:
Dadas las siguientes tablas
Comunidad( CodComunidad, Nombre )
Prestatario( CodPrestatario, Nombres, Sexo, EstadoCivil,
DocIdentidad,
CodComunidad)
Oficial_Credito( CodOficial, Nombres, Email )
Prestamo( DocPrestamo, FechaPrestamo, Importe,
FechaVencimiento,
CodPrestatario, CodOficial )
Amortizacion( DocCancelacion, FechaCancelacion, Importe,
DocPrestamo)
DAI - Ing. Arturo Rozas Huacho 21
22. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 1)
Determinar la relacion de Comunidades, con los saldos de
los prestamos pertenecientes a la comunidad.
R(CodComunidad, Nombre, Saldo)
create procedure spu_Saldo_Comunidad @CodComunidad varchar(12)
as
begin
-- Determinar los montos cancelados por cada documento
select DocPrestamo, sum(Importe) MontoCancelado
into #Montos_Cancelados
from Amortizacion
group by DocPrestamo
-- Determinar los saldos de cada Prestamo
select P.DocPrestamo, P.CodPrestatario,
(P.Importe - IsNull(M.MontoCancelado,0)) Saldo
into #Saldos_Prestamos
from Prestamo P left outer join #Montos_Cancelados M
on P.DocPrestamo = M.DocPrestamo
DAI - Ing. Arturo Rozas Huacho 22
23. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 1 …)
-- Determinar los saldos de cada prestatario de la comunidad
-- especificada
select S.CodPrestatario, sum(S.Saldo) Saldo, P.CodComunidad
into #Saldos_Prestatario
from #Saldos_Prestamos S, Prestatario P
where (S.CodPrestatario = P.CodPrestatario) and
(P.CodComunidad = @CodComunidad)
group by S.CodPrestatario, P.CodComunidad
-- Determinar los saldos de cada comunidad
select S.CodComunidad, C.Nombre, sum(S.Saldo) Saldo
from #Saldos_Prestatario S, Comunidad C
where S.CodComunidad = C.CodComunidad
group by S.CodComunidad, C.Nombre
end;
DAI - Ing. Arturo Rozas Huacho 23
24. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 2)
Escribir un procedimiento almacenado que obtenga los
movimientos para un determinado prestatario, considerando los
saldos por préstamo y los saldos por prestatario. El
procedimiento debe mostrar la relación de todos los préstamos
del prestatario y para cada préstamo sus respectivas
cancelaciones, tal como se ilustra en el ejemplo siguiente:
R(FechaMov,DocPrestamo,DocCancelacion,Debe,Haber,SaldoPrestamo,SaldoTotal)
02/02/06 PA-101 1000 1000 1000
31/03/06 RC-421 200 800 800
30/04/06 RC-467 300 500 500
15/04/06 PA-246 1600 1600 2100
30/04/06 RC-478 700 900 1400
31/05/06 RC-523 900 0 500
...
DAI - Ing. Arturo Rozas Huacho 24
25. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
create procedure sp_Prestatario_Rural_Movimientos
@CodPrestatario varchar(15)
as
begin
-- Crear tabla vacia de movimientos
create table #Movimientos
(
Fecha_Mov DateTime,
DocPrestamo varchar(15),
DocCancelacion varchar(15),
Debe numeric(15,2),
Haber numeric(15,2),
SaldoPrestamo numeric(15,2),
SaldoTotal numeric(15,2)
)
DAI - Ing. Arturo Rozas Huacho 25
26. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
-- Recuperar Prestamos y cancelaciones de movimientos
-- Declarar variables utilizadas por el cursor
declare @DocPrestamo varchar(15), @FechaPrestamo DateTime,
@ImportePrestamo numeric(15,2),
@SaldoPrestamo numeric(15,2),
@SaldoTotal numeric(15,2);
-- Inicializar saldo
set @SaldoPrestamo = 0;
set @SaldoTotal = 0;
-- Declarar el cursor
declare cursor_Prestamo cursor
for
select DocPrestamo, FechaPrestamo, ImportePrestamo
from Prestamo
where CodPrestatario = @CodPrestatario;
-- Abrir el cursor
open cursor_Prestamo;
DAI - Ing. Arturo Rozas Huacho 26
27. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
-- Activar la primera fila del cursor
fetch next from cursor_Prestamo
into @DocPrestamo, @FechaPrestamo, @ImportePrestamo
-- Procesar cada fila repetitivamente
while @@FETCH_STATUS = 0
begin
-- Inicializar saldo prestamo
set @SaldoPrestamo = @ImportePrestamo;
-- Actualizar saldo total
set @SaldoTotal = @SaldoTotal + @ImportePrestamo;
-- Insertar prestamo en tabla de movimientos
insert into #Movimientos
values(@FechaPrestamo,@DocPrestamo,'',
@ImportePrestamo,0,@SaldoPrestamo,
@SaldoTotal)
-- Procesar cancelaciones del prestamo
declare @DocCancelacion varchar(15),
@FechaCancelacion DateTime,
@ImporteCancelacion numeric(15,2);
DAI - Ing. Arturo Rozas Huacho 27
28. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
-- Declarar el cursor anidado
declare cursor_Cancelacion cursor
for
select DocCancelacion, FechaCancelacion, ImporteCancelacion
from Cancelacion
where DocPrestamo = @DocPrestamo;
-- Abrir el cursor
open cursor_Cancelacion;
-- Activar la primera fila del cursor
fetch next from cursor_Cancelacion
into @DocCancelacion, @FechaCancelacion, @ImporteCancelacion
-- Procesar cada fila repetitivamente
while @@FETCH_STATUS = 0
begin
-- Actualizar saldos
set @SaldoPrestamo = @SaldoPrestamo - @ImporteCancelacion;
set @SaldoTotal = @SaldoTotal - @ImporteCancelacion;
DAI - Ing. Arturo Rozas Huacho 28
29. Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
-- Insertar prestamo en tabla de movimientos
insert into #Movimientos
values(@FechaCancelacion,'',@DocCancelacion, 0,
@ImportePrestamo, @SaldoPrestamo, @SaldoTotal)
-- Siguiente registro
fetch next from cursor_Cancelacion
into @DocCancelacion, @FechaCancelacion, @ImporteCancelacion
end; -- while
-- Cerrar Cursor
close cursor_Cancelacion;
deallocate cursor_Cancelacion;
-- Siguiente registro de prestamo
fetch next from cursor_Prestamo
into @DocPrestamo, @FechaPrestamo, @ImportePrestamo
end; -- while
-- Cerrar Cursor
close cursor_Prestamo;
deallocate cursor_Prestamo;
-- Mostrar Movimientos
select *
from #Movimientos
end;
DAI - Ing. Arturo Rozas Huacho 29
Notas del editor
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho