Está en la página 1de 13

Universidad Privada Domingo Savio Ing.

De Sistemas

Examen Final

Adm. De Base de Datos

En base a la bd empresa y a estas tablas generar las soluciones siguientes:

Realizar un script para mostrar un kardex de producto por el idfab,idproducto,fechainicio y


fechafinal:

1.- Mostrar el kardex de un producto cualquiera (45%)

Codi idfab idproducto Fecha NombreProducto Entrada Saldo SaldoIni

1 ACI 4100z 02/01/97 Mont 100 100 0

2 ACI 4100z 03/01/97 Mont 10 110 0

2.- En base a la Tabla Usuario(Id int primary key,nombre varchar(100),User


varchar(30),Password varbinary(Max)) Crear la columna encriptada Password usando una llave
asimétrica y un trigger para la inserción automática (30%)

3.- Crear un Monitoreo con el monitor de actividades cada vez que se ejecute el script de la
pregunta 1. (25%)

Tabla empleados con los siguientes campos:

numemp: número del empleado


nombre : nombre y apellidos del empleado
edad : edad del empleado
oficina : número de la oficina donde trabaja el empleado, p.ej. Antonio Viguer trabaja
en la oficina 12 de Alicante
Universidad Privada Domingo Savio Ing. De Sistemas

titulo : el cargo que desempeña el empleado


contrato : fecha en que se contrató al empleado
jefe : número de su jefe inmediato, p.ej. El jefe de Antonio Viguer es José González.
Observar que Luis Antonio no tiene jefe, es el director general.
cuota : cuota del empleado, sería el importe mínimo de ventas que debe alcanzar el
empleado en el año
ventas : importe de ventas realizadas durante este año

abla oficinas con los siguientes campos:

oficina: código de la oficina


ciudad: ciudad donde está ubicada
region : región a la que pertenece
dir : director de la oficina (su número de empledo) por ejemplo la oficina 12 tiene
como director el empleado104 José González.
objetivo : objetivo de ventas que debe alcanzar la oficina
ventas: ventas de la oficina
Universidad Privada Domingo Savio Ing. De Sistemas

Tabla clientes con los siguientes campos:

numclie: número de cliente


nombre : nombre y apellidos del cliente
repclie : nº del representante asignado al cliente.
Cada cliente tiene un representante asignado (el que figura en repclie) que será el que
generalmente le atienda.
limitecredito : límite de crédito del cliente
Universidad Privada Domingo Savio Ing. De Sistemas

abla productos con los siguientes campos:

idfab: identificativo del fabricante del producto


idproducto : código que utiliza el fabricante para codificar el producto. Observar que
aparecen varias líneas con el mismo idproducto (41003), por lo que la clave principal
de la tabla deberá ser idfab+idproducto
descripcion: nombre del producto
precio: precio del producto
existencias: nº de unidades del producto que tenemos en almacén.
Universidad Privada Domingo Savio Ing. De Sistemas

Tabla pedidos:

codigo : nº secuencial que sirve de clave principal


numpedido: nº de pedido. Observar que un pedido puede tener varias líneas.
fechapedido : fecha del pedido
clie : cliente que efectua el pedido
rep : representante que tramita el pedido
fab: fabricante del producto que se pide
producto : idproducto del producto que se pide.
Universidad Privada Domingo Savio Ing. De Sistemas

cant : cantidad que se pide del producto


importe : importe de la línea de pedido

create database empresa

CREATE TABLE EMPLEADO(NUMEMP INT PRIMARY KEY NONCLUSTERED, NOMBRE VARCHAR(30), EDAD
INT, TITULO VARCHAR(30), CONTRATO DATE, CUOTA VARCHAR(30), VENTASEMP VARCHAR(30)) ON
empresa1;

ALTER TABLE EMPLEADO ADD JEFE INT REFERENCES EMPLEADO

CREATE TABLE OFICINA (IDOFICINA INT PRIMARY KEY NONCLUSTERED, CUIDAD VARCHAR(30),
REGION VARCHAR(20), DIR INT, OBJETIVO FLOAT, VENTAS FLOAT) ON empresa1;

ALTER TABLE EMPLEADO ADD IDOFICINA INT REFERENCES OFICINA

CREATE TABLE CLIENTE (NUMCLI INT PRIMARY KEY NONCLUSTERED, NOMBRECLI


VARCHAR(30),LIMITECREDITO FLOAT,NUMEMP INT REFERENCES EMPLEADO) ON empresa2;

CREATE TABLE FABRICA (IDFAB INT PRIMARY KEY NONCLUSTERED, NOMBREFAB VARCHAR(30)) ON
empresa3;
CREATE TABLE PRODUCTO (IDPRODUCTO INT PRIMARY KEY NONCLUSTERED, DESCRIPCION
VARCHAR(30), PRECIO FLOAT, EXISTENCIAS INT, IDFAB INT REFERENCES FABRICA) ON
empresa2;

CREATE TABLE PEDIDO (CODIGO INT PRIMARY KEY NONCLUSTERED, NUMPEDIDO INT, FECHAPEDIDO
DATE, CANT INT, IMPORTE FLOAT, NUMCLI INT REFERENCES CLIENTE, NUMEMP INT REFERENCES
EMPLEADO, IDFAB INT REFERENCES FABRICA, IDPRODUCTO INT REFERENCES PRODUCTO) ON
empresa3;

INSERT INTO OFICINA(IDOFICINA,CUIDAD,REGION,DIR,OBJETIVO,VENTAS) VALUES (2001,'SANTA


CRUZ','CENTRO',1234,800000,850000)
INSERT INTO OFICINA(IDOFICINA,CUIDAD,REGION,DIR,OBJETIVO,VENTAS) VALUES (2002,'SANTA
CRUZ','NORTE',1234,800000,850000)
INSERT INTO OFICINA(IDOFICINA,CUIDAD,REGION,DIR,OBJETIVO,VENTAS) VALUES (2003,'SANTA
CRUZ','SUR',1234,800000,850000)

INSERT INTO EMPLEADO


(NUMEMP,NOMBRE,EDAD,TITULO,CONTRATO,CUOTA,VENTASEMP,JEFE,IDOFICINA) values
(101,'EDSON REYES',30,'DIR. GENERAL','2021/08/12',300000,305000,101,2001)
INSERT INTO EMPLEADO
(NUMEMP,NOMBRE,EDAD,TITULO,CONTRATO,CUOTA,VENTASEMP,JEFE,IDOFICINA) values
(103,'FERNANDO GUTIERREZ',50,'REPRESENTANTE','2019/04/12',200000,250000,101,2001)
INSERT INTO EMPLEADO
(NUMEMP,NOMBRE,EDAD,TITULO,CONTRATO,CUOTA,VENTASEMP,JEFE,IDOFICINA) values
(102,'DAVID SORIA',43,'DIR. VENTAS','2021/08/12',100000,3120000,103,2002)

INSERT INTO CLIENTE(NUMCLI,NOMBRECLI,LIMITECREDITO,NUMEMP) VALUES (2001,'PEPITO


GONZALES',65000,102)
Universidad Privada Domingo Savio Ing. De Sistemas

INSERT INTO CLIENTE(NUMCLI,NOMBRECLI,LIMITECREDITO,NUMEMP) VALUES (2002,'MARIO


GUTIERREZ',63000,102)
INSERT INTO CLIENTE(NUMCLI,NOMBRECLI,LIMITECREDITO,NUMEMP) VALUES (2003,'CARLOS
JUSTINIANO',66000,102)

INSERT INTO FABRICA(IDFAB,NOMBREFAB) VALUES (2001567,'BOLIVIA')

INSERT INTO PRODUCTO(IDPRODUCTO,DESCRIPCION,PRECIO,EXISTENCIAS,IDFAB) VALUES


(6775,'CLAVOS',58,277,2001567)
INSERT INTO PRODUCTO(IDPRODUCTO,DESCRIPCION,PRECIO,EXISTENCIAS,IDFAB) VALUES
(9665,'ARANDELAS',34,375,2001567)
INSERT INTO PRODUCTO(IDPRODUCTO,DESCRIPCION,PRECIO,EXISTENCIAS,IDFAB) VALUES
(5430,'PERNOS',77,96,2001567)

INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(1,11036,'1990/05/19',436,25288,2001,102,2001567,6775)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(2,25378,'1990/07/16',234,7956,2002,102,2001567,9665)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(3,27890,'1990/08/03',743,57211,2003,102,2001567,5430)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(4,35609,'1991/08/03',96,247,2002,102,2001567,5430)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(5,11036,'1997/05/19',436,25288,2001,102,2001567,6775)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(6,25378,'1997/07/16',234,7956,2002,102,2001567,9665)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(7,27890,'1997/08/03',743,57211,2003,102,2001567,5430)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(8,35609,'1998/08/03',96,247,2002,102,2001567,5430)

INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(9,11036,'1990/05/19',436,25288,2001,101,2001567,6775)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(10,25378,'1990/07/16',234,7956,2002,103,2001567,9665)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(11,27890,'1990/08/03',743,57211,2003,103,2001567,5430)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(12,35609,'1991/08/03',96,247,2002,101,2001567,5430)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(13,11036,'1997/05/19',436,25288,2001,101,2001567,6775)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(14,25378,'1997/07/16',234,7956,2002,103,2001567,9665)
Universidad Privada Domingo Savio Ing. De Sistemas

INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(15,27890,'1997/08/03',743,57211,2003,101,2001567,5430)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(16,35609,'1998/08/03',96,247,2002,103,2001567,5430)
INSERT INTO
PEDIDO(CODIGO,NUMPEDIDO,FECHAPEDIDO,CANT,IMPORTE,NUMCLI,NUMEMP,IDFAB,IDPRODUCTO)VALU
ES(17,27890,'1996/08/03',743,57211,2003,101,2001567,5430)

//** pregunta 1 PIVOT**//

select * from( select CUIDAD,REGION ,year(FECHAPEDIDO) as año,sum(importe) as total


from OFICINA, empleado inner join PEDIDO on (Empleado.numemp=PEDIDO.NUMEMP)
where year(FECHAPEDIDO) between '1990' and '1992' and
EMPLEADO.IDOFICINA=OFICINA.IDOFICINA
group by CUIDAD,Region,year(FECHAPEDIDO)) as consulta PIVOT( SUM(total) FOR año IN
([1990],[1991],[1992] )) AS pvt

//**pregunta 2 incisos a,b,c**//


create login empleado1 with password ='5336143'
create login empleado2 with password='5336143'
create login gerente1 with password='5336143'
create login gerente2 with password='5336143'

create user empleado1 for login empleado1


create user empleado2 for login empleado2
create user gerente1 for login gerente1
create user gerente2 for login gerente2

create role empleados


create role gerentes

grant select,insert,update, delete on database::empresa to gerentes


grant select,insert on database::empresa to empleados
ALTER ROLE EMPLEADOS ADD MEMBER EMPLEADO1
ALTER ROLE EMPLEADOS ADD MEMBER EMPLEADO2
ALTER ROLE GERENTES ADD MEMBER GERENTE1
ALTER ROLE GERENTES ADD MEMBER GERENTE2

deny update on pedido to empleado1

//** pregunta 3**//

backup database[empresa]

to disk = N'C:\BD\completa\completa.bak'

with checksum;

backup database[empresa]
Universidad Privada Domingo Savio Ing. De Sistemas

to disk = N'C:\BD\diferencial\29082021.bak'

with differential;

backup database[empresa]

to disk = N'C:\BD\diferencial\30082021.bak'

with differential;

//**RESTAURACION DATABASE**/////////////
drop database empresa

restore database[empresa]

from disk=N'C:\BD\completa\completa.bak'
with norecovery;

go

restore database[empresa]

from disk=N'C:\DB\diferencial\29082021.bak'
with norecovery;

go

restore database[empresa]

from disk=N'C:\DB\diferencial\30082021.bak'
with recovery;

go

DROP PROC kardex

//**PREGUNTA 1**//

create proc kardex

@name varchar(50)

as begin

select
PEDIDO.IDFAB,PRODUCTO.IDPRODUCTO,PEDIDO.FECHAPEDIDO,PEDIDO.CODIGO,PRODUCTO.DESCRIPCI
ON,producto.EXISTENCIAS as entrada,(PRODUCTO.EXISTENCIAS+pedido.CANT) as saldo,
((PRODUCTO.EXISTENCIAS+pedido.CANT)-(PRODUCTO.EXISTENCIAS+pedido.CANT)) as saldoIni
from PRODUCTO,PEDIDO,CLIENTE

where rtrim(ltrim(@name))=PRODUCTO.DESCRIPCION and


PRODUCTO.IDPRODUCTO=PEDIDO.IDPRODUCTO and PEDIDO.NUMCLI=CLIENTE.NUMCLI
Universidad Privada Domingo Savio Ing. De Sistemas

end
select * from PRODUCTO

exec kardex ARANDELAS

//** pregunta numero 2**//

create table usuario(id int primary key, Nombre Varchar(100), user1 varchar(30),
CLAVE VARCHAR(30))

use master

go

select *

from sys.symmetric_keys

where name ='##MS_ServiceMasterKey##'

go
//////////////////////////////*********PASO 6*************************//
use empresa

go

create master key encryption by password='majadito2021'

/////************************PASO 7************************//
go

use empresa

go

create certificate DB1234


with subject ='PROTECT DATA';

//*******************PASO 8********************//

use empresa

go

create symmetric key DB1234


with algorithm = AES_128

Encryption by certificate DB1234

go
Universidad Privada Domingo Savio Ing. De Sistemas

INSERT INTO USUARIO(id,Nombre,user1,CLAVE)VALUES(1000,'Edson Reyes


Lopez','loco undercover','estimados todos')

INSERT INTO USUARIO(id,Nombre,user1,CLAVE)VALUES(1001,'Frenando


Gutierrez','loco yae','5433eds')

INSERT INTO USUARIO(id,Nombre,user1,CLAVE)VALUES(1002,'Daniel


Osinaga','aqui es','5336143')

alter table usuario add CIFRADO_TARJETA VARBINARY(MAX)


alter table usuario add CIFRADO_CLAVE VARBINARY(MAX)

select * from usuario

use empresa

OPEN SYMMETRIC KEY DB1234


DECRYPTION BY CERTIFICATE DB1234

GO

UPDATE [dbo].[usuario]

SET CIFRADO_CLAVE = ENCRYPTBYKEY(KEY_GUID('DB1234'),CLAVE)

FROM [dbo].[usuario];

close symmetric key DB1234;

select * from usuario

CREATE TRIGGER INSERTARDATOS ON USUARIO FOR INSERT AS


INSERT INTO USUARIO( id, Nombre,user1,CLAVE,CIFRADO_CLAVE) SELECT
id,Nombre,User1,CLAVE,ENCRYPTBYKEY(key_guid('DB1234'),clave) as CIFRADO_CLAVE from
inserted

insert into dbo.usuario values(1003,'caliente Osinaga','aqui es','5336143')


insert into dbo.usuario values(1004,'Hugo Oaga','aqui es','edson143')
insert into dbo.usuario values(1005,'Daniel Clarito','aqui es','fer336143')

exec kardex ARANDELAS


exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
Universidad Privada Domingo Savio Ing. De Sistemas

exec kardex ARANDELAS


exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS
exec kardex ARANDELAS

select *from PEDIDO

drop proc rre

create proc rre


as begin

declare @c int
set @c = 1
declare @npedi int
set @npedi = 3000
declare @aux int
set @aux = 18

while @c<=100
begin

INSERT INTO PEDIDO VALUES (@aux,@npedi,'1996/08/03',100,2000,2002,102,2001567,9665)


exec kardex ARANDELAS

set @c= @c+1


set @aux=@aux+1
set @npedi=@npedi+1

end

end
go
exec rre
Universidad Privada Domingo Savio Ing. De Sistemas

También podría gustarte