Sunteți pe pagina 1din 6

UNIVERSIDAD NACIONAL DE TRUJILLO-Escuela de Ing.

Sistemas

LABORATORIO N 01
TRANSACCIONES EN UNA BASE DE DATOS

1. Crear la siguiente base de datos y tablas:


- Base de datos: FACTURAS
- Tablas:
CLIENTE(CLI_numero, CLI_apellido, CLI_nombre, CLI_inicial, CLI_codarea, CLI_telefono,
CLI_saldo)
VENDEDOR(VEN_numero, VEN_nombre, VEN_contacto, VEN_codarea, VEN_telefono,
VEN_estado, VEN_orden)
FACTURA(FAC_numero, FAC_fecha, FAC_subtotal, FAC_igv, FAC_total, FAC_tipopago,
FAC_cantidadpago, FAC_saldo, CLI_numero)
PRODUCTO(PRO_numero, PRO_descripcion, PRO_fechaentrada, PRO_stock,
PRO_stockminimo, PRO_precio, PRO_descuento, VEN_numero)
VENTAS(VTA_numero, FAC_numero, VTA_unidades, VTA_precio, VTA_cantidad,
PRO_numero)
MOVIMIENTOS(MOV_numero, MOV_fecha, MOV_tipotransacc, MOV_cantidad,
CLI_numero)
2. Modelado de la base de datos en Erwin

Dr. LUIS BOY CHAVIL Pgina 1


UNIVERSIDAD NACIONAL DE TRUJILLO-Escuela de Ing. Sistemas

3. Reglas de Integridad
Tabla: CLIENTE
o Primary key: CLI_numero, identity (Autogenerado)
o default (0) for CLI_saldo
Tabla: FACTURA
o Primary Key: FAC_numero
o Foreign Key: CLI_numero
o default (0) for FAC_subtotal
o default (0) for FAC_igv
o default (0) for FAC_total
o Check (FAC_tipopago in ('cc', 'chk', 'cash', 'cred') )
o default (cc) for FAC_tipopago
o default (0) for FAC_cantidadpago
o default (0) for FAC_saldo

Tabla: MOVIMIENTOS

o Primary key: MOV_numero


o Foreign Key: CLI_numero
o default (0) for MOV_cantidad

Tabla: PRODUCTO

o Primary key: PRO_numero


o Foreign Key: VEN_numero
o default (0) for PRO_stock
o default (0) for PRO_stockminimo
o default (0) for PRO_precio
o default (0) for PRO_descuento

Tabla: VENDEDOR

o Primary key: VEN_numero

Tabla: VENTAS

o Primary key: (VTA_numero, FAC_numero)


VTA_numero, identity (Autogenerado)
Foreign key: FAC_numero
o Foreign key: PRO_numero
o default (0) for VTA_unidades
o default (0) for VTA_precio
o default (0) for VTA_cantidad

Dr. LUIS BOY CHAVIL Pgina 2


UNIVERSIDAD NACIONAL DE TRUJILLO-Escuela de Ing. Sistemas

4. Diseo de la base de datos en SQL Server

Planteamiento de casos:

1. Insertar un PRODUCTO nuevo, verificando que existe VENDEDOR

use FACTURAS
go

if OBJECT_ID('ProductoNew') is not null


drop procedure dbo.ProductoNew
go
create procedure ProductoNew
(@PRO_numero char(10),
@PRO_descripcion varchar(35),
@PRO_fechaentrada datetime,
@PRO_stock int,
@PRO_stockminimo int,
@PRO_precio decimal(7,2),
@PRO_descuento decimal(7, 2),
@VEN_nombre varchar(15) )
AS
begin transaction TransacProducto
declare @VEN_numero char(04)
select @VEN_numero=VEN_numero
from VENDEDOR

Dr. LUIS BOY CHAVIL Pgina 3


UNIVERSIDAD NACIONAL DE TRUJILLO-Escuela de Ing. Sistemas

where VEN_nombre=@VEN_nombre
Insert into PRODUCTO
values(@PRO_numero, @PRO_descripcion, @PRO_fechaentrada, @PRO_stock,
@PRO_stockminimo, @PRO_precio, @PRO_descuento, @VEN_numero)
if @@error=0
begin
print 'Producto registrado exitosamente'
commit tran TransacProducto
end
else
begin
print 'Ocurri error al insertar ...'
rollback tran TransacProducto
end
go

--Ejecucin del SP
exec ProductoNew '99-WRE-Q','Llantas radiales 32x14', '18/01/2015',
100.00, 25.00, 97.55, 0.00, 'Juan Perez'

2. Insertar un MOVIMIENTO nuevo, verificando que existe CLIENTE

use FACTURAS
go

if OBJECT_ID('MovimientoNew') is not null


drop procedure dbo.MovimientoNew
go
create procedure MovimientoNew(@MOV_numero char(10), @MOV_fecha datetime,
@MOV_tipotransacc char(08), @MOV_cantidad decimal(7,2), @CLI_apellido char(18),
@CLI_nombre char(18))
AS
begin transaction TransacMovimiento
declare @CLI_numero int
select @CLI_numero=CLI_numero
from CLIENTE
where CLI_apellido=@CLI_apellido and CLI_nombre=@CLI_nombre
Insert into MOVIMIENTOS
values(@MOV_numero, @MOV_fecha, @MOV_tipotransacc, @MOV_cantidad,
@CLI_numero)
if @@error=0
begin
print 'Movimiento registrado exitosamente'
commit tran TransacMovimiento
end
else

Dr. LUIS BOY CHAVIL Pgina 4


UNIVERSIDAD NACIONAL DE TRUJILLO-Escuela de Ing. Sistemas
begin
print 'Ocurri error al insertar ...'
rollback tran TransacMovimiento
end
go

--Ejecucin del SP
use FACTURAS
go
exec MovimientoNew '10220','18/01/2015', 'venta', 100.00, 'Perez Chavez', 'Daniel'
go

3. Supongamos que el 18 de enero de 2015, se registra la venta a crdito de una unidad del
producto 99-WRE-Q al cliente 1002 por la cantidad de S/. 277.55. Para el caso, se debera
realizar la siguiente transaccin:

use FACTURAS
go
Begin transaction TransacVenta
Insert Into FACTURA
values('10280012', '18/01/2015', 256.99, 20.56, 277.55, 'cred', 0.00, 277.55, 1002)

Insert Into VENTAS(VTA_numero, FAC_numero, PRO_numero, VTA_unidades, VTA_precio,


VTA_cantidad)
values(1, '10280012', '99-WRE-Q', 1, 256.99, 256.99)

Update PRODUCTO
set PRO_stock=PRO_stock-1
where PRO_numero='99-WRE-Q'

Update CLIENTE
set CLI_saldo=CLI_saldo+277.55
where CLI_numero=1002

Insert Into MOVIMIENTOS


values('1005', 18/01/2015, 'cobro', 277.55, 1002)

if @@error=0
begin
print 'Transaccin exitosa ...'
commit transaction TransacVenta
end
else
begin
print 'Error en la Transaccin ...'
rollback transaction TransacVenta

Dr. LUIS BOY CHAVIL Pgina 5


UNIVERSIDAD NACIONAL DE TRUJILLO-Escuela de Ing. Sistemas

end
go

Explicacin de las operaciones realizadas:

- Hemos agregado una fila para la tabla FACTURA, con el nmero: '10280012', en esa fila, los
valores del atributo derivado se guardaron para el sub total de la factura, el impuesto, el
total de la factura y el saldo de sta.
- La fila VENTA para la factura '10280012' se agreg para reflejar la compra de una unidad del
producto 99-WRE-Q' con precio de S/. 256.99. En esta fila se guardaron los valores del
atributo derivado para la cantidad de la venta.
- La cantidad disponible del producto 99-WRE-Q se redujo en 1.
- El saldo del cliente 1002 se actualiz al agregar S/. 277.55 al saldo existente; su valor inicial
era de S/. 0.00
- Se agreg una nueva fila a la tabla MOVIMIENTOS para reflejar el nuevo nmero de
transaccin de la cuenta 1005.
- Finalmente, utilizamos la clusula commit transaction para confirmar en forma satisfactoria
la transaccin y adems utilizamos la clusula rollback transaction para deshacer las
operaciones realizadas en caso alguna de estas tareas no se llegara a realizar exitosamente.

Dr. LUIS BOY CHAVIL Pgina 6

S-ar putea să vă placă și