Está en la página 1de 28

INSTITUTO TECNOLÓGICO DEL

VALLE DE OAXACA

Taller de Base de datos

Actividad 4.3 Elaborar la bitácora de avance del


proyecto

Integrantes:
Calvo Cruz Axel Jesús
Orozco Vásquez Marco Antonio
Pérez Pacheco Francisco Usiel
Rodríguez Cortes Brenda Soledad.

6° A Ingeniería informática

Docente: Ángeles Pérez Romeo Alberto.

24 de junio de 2021 – Ex hacienda Nazareno Santa Cruz Xoxocotlán.


INTRODUCCIÓN

En la siguiente bitácora se describe la Definición y creación de procedimientos


almacenados y disparadores en nuestro proyecto “Facturación tecnológica”,
mencionando como dichos procedimientos nos proporcionan a nosotros los
usuarios un acceso fácil a la base de datos, se puede tener acceso a la base de
datos sin tener que conocer los detalles de la arquitectura de tablas simplemente
se ejecutan los procedimientos almacenados que llevan a cabo las tareas
solicitadas, también se hablaran sobre los disparadores SQL los cuales consisten en
una serie de reglas predefinidas que se asocian a una tabla.

Estas reglas se aplican a la base de datos cuando se realizan determinadas


operaciones en la tabla, por ejemplo, al añadir, actualizar o eliminar registros. La
principal función de los trigger es contribuir a mejorar la gestión de la base de datos.
Gracias a ellos muchas operaciones se pueden realizar de forma automática, sin
necesidad de intervención humana, lo que permite ahorrar mucho tiempo. Y en
esta bitácora se plasmarán las actividades que se implementaron para poder
ejecutar las funciones antes mencionadas por medio de imágenes con el código
SQL con una breve explicación del código para mejorar la comprensión de los
lectores, al igual relacionarlo si en dado caso se presenta un proyecto similar al
mencionado en este documento.
PROCEDIMIENTOS ALMACENADOS.
Los procedimientos almacenados son un conjunto de comandos que
pueden ser ejecutados directamente en el servidor, es decir, será ejecutado
por el servidor de Base de Datos y no por el programa cliente que lo accede,
permitiendo la ejecución de una acción o conjunto de acciones
específicas.

Proporcionan a los usuarios un acceso fácil a la base de datos, se


puede tener acceso a la base de datos sin tener que conocer los detalles
de la arquitectura de tablas -simplemente se ejecutan los procedimientos
almacenados que llevan a cabo las tareas solicitadas.

Se inicio creando el procedimiento con el nombre de “SP _ Sumar


Cantidad”, donde se definen las variables @IdDetalleTicket y @Cantidad, el
procedimiento se encarga de incrementar la columna de cantidad
dependiendo del id que se le ingrese, como se muestra la imagen.
En caso de que ya no sea necesaria la tabla esta se puede eliminar
ejecutando la instrucción DROP PROCEDURE “SP_SumarCantidad”, como se
observa en la siguiente imagen se eliminó correctamente la tabla.

Se continuo con la ejecución del procedimiento para sumarle 5 a la


cantidad de artículos Dt002, con la instrucción EXC SP_SumarCantidad
‘Dt002’, 5 indicando en la primera parte el Identificador del artículo, seguido
por la cantidad que se desea agregar.
En la imagen se observa la ejecución de la instrucción, obteniendo
resultados correctos.
Finalmente se efectuó una consulta a la tabla “Detalle ticket” y
efectivamente se realizaron los cambios correspondientes

Después realizamos un segundo procedimiento almacenado a la tabla


“Artículos”, donde se definen las variables @IdArticulo y @Precio, creando el
procedimiento con la instrucción que se muestra en la imagen.
Posteriormente se ejecutó el procedimiento para sumarle el precio a un
artículo, en este caso al artículo con id ‘Art002’, aumentándole 1500 a ese
artículo.

Finalmente se realizo una consulta a la tabla artículos con el comando


SELECT * FROM ARTICULOS; para verificar los cambios correspondientes.

ANTES de realizar el procedimiento el precio de la impresora era de 1800.

DESPUÉS de ejecutar el procedimiento almacenado el campo precio de la


impresora cambio a 3300, se observa que el procedimiento se realizó con
éxito, como se muestra en la siguiente imagen:
Como última actividad se realizó la agregación de una nueva venta, con la
siguiente secuencia de código que se muestra en la imagen se generó el
procedimiento.
En caso de querer eliminar el procedimiento se realiza con la instrucción
DROP PROCEDURE SP_AgregarVenta

Posteriormente se agrego un nuevo registro de venta con la instrucción


EXCE SP_AgregarVenta ‘Dt005’, ‘Ti002’, ‘12’, ‘Art002’; Como se muestra en la
siguiente imagen.

Por último verificamos que se haya agregado el nuevo ticket, para esto se
realizó una consulta y efectivamente se observan los cambios.
D I S P A R A D O R E S.
Un Trigger, también llamado Disparador, en una base de datos, es un
procedimiento que se ejecuta cuando se cumple una condición
establecida.
Depende de la base de datos, los Triggers pueden ser antes o después de
ejecutar un INSERT, UPDATE o DELETE.
Un Trigger funciona tanto al insertar, actualizar o borrar datos en una base
de datos o incluso al crear o editar usuarios. Son usados para mejorar la
administración de la Base de Datos, sin necesidad de que el usuario ejecute
esas sentencias SQL.

Se inicio creando una tabla llamada Historial_insert, definiendo las variables su


tipo y tamaño, donde se almacenarán los datos generados por una inserción
por cierto usuario, como se muestra en la siguiente imagen.

Posteriormente se creó nuestro disparador donde indicaremos que almacene


el id del artículo, también el nombre de la actividad que se realizó y que usuario
fue el que la realizo, como se observa en la imagen.
Se continúo insertando datos para el registro de un nuevo artículo, con la
instrucción que se observa en la imagen.

Después se verificó que se hayan agregado correctamente los datos del


registro en la tabla Historial_insert, y efectivamente se realizo de forma
correcta.

TRIGGER PARA GUARDAR LOS DATOS DE LAS VENTAS REALIZADAS


POR LOS SUPERVISORES

Primero se creó la tabla historial_Venta, definiendo las variables y sus


respectivos tipos y tamaños, para poder tener registradas las ventas echas
por los supervisores.

Posteriormente se creó nuestro disparador donde le asignamos que


almacene el id de la compra, también el nombre de la actividad que se
realizó y el usuario que lo realizo.
Después se realizó la prueba se insertando datos en una nueva compra,
con la instrucción que se muestra en la imagen.

Finalmente se verifico que se halla agregado correctamente el registro en la


tabla Historial_Venta

TRIGGER PARA GUARDAR LOS DATOS DE LOS REGISTROS DE NUEVAS


PERSONAS

Se inicio creando la tabla historial_Paises para poder tener registradas las


ventas echas por los supervisores.

Después se creó nuestro disparador donde se le asignó que almacene el id


del país, también el nombre de la actividad que se realizó y el tipo de usuario
que la realizo.
Posteriormente se realizó la prueba agregando un nuevo país, con la
instrucción que se muestra en la imagen.

Finalmente se verifico que se halla agregado correctamente el registro en


la tabla Historial_Paises, obteniendo el resultado esperado.

TRIGGER PARA ELIMINAR UN PAÍS

Creamos nuestro disparador para donde se asignó que almacene el id del


país, también el nombre de la actividad que se realizó y por qué usuario fue
realizada.
Después ejecutamos el comando DELETE FROM Pais, como se muestra en la
imagen.

Finalmente se realizó una consulta a la tabla de historial_paises, y


efectivamente en la imagen se muestra que se ejecutó con éxito.

TRIGGER PARA ELIMINAR UNA PERSONA

Iniciamos creando nuestro disparador donde se le asigno que almacene el


id de la persona, también el nombre de la actividad que se realizó y por qué
usuario fue realizada.

Posteriormente se ejecutó el comando DELETE FROM Persona, para eliminar


el nombre Juan de la tabla persona, como se muestra en la imagen.
Finalmente realizamos una consulta a la tabla de historial_Personas,
obteniendo resultados satisfactorios como se muestra en la imagen.

TRIGGER PARA ELIMINAR UN SUPERVISOR

Creamos nuestro disparador donde le diremos que almacene el id del


supervisor, también el nombre de la actividad que se realizó y por qué
usuario fue realizada.

Después ejecutamos el comando DELETE FROM Supervisor que se muestra


en la imagen.

Finalmente consultamos la tabla de historial_Supervisor, obteniendo


excelentes resultados.
CODIGO DEL PROYECTO EN SQL SERVER.
/* Creación de la base de datos */
Create database Facturacion_tecnologica;
Go
Use Facturacion_tecnologica;
Go
/* Creación de las tablas */
DROP TABLE Persona;

CREATE TABLE Persona (


IdPersona VARCHAR(6) PRIMARY KEY NOT NULL,
Nombre VARCHAR(15) NOT NULL,
ApellidoP VARCHAR(15),
ApellidoM VARCHAR(15),
Genero CHAR(1) CHECK(Genero='H' or Genero='M'),
Correo VARCHAR(30),
IdDireccion VARCHAR(5) REFERENCES Direccion NOT NULL
);
CREATE TABLE Supervisor (
IdSupervisor VARCHAR(2) NOT NULL PRIMARY KEY,
IdPersona VARCHAR(6) REFERENCES Persona NOT NULL
);

DROP TABLE Cliente;

Create table Cliente (


IdCliente VARCHAR(5) NOT NULL PRIMARY KEY,
IdPersona VARCHAR(6) REFERENCES Persona NOT NULL
);

DROP TABLE Direccion;

Create table Direccion (


IdDireccion VarChar(5) not null Primary key,
IdCalle VarChar(5) references Calle not null
);

DROP TABLE Calle;

Create table Calle (


IdCalle VarChar(5) not null Primary key,
NoCalle int not null,
Calle VarChar(50) not null,
IdAsentamiento VarChar(5) references Asentamiento not null
);

DROP TABLE Asentamiento;

Create table Asentamiento (


IdAsentamiento VarChar(5) not null Primary key,
IdCodigoP VarChar(7) references CodigoPostal not null,
IdTipoA VarChar(3) references TipoAsentamiento not null
);

DROP TABLE TipoAsentamiento;

Create table TipoAsentamiento (


IdTipoA VarChar(3) not null Primary key,
Tipo VarChar(20) not null
);

DROP TABLE CodigoPostal;

Create table CodigoPostal (


IdCodigoP VarChar(7) not null Primary Key,
CodigoP int unique not null,
IdMunicipio VarChar(5) references Municipio not null
);

DROP TABLE Municipio;

Create table Municipio (


IdMunicipio VarChar(5) not null Primary key,
Municipio VarChar(50) unique not null,
IdCiudad VarChar(5) references Ciudad not null
);

DROP TABLE Ciudad;

Create table Ciudad (


IdCiudad VarChar(5) not null Primary key,
Ciudad VarChar(50) unique not null,
IdEstado VarChar(5) references Estado not null
);

DROP TABLE Estado;

Create table Estado (


IdEstado VarChar(5) not null Primary key,
Estado VarChar(30) unique not null,
IdPais VarChar(5) references Pais not null
);
DROP TABLE Pais;

Create table Pais (


IdPais VarChar(5) not null Primary key,
Pais VarChar(60) unique not null
);

DROP TABLE Modelo;

Create table Modelo (


IdModelo VarChar(5) not null Primary key,
Modelo VarChar(20) unique not null
);
DROP TABLE Marca;

Create table Marca (


IdMarca VarChar(5) not null Primary key,
Marca VarChar(20) unique not null
);

DROP TABLE DetalleTicket;

Create table DetalleTicket (


IdDetalleTicket VarChar(5) not null Primary key,
IdTicket VarChar(5) references Ticket not null,
IdArticulo VarChar(6) references Articulos not null,
Cantidad int check (Cantidad > 0) not null,
PrecioVenta Float(6) check (PrecioVenta > 0) not null
);
DROP TABLE Ticket;

Create table Ticket (


IdTicket VarChar(5) not null Primary key,
FechaVenta Datetime default(getdate()) not null,
Iva Float(3) not null,
IdCliente VarChar(5) references Cliente not null,
IdSupervisor VarChar(2) references Supervisor not null
);

DROP TABLE DetalleCompra;

Create table DetalleCompra (


IdDetalleC VarChar(5) not null Primary key,
IdCompra VarChar(5) references Compra not null,
IdArticulo VarChar(6) references Articulos not null,
Cantidad int check (Cantidad > 0) not null,
PrecioCompra float(5) check (PrecioCompra > 0) not null
);

DROP TABLE Compra;

Create table Compra (


IdCompra VarChar(5) not null Primary key,
FechaCompra date not null,
IdProveedor VarChar(5) references Proveedor not null,
IdSupervisor VarChar(2) references Supervisor not null
);

DROP TABLE Proveedor;

Create table Proveedor (


IdProveedor VarChar(5) not null primary key,
Nombre Varchar(20) not null,
TelefonoProv Varchar(15) not null,
IdArticulo VarChar(6) references Articulos not null,
CorreoElectronicoP VarChar(40) not null,
IdDireccion VarChar(5) references Direccion not null
);

DROP TABLE Articulos;

Create table Articulos (


IdArticulo VarChar(6) not null Primary key,
NombreArt VarChar(60) not null,
Precio int check (Precio > 0) not null,
Descripcion VarChar(200) not null,
Cantidad int CHECK (Cantidad > 0) not null,
IdMarca VarChar(5) references Marca not null,
IdModelo VarChar(5) references Modelo not null
);

DROP TABLE Factura;

Create table Factura (


IdFactura Varchar(8) not null Primary key,
FechaFactura Datetime not null,
IdCliente Varchar(5) references Cliente not null,
IdTicket Varchar(5) references Ticket not null
);
/* I n s e r t */

INSERT INTO Marca VALUES('Ma001','Vorago');

INSERT INTO Marca VALUES('Ma002','Canon');


INSERT INTO Marca VALUES ('Ma003', 'HP');

INSERT INTO Marca VALUES ('Ma004', 'Acer');

INSERT INTO Marca VALUES ( 'Ma005','Eagle Warrior');

INSERT INTO Modelo VALUES('Mo001','Mm303');

INSERT INTO Modelo VALUES('Mo002','MG102');

INSERT INTO Articulos VALUES('Art001','Mouse',250,'Inalámbrico con


leds',10,'Ma001','Mo001');

INSERT INTO Articulos VALUES('Art002','Impresora MG102',1800,'Impresiones de


calidad Blanco,Negro y Color',5,'Ma002','Mo002');

INSERT INTO Pais VALUES('Pa001','México');

INSERT INTO Pais VALUES('Pa002','EUA');

INSERT INTO Pais VALUES('Pa003','Argentina');

INSERT INTO Estado VALUES('Es001','Oaxaca','Pa001');

INSERT INTO Estado VALUES('Es002','San Luis Potosi','Pa001');

INSERT INTO Estado VALUES('Es003','Sonora','Pa001');

INSERT INTO Ciudad VALUES('Ci001','Oaxaca de Juarez','Es001');

INSERT INTO Ciudad VALUES('Ci002','San Luis Potosi','Es002');

INSERT INTO Ciudad VALUES('Ci003','Hermosillo','Es003');

INSERT INTO Municipio VALUES('Mu001','Zogoocho','Ci001');

INSERT INTO Municipio VALUES('Mu002','San Francisco Javier Xoxocotlán','Ci001');

INSERT INTO Municipio VALUES('Mu003','San Jose Hidalgo Atzompa','Ci001');

INSERT INTO TipoAsentamiento VALUES('TA1','Colonia');

INSERT INTO TipoAsentamiento VALUES('TA2','Fraccionamiento');

INSERT INTO CodigoPostal VALUES('CP00001',71234,'Mu001');

INSERT INTO CodigoPostal VALUES('CP00002',71246,'Mu002');


INSERT INTO CodigoPostal VALUES('CP00003',71238,'Mu003');

INSERT INTO Asentamiento VALUES('As001','CP00001','TA1');

INSERT INTO Asentamiento VALUES('As002','CP00002','TA2');

INSERT INTO Asentamiento VALUES('As003','CP00003','TA1');

INSERT INTO Calle VALUES('Ca001',1,'Bugambilias','As001');

INSERT INTO Calle VALUES('Ca002',12,'Insurgentes','As002');

INSERT INTO Calle VALUES('Ca003',136,'Independencia','As003');

INSERT INTO Direccion VALUES('Di001','Ca001');

INSERT INTO Direccion VALUES('Di002','Ca002');

INSERT INTO Direccion VALUES('Di003','Ca003');

INSERT INTO Proveedor


VALUES('Pr001','Jorge','9515923048','Art001','jorgeprov@gmail.com','Di003');

INSERT INTO Proveedor


VALUES('Pr002','Reynaldo','9513339090','Art002','reyekectronics@gmail.com','Di003');

INSERT INTO Persona


VALUES('P00001','Juan','Perez','Perez','H','juanperez2021@gmail.com','Di002');

INSERT INTO Persona


VALUES('P00002','Uriel','Martinez','Lopez','H','urielopez@gmail.com','Di003');

INSERT INTO Persona


VALUES('P00003','Mateo','Juarez','Juarez','H','mateojuarez@gmail.com','Di001');

INSERT INTO Persona


VALUES('P00004','Maria','Sirvana','Jimenez','M','SirvaMa@gmail.com','Di002');

INSERT INTO Cliente VALUES('Cl001','P00004');

INSERT INTO Cliente VALUES('Cl002','P00001');

INSERT INTO Cliente VALUES('Cl003','P00003');

INSERT INTO Supervisor VALUES('S1','P00002');

INSERT INTO Ticket VALUES('Ti001','2021-02-18',0.16,'Cl001','S1');


INSERT INTO Ticket VALUES('Ti002','2021-02-19',0.16,'Cl002','S1');

INSERT INTO Ticket VALUES('Ti003','2021-02-19',0.16,'Cl003','S1');

INSERT INTO Compra VALUES('Co001','2021-01-10','Pr001','S1');

INSERT INTO Compra VALUES('Co002','2021-01-10','Pr002','S1');

INSERT INTO DetalleCompra VALUES('Dc001','Co001','Art001',10,2500);

INSERT INTO DetalleCompra VALUES('Dc002','Co001','Art002',5,9000);

INSERT INTO DetalleTicket VALUES('Dt001','Ti001','Art001',3,750);

INSERT INTO DetalleTicket VALUES('Dt002','Ti002','Art002',1,1800);

INSERT INTO DetalleTicket VALUES('Dt003','Ti003','Art001',1,250);

INSERT INTO Factura VALUES('FA000001','2021-06-09','Cl001','Ti001');

INSERT INTO Factura VALUES('FA000002','2021-06-10 12:56:35.675','Cl002','Ti002');

/*U p d a t e*/

Update Marca
set Marca ='Eagle Warrior'
where Marca = 'Eagle'

Update Articulos
set Cantidad = 15
where Cantidad = 10

Update Persona
set Nombre = 'Axel',correo= 'axelperezp21@gmail.com'
where Nombre = 'Juan'

/* D e l e t e*/

Delete from Marca


where Marca ='Eagle Warrior’'

Delete from Pais


where Pais ='Argentina'
/* Consultas a las tablas de la base de datos */

SELECT * FROM Articulos;


SELECT * FROM Ticket;

SELECT * FROM DetalleTicket;

SELECT * FROM Pais;

SELECT * FROM Estado;

SELECT * FROM Ciudad;

SELECT * FROM Municipio;

SELECT * FROM TipoAsentamiento;

SELECT * FROM Direccion;

SELECT * FROM CodigoPostal;

SELECT * FROM Calle;

SELECT * FROM Proveedor;

SELECT * FROM Cliente;

SELECT * FROM Persona;

SELECT * FROM Supervisor;

SELECT * FROM Compra;

SELECT * FROM Factura;

SELECT * FROM Asentamiento;

SELECT * FROM Marca;

SELECT * FROM Modelo;

SELECT Nombre, apellidoP, apellidoM from Persona;

SELECT NombreArt, Cantidad from Articulos;

/* Consulta con JOIN SIMPLE */

SELECT art.IdArticulo, art.NombreArt, dt.Cantidad, dt.PrecioVenta


FROM Articulos art
INNER JOIN DetalleTicket dt ON dt.IdArticulo=art.IdArticulo
/* Consulta con IN */

SELECT Nombre, TelefonoProv, CorreoElectronicoP


FROM Proveedor
WHERE Nombre IN ('Jorge','Reynaldo');

/* Consulta con UNION */


/* Primera union */
SELECT IdMarca, Marca FROM Marca
UNION
SELECT IdModelo, Modelo FROM Modelo;
MARCO ANTONIO OROZCO VASQUEZ07:38
/* Segunda union */
SELECT Nombre, TelefonoProv, CorreoElectronicoP FROM Proveedor
UNION
SELECT Nombre, ApellidoP, ApellidoM FROM Persona
/* Consulta con INTERSECT */

SELECT IdMarca, Marca [Modelo]


FROM Marca [Modelo]
INTERSECT
SELECT IdMarca, Marca [Modelo]
FROM Marca [Modelo]
/* Consulta con DIFFERENCE */

SELECT DIFFERENCE('Acer','Jorge');

SELECT DIFFERENCE('Teclado','Mouse');

SELECT DIFFERENCE('Jorge','Juan');

SELECT DIFFERENCE('Bugambilias','Insurgentes');

SELECT DIFFERENCE('Dt002','Dt003');
/* Consulta con Minus */

SELECT FechaCompra FROM Compra


MINUS
SELECT FechaVenta FROM Ticket

/*t r a n s a c c i o n e s*/

/*Iniciar y deshacer transacciones*/

BEGIN transaction
DELETE FROM Articulos
where IdArticulo = 1
ROLLBACK

/*Iniciar y confirmar transacciones*/

BEGIN transaction
DELETE FROM Marca, Articulos, Modelo
Where IdMarca= 'Ma001'
COMMIT

BEGIN TRY
BEGIN TRANSACTION
UPDATE DetalleTicket SET Cantidad = Cantidad + 3 WHERE IdDetalleTicket=
'Dt001'
UPDATE DetalleTicket SET Cantidad = Cantidad -2 WHERE IdDetalleTicket=
'Dt002'
COMMIT TRANSACTION
PRINT 'Transaccion completa'
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'Transaccion cancelada'
END CATCH

/*Segunda transacción*/
BEGIN TRY
BEGIN TRANSACTION
UPDATE Articulos SET Precio = Precio + 50 WHERE IdArticulo= 'Art001'
UPDATE Articulos SET Cantidad = Cantidad +10 WHERE IdArticulo= 'Art002'
COMMIT TRANSACTION
PRINT 'Transaccion completa'
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'Transaccion cancelada'
END CATCH

/*Transaccion cancelada*/
BEGIN TRY
BEGIN TRANSACTION
UPDATE DetalleTicket SET PrecioVenta = PrecioVenta + 30 WHERE
IdDetalleTicket= 'Dt001'
UPDATE DetalleTicket SET PrecioVenta = PrecioVenta -300 WHERE
IdDetalleTicket= 'Dt003'
COMMIT TRANSACTION
PRINT 'Transaccion completa'
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'Transaccion cancelada'
END CATCH

/* P R O C E D I M I E N T O S*/
CREATE PROCEDURE SP_SumarCantidad

@IdDetalleTicket as Varchar(5),
@Cantidad as int
AS
UPDATE DetalleTicket
SET Cantidad=Cantidad+@Cantidad
WHERE IdDetalleTicket=@IdDetalleTicket

EXEC SP_SumarCantidad 'Dt002', 5

DROP PROCEDURE SP_SumarCantidad

/*Segundo procedimiento*/
CREATE PROCEDURE SP_SumarPrecio

@IdArticulo as Varchar(6),
@Precio as int
AS
UPDATE Articulos
SET Precio=Precio+@Precio
WHERE IdArticulo=@IdArticulo

EXEC SP_SumarPrecio'Art002', 1500

DROP PROCEDURE SP_SumarCantidad

SELECT * FROM Articulos;

/* D I S PA R A D O R E S*/
CREATE TRIGGER Tr_pais
on Pais for insert
AS
set nocount on--muestra los mensejes en una fila afectada
declare @IdPais varchar(5)
select @IdPais = IdPais from inserted
insert into Historial_Paises values(GETDATE(),@IdPais,'Pais agregado',SYSTEM_USER)
go
CREATE TRIGGER TR_EliminarPais
on Pais instead of delete
as
begin
set nocount on;
insert into Historial_Paises(Fecha,IdPais,Accion,Usuario)
Select GETDATE(),IdPais,'Elimino un pais',SYSTEM_USER
from deleted
end
DELETE FROM Persona
CREATE TRIGGER TR_EliminarPersonas
on Persona instead of delete
as
begin
set nocount on;
insert into Historial_Personas(Fecha,IdPersona,Accion,Usuario)
Select GETDATE(),IdPersona,'Persona eliminada',SYSTEM_USER
from deleted
end
select * from Historial_Personas
select * from Persona
select * from Historial_Paises
select * from Pais
CREATE TRIGGER TR_EliminarSupervisores
on Supervisor instead of delete
as
begin
set nocount on;
insert into Historial_Supervisor(Fecha,IdSupervisor,Accion,Usuario)
Select GETDATE(),IdSupervisor,'Supervisor eliminado',SYSTEM_USER
from deleted
end
CREATE TABLE Historial_Paises
(Fecha datetime,
IdPais Varchar(6),
Accion varchar(80),
Usuario varchar(80));

/* Creación de los indices */


CREATE NONCLUSTERED INDEX IDX_Pais
ON Pais(Pais);

CREATE NONCLUSTERED INDEX IDX_Estado


ON Estado(Estado);

CREATE NONCLUSTERED INDEX IDX_Ciudad


ON Ciudad(Ciudad);
CREATE NONCLUSTERED INDEX IDX_Municipio
ON Municipio(Municipio);

CREATE NONCLUSTERED INDEX IDX_CP


ON CodigoPostal(CodigoP);

CREATE NONCLUSTERED INDEX IDX_Calle


ON Calle(Calle);

CREATE NONCLUSTERED INDEX IDX_Persona


ON Persona(Nombre,ApellidoP,ApellidoM);

CREATE NONCLUSTERED INDEX IDX_Marca


ON Marca(Marca);

CREATE NONCLUSTERED INDEX IDX_Modelo


ON Modelo(Modelo);

CREATE NONCLUSTERED INDEX IDX_Compra


ON Compra(FechaCompra);

CREATE NONCLUSTERED INDEX IDX_DetalleCompra


ON DetalleCompra(Cantidad,PrecioCompra);

/* Consulta elaborada */

SELECT Nombre, ApellidoP, ApellidoM,Marca, Modelo, DetalleTicket.Cantidad,


PrecioVenta, Nombre, ApellidoP, ApellidoM
FROM Articulos, DetalleTicket, Ticket, Marca, Modelo, Cliente , Persona,
Supervisor,Factura
WHERE Articulos.IdMarca=Marca.IdMarca
AND Articulos.IdModelo=Modelo.IdModelo
AND Articulos.IdArticulo=DetalleTicket.IdArticulo
AND Ticket.IdCliente=Cliente.IdCliente
AND Ticket.IdTicket=Factura.IdTicket
AND DetalleTicket.IdTicket=Ticket.IdTicket
AND Factura.IdCliente=Cliente.IdCliente
AND Persona.IdPersona=Supervisor.IdPersona
AND Persona.IdPersona=Cliente.IdPersona
CONCLUSIÓN

Podemos concluir, en base a lo realizado con cada ejercicio anterior, al juntarlo y


comprobar de qué manera puede aportar conocimientos y la manera de aplicarlo
tanto en la institución como en el ambiente laborar más adelante mencionando,
los disparadores o triggers, ya que se comprendió la función que cada uno de estos
es poder aumentar la seguridad e integridad de la información, debido a que se
establecen ciertas restricciones, además con la ayuda de la creación de usuarios
se puede tener un mejor control del tipo de usuario que accede a la base de datos
y de los roles que posee, junto a esto también que se puede registrar la actividad
del mismo, siendo posible saber si se realizó un cambio no autorizado. Esto lo
consiguen gracias a la programación de restricciones o requerimientos de
verificación que permiten minimizar los errores y sincronizar la información. También
así agilizar los procesos al momento de desarrollar una base de datos.

También podría gustarte