Вы находитесь на странице: 1из 9

UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO

FACULTAD DE ESTUDIOS SUPERIORES


PLANTEL ACATLAN

TRABAJO PARCIAL

Alumnos:
Hernndez Hernndez Elihu
Miranda Hernndez Marco Antonio
Materia: Base de datos distribuidas
Profesor: Javier Rosas Hernndez
Marzo 2015

1. Introduccin
El siguiente trabajo toma ejemplifica una transaccin en la que se necesita transferir el saldo de una
cuenta a otra.
Se indica que se requiere transferir un saldo de la cuenta A a la cuenta B, considerando que el cliente
tiene un nmero de operaciones. Adems cada operacin se guarda en un histrico y en una bitcora
con fines de auditoria.
Mediante el proceso que se describe anteriormente es necesario que validemos que la cuenta
origen como la cuenta destino exista y que en la primera tenga saldo suficiente para poder
transferirlo a la segunda, tampoco debe tener saldo negativo.

2. Modelo E/R

3. Creacin de la BD

4. Cdigo SQL

El cdigo SQL generado de las pantallas anteriores se muestra a continuacin:

Para crear las tablas:

USE banco_transaccion
GO
CREATE TABLE CLIENTE
(
IDcliente int not null, /*Llave Primaria la cual ser llave*/
Nombre nvarchar(50) not null,
Apellido1 nvarchar(50) not null,
Apellido2 nvarchar(50) not null,

Telefono varchar(16),
IFE nvarchar(30),
RFC nvarchar(14),
email varchar(35),
PRIMARY KEY(IDcliente)
)
CREATE TABLE CUENTA
(
IDcuenta int not null,
saldo Decimal(10,2) check (saldo >=2),
Tipocuenta nvarchar(50) check (Tipocuenta in ('Cuenta de Cheques','Ahorros','Nomina')),
fecha_apertura datetime,
IDcliente int not null, /* LLave foranea referenciada de la tabla cliente*/
PRIMARY KEY(IDcuenta),
FOREIGN KEY(IDcliente) References CLIENTE(IDcliente)
)

CREATE TABLE HISTORICO


(
IDhistorico int not null,
Tipotransaccion nvarchar(25) check (Tipotransaccion in ('Deposito','Retiro','Transferencia')),
saldo_inicial Decimal(10,2),
saldo_final Decimal(10,2),
fecha datetime,
IDcuenta int not null,
PRIMARY KEY(IDhistorico),
FOREIGN KEY(IDcuenta) References CUENTA(IDcuenta)
)
CREATE TABLE BITACORA
(
IDbitacora int not null,
Actividad nvarchar(50) check (Actividad in ('Deposito','Retiro','Transferencia')),
IDcuenta int not null,
PRIMARY KEY(IDbitacora),
FOREIGN KEY(IDcuenta) References CUENTA(IDcuenta)
)

Para insertar los registros:


USE banco_transaccion
GO
INSERT INTO CLIENTE (IDcliente,Nombre,Apellido1,Apellido2,Telefono,IFE,RFC,email)
VALUES(1,'Marco','Miranda','Hernandez',57381446,302607400,'MIHM881125AI1','miranda@exam
ple.com');
INSERT INTO CUENTA(IDcliente,IDcuenta,Saldo,Tipocuenta,fecha_apertura)
VALUES(1,410091852,10500.00,'Nomina',getdate());
INSERT INTO CLIENTE(IDcliente,Nombre,Apellido1,Apellido2,Telefono,IFE,RFC,email)
VALUES(2,'Elihu','Henandez','Hernandez',53233842,406307500,'EHH891014HDF','hernandez@exam
ple.com');
INSERT INTO CUENTA(IDcliente,IDcuenta,Saldo,Tipocuenta,fecha_apertura)
VALUES(2,306270040,20500.00,'Nomina',getdate());

Se muestra a continuacin los registros creados:

Finalmente para realizar la TRANSACCION ejecutamos el siguiente cdigo SQL:


USE [banco_transaccion]
GO
DECLARE
@importe DECIMAL(10,2),
@CuentaOrigen int,
@CuentaDestino int

SET @importe = 500


SET @CuentaOrigen = '410091852'
SET @CuentaDestino = '306270040'

BEGIN TRANSACTION
BEGIN TRY
/* Para descontar el importe de la cuenta origen */
UPDATE CUENTA
SET saldo = saldo - @importe
WHERE IDcuenta = @CuentaOrigen
INSERT INTO HISTORICO

(saldo_inicial, saldo_final,fecha)
SELECT
saldo + @importe, saldo, getdate()
FROM CUENTA
WHERE IDcuenta = @CuentaOrigen

/* Para incrementar el importe a la cuenta destino */


UPDATE CUENTA
SET saldo = saldo + @importe
WHERE IDcuenta = @CuentaDestino

INSERT INTO HISTORICO


(saldo_inicial, saldo_final,fecha)
SELECT
saldo - @importe, saldo, getdate()
FROM CUENTA
WHERE IDcuenta = @CuentaDestino

COMMIT TRANSACTION

END TRY
BEGIN CATCH
/* En caso de error*/
ROLLBACK TRANSACTION
PRINT 'Se ha producido un error'
END CATCH

Вам также может понравиться