Upload
mars
View
223
Download
1
Embed Size (px)
DESCRIPTION
Explicacomo conectar dos bases de datos en SQL Server
Citation preview
UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO
FACULTAD DE ESTUDIOS SUPERIORES
PLANTEL ACATLAN
TRABAJO PARCIAL
Alumnos:
Hernández Hernández Elihu
Miranda Hernández Marco Antonio
Materia: Base de datos distribuidas
Profesor: Javier Rosas Hernández
Marzo 2015
1. Introducción
El siguiente trabajo toma ejemplifica una transacción 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 número de operaciones. Además cada operación se guarda en un histórico y en una bitácora
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. Creación de la BD
4. Código SQL
El código SQL generado de las pantallas anteriores se muestra a continuación:
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 continuación los registros creados:
Finalmente para realizar la TRANSACCION ejecutamos el siguiente código 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