Anda di halaman 1dari 3

UNIVERSIDAD TCNICA DEL NORTE FICA EISIC CISIC Base de Datos III Integrantes: Andrs Simbaa. Jimmy A.

A. Ibarra B. Fabin Chiza. Nivel: 6 A

Crear una tabla espejo para la tabla Transaccin en otra particin, sincronizada con la tabla principal, de tal manera que si se ingresa, se modifica o se borra filas en la tabla principal, se reflejen esos cambios en forma automtica en la tabla imagen.
--creamos la particion create tablespace espejo location 'D/espejo:'; --creamos el la tabla create table transaccion_espejo( )inherits (transaccion) on espejo;

TRIGGER
CREATE OR REPLACE FUNCTION insert_tra() RETURNS TRIGGER AS $$ BEGIN INSERT INTO transaccion_espejo VALUES(NEW.*); RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER insert_tra BEFORE INSERT ON transaccion FOR EACH ROW EXECUTE PROCEDURE insert_tra(); create or replace function mirror() returns trigger as $mirror_table$ begin if (tg_op = 'update') then update transaccion_espejo set id_transaccion = new.id_transaccion, id_cuenta = new.id_cuenta, tipo = new.tipo, fecha = new.fecha, cantidad = new.cantidad where id_transaccion = old.id_transaccion; elsif (tg_op = 'delete') then delete from transaccion_espejo where id_transaccion = old.id_transaccion; if not found then return null;end if; end if;

return null; end; $mirror_table$ language plpgsql; create trigger mirror_table after update or delete on transaccion for each row execute procedure mirror();

Realizar una fragmentacin horizontal de la tabla TRANSACCIN, todas las transacciones que son "DEPSITOS" se ubican en una particin y en resto en otra. Las dos partes de la tabla se guardan en archivos diferentes.
--creamos la particion create tablespace deposito location 'D/deposito:'; --creamos las tablas de la fragmentacin vertical create table transaccion_deposito( check(tipo='D') )inherits (transaccion) on deposito; create table transaccion_retiro( check(tipo='R') )inherits (transaccion);

TRIGGER
CREATE OR REPLACE FUNCTION dividir_transaccion() RETURNS TRIGGER AS $$ BEGIN IF ( NEW.tipo = 'D' ) THEN INSERT INTO transaccion_deposito VALUES (NEW.*); ELSIF ( NEW.tipo = 'R' ) THEN INSERT INTO transaccion_retiro VALUES (NEW.*); ELSE RAISE EXCEPTION 'No es deposito ni retiro'; END IF; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER dividir_transaccion BEFORE INSERT ON transaccion FOR EACH ROW EXECUTE PROCEDURE dividir_transaccion()

Agregar el atributo Foto en la tabla Clientes, luego, realizar una fragmentacin vertical de dicha tabla, ubicando el cdigo del cliente y su foto en una particin, y el resto de datos de cliente en la otra particin. Cmo visualizar una foto de un cliente, que est almacenada en la base de datos?
--afregamos la foto a la tabla cliente alter table cliente add foto bytea; --freagmentacion vertical create table cliente_foto ( id int primary key, foto bytea ) create table cliente_datos ( id int primary key, ci char(10), nombre varchar(15), apellido varchar(15) )

Anda mungkin juga menyukai