Sei sulla pagina 1di 11

create database ProyectoFinalBD

GO
use ProyectoFinalBD
GO

Create table Bus(

ID_Bus int not null primary key

Create table Provincia(

ID_Provincia int not null primary key, Nombre varchar


(50)

Create table TipoServicio(

ID_TipoServicio int not null primary key, Nombre varchar


(50)

Create table Servicios(

ID_Servicio int not null primary key,


ID_TipoServicio int not null,
ID_Bus int not null,
ID_Provincia int not null,
Fecha date,
Precio decimal (13,2)
constraint fk_TipoServicio_IDTipoServicio foreign key
(ID_TipoServicio) references TipoServicio (ID_TipoServicio),
constraint fk_Bus_IdBusTD foreign key (ID_Bus) references Bus
(ID_Bus), constraint fk_Provincia_IdProvinciaTD foreign key
(ID_Provincia) references Provincia (ID_Provincia)
) insert into Servicios values (1,1,1,1,'2016/10/27',500)

Create table Cliente(

ID_Cliente int not null primary key,


Nombre varchar (30),
Nacionalidad varchar (30)
) create table ClienteExtranjero(

ID_Cliente int not null primary key,


Nombre varchar (30),
Nacionalidad varchar (30)

) create table VentaServicios(

ID_Venta int not null primary key identity,


ID_Cliente int not null,
ID_Servicio int not null,
constraint fk_VentaServicios_IDCliente foreign key
(ID_Servicio) references Servicios (ID_Servicio),
constraint fk_Servicio_IDServicioExtranjero foreign key
(ID_Servicio) references Servicios (ID_Servicio) )

------INSERT DATOS------
insert into Bus values (1) insert into Bus values (2) insert into Bus values (3)
insert into Cliente values(1,'Sahira','Dominicano') insert into
Cliente values(2,'Marlon','Dominicano') insert into Cliente
values(3,'Anthony','Dominicano') insert into Cliente
values(4,'Andrews','Dominicano') insert into Cliente
values(5,'Eliezer','Dominicano') insert into Cliente
values(6,'Carlos','Puertorriqueño') insert into Cliente
values(7,'Bruno','Estadounidense') insert into Cliente
values(8,'Rafael','Dominicano') insert into Cliente
values(9,'Pedro','Venezolano')
insert into Provincia values (1, 'La Altagracia') insert
into Provincia values (2, 'Puerto Plata') insert into
Provincia values (3, 'Pedernales') insert into Provincia
values (4, 'La Vega') insert into Provincia values (5,
'Santo Domingo') insert into Servicios values
(1,1,1,1,'2016/10/27',500) insert into Servicios values
(2,1,2,2,'2018/08/23',700) insert into Servicios values
(3,2,2,1,'2015/03/27',900) insert into Servicios values
(4,2,2,3,'2015/03/27',900) insert into Servicios values
(5,3,2,4,'2014/12/27',900) insert into Servicios values
(6,3,3,4,'2015/01/27',900) insert into Servicios values
(7,4,3,5,'2019/11/27',900) insert into Servicios values
(8,4,3,5,'2019/11/27',900) insert into Servicios values
(9,3,2,5,'2018/04/27',900) insert into Servicios values
(10,3,3,3,'2021/08/27',900) insert into Servicios values
(11,4,3,4,'2021/04/27',900) insert into Servicios values
(12,4,1,5,'2020/10/27',500)

insert into TipoServicio values (1, 'Transporte Diario') insert


into TipoServicio values (2, 'Transporte Privado') insert into
TipoServicio values (3, 'Tour') insert into TipoServicio values
(4, 'Envio de Paquetes')

insert into VentaServicios values (1,1) insert into


VentaServicios values (2,2) insert into
VentaServicios values (2,1) insert into
VentaServicios values (3,8) insert into
VentaServicios values (2,7) insert into
VentaServicios values (3,8) insert into
VentaServicios values (1,7) insert into
VentaServicios values (2,8) insert into
VentaServicios values (3,7) insert into
VentaServicios values (4,8) insert into
VentaServicios values (5,7) insert into
VentaServicios values (3,2) insert into
VentaServicios values (4,5) insert into
VentaServicios values (4,3) insert into
VentaServicios values (5,6) insert into
VentaServicios values (6,1) insert into
VentaServicios values (4,7) insert into
VentaServicios values (3,8) insert into
VentaServicios values (3,11) insert into
VentaServicios values (2,7)

-----------------------------------TRIGGER OFERTAS--------------------------
create trigger Ofertas on Servicios after insert as begin
Declare @Mes int
Declare @ID int
select @ID = ID_Servicio from inserted select
@Mes = FORMAT(Fecha,'MM') From inserted; if
(@Mes >= 1 and @Mes <= 3)
begin
Update Servicios set Precio = (Precio - (Precio*0.10)) where
FORMAT(Fecha,'MM') = @Mes and @ID = ID_Servicio end
if (@Mes >= 4 and @Mes <= 6)
begin
Update Servicios set Precio = (Precio - (Precio*0.20)) where
FORMAT(Fecha,'MM') = @Mes and @ID = ID_Servicio end
if (@Mes >= 7 and @Mes <= 9)
begin
Update Servicios set Precio = (Precio - (Precio*0.30)) where
FORMAT(Fecha,'MM') = @Mes and @ID = ID_Servicio end
if (@Mes >= 10 and @Mes <= 12)
begin
Update Servicios set Precio = (Precio - (Precio*0.15)) where
FORMAT(Fecha,'MM') = @Mes and @ID = ID_Servicio
end
end
/*

1. Crea un proceso que permita registrar una tabla un reporte de la


cantidad de envíos, por cliente, por año. El procedimiento debe incluir
gestión transaccional y control de errores
*/

create procedure EnviosPorAño


as begin begin try begin
transaction
select count(VentaServicios.ID_Servicio) as Envios, Cliente.Nombre,
format(Servicios.Fecha,'yyyy') as Año into #EnviosXaño from VentaServicios
inner join Cliente on Cliente.Id_Cliente = VentaServicios.ID_Cliente inner join
Servicios on Servicios.Id_Servicio = VentaServicios.ID_Servicio where
Servicios.ID_TipoServicio = 4 group by Cliente.Nombre, Servicios.Fecha select *
from #EnviosXaño commit end try begin catch rollback
print ' Ha ocurrido un error' + error_message()
end catch end exec
EnviosPorAño

/*
2. Un proceso programado que permita extraer los clientes con el
promedio de envíos por mes (Utilizar procedimientos almacenados).

*/

create procedure EnviosPorMes


as begin
select Nombre, convert(decimal, count (Cliente.ID_Cliente))/12 as 'Paquetes
enviados por mes' from Cliente inner join VentaServicios on
VentaServicios.ID_Cliente = Cliente.ID_Cliente inner join Servicios on
Servicios.ID_Servicio = VentaServicios.ID_Servicio where
Servicios.ID_TipoServicio=4 group by Cliente.Nombre end exec EnviosPorMes
/*
3. Reporte de pasajeros por provincias, por tipo de servicios. */

select Provincia.Nombre as 'Provincia', count(Diario.Diario) as 'Transporte


Diario',count(Privado.Privado) as 'Transporte Privado',count(Tour.Tour) as
'Tour',count(Paquetes.Paquetes) as 'Envios de Paquetes' from
VentaServicios

full join (select VentaServicios.ID_Servicio as


'IdTipoServicio',count(Servicios.ID_TipoServicio) as
'Diario' from Servicios inner join VentaServicios on VentaServicios.ID_Servicio =
Servicios.ID_Servicio where ID_TipoServicio = 1 group by
VentaServicios.ID_Servicio) as
Diario on Diario.IdTipoServicio = VentaServicios.ID_Servicio

full join (select VentaServicios.ID_Servicio


'IdTipoServicio',count(Servicios.ID_TipoServicio) as
'Privado' from Servicios inner join VentaServicios on VentaServicios.ID_Servicio =
Servicios.ID_Servicio where ID_TipoServicio = 2 group by
VentaServicios.ID_Servicio) as
Privado on Privado.IdTipoServicio = VentaServicios.ID_Servicio

full join (select VentaServicios.ID_Servicio as


'IdTipoServicio',count(Servicios.ID_TipoServicio) as
'Tour' from Servicios inner join VentaServicios on VentaServicios.ID_Servicio =
Servicios.ID_Servicio where ID_TipoServicio = 3 group by
VentaServicios.ID_Servicio) as Tour on
Tour.IdTipoServicio = VentaServicios.ID_Servicio

full join (select VentaServicios.ID_Servicio as


'IdTipoServicio',count(Servicios.ID_TipoServicio) as
'Paquetes' from Servicios inner join VentaServicios on VentaServicios.ID_Servicio =
Servicios.ID_Servicio where ID_TipoServicio = 4 group by
VentaServicios.ID_Servicio) as
Paquetes on Paquetes.IdTipoServicio = VentaServicios.ID_Servicio

full join Servicios on Servicios.ID_Servicio = VentaServicios.ID_Servicio full join


Provincia on Provincia.ID_Provincia = Servicios.Id_Provincia group by
Provincia.Nombre
/*
4. Llevar un histórico de los clientes que se registran y son extranjeros. Utiliza
Triggers.
*/

create trigger Extranjeros on Cliente after insert as begin declare @ID int
declare @nombre varchar(30) declare @nacionalidad varchar(30) select
@ID = ID_Cliente from inserted select @nombre = Nombre from inserted
select @nacionalidad = Nacionalidad from inserted if (@nacionalidad !=
'Dominicano' and @nacionalidad != 'Dominicana') begin
insert into ClienteExtranjero values (@ID, @nombre, @nacionalidad)
end end
5. Crea una vista para la consulta del punto 3. Debes crearla en álgebra
relacional.

π Nombre ← 'Provincia'(Provincia), G count (Diario)(Diario) ←'Diario',


Gcount (Privado)(Privado) ←'Privado', Gcount (Tour)(Tour) ←'Tour',
G count (Paquetes)(Paquetes) ←'Paquetes'(VentaServicios)

(σ ID_Servicio(VentaServicios) ←'IdTipoServicio',G count (ID_TipoServicio)


(Servicios) ←'Diario' (Servicios) ⨝ ID_Servicio(VentaServicios) :=
ID_Servicio (Servicios) ID_TipoServicio = 1 ∪ ID_Servicio (VentaServicios))
σIdTipoServicio = ID_Servicio(Diario × VentaServicios) :=Diario
⟗IdTipoServicio= ID_Servicio VentaServicios

(σ ID_Servicio (VentaServicios) ← 'Id_TipoServicio', G count


(ID_TipoServicio)(Servicios) ← 'Diario' (Servicios) ⨝
ID_Servicio(VentaServicios) = ID_Servicio(Servicios) ID_TipoServicio = 1 ∪
ID_Servicio(VentaServicios)) σIdTipoServicio = ID_Servicio(Diario ×
VentaServicio) := Diario ⟗ IdTipoServicio = ID_Servicio VentaServicios

(σ ID_Servicio(VentaServicios)← 'IdTipoServicio',Gcount
(ID_TipoServicio)(Servicios) ←
'Privado' (Servicios) ⨝ ID_Servicio(VentaServicios) = ID_Servicio(Servicios)
ID_TipoServicio = 2 ∪ ID_Servicio(VentaServicios)) σIdTipoServicio
=ID_Servicio(Privado ×
VentaServicios):=Privado⟗IdTipoServicio=ID_Servicio VentaServicios
(σ ID_Servicio(VentaServicios)
←'IdTipoServicio',Gcount(Servicios)(ID_TipoServicio) ←
'Tour' (Servicios) ⨝ ID_Servicio(VentaServicios) = ID_Servicio(Servicios)
ID_TipoServicio = 3 ∪ ID_Servicio(VentaServicios)) σIdTipoServicio=ID_Servicio (Tour ×
VentaServicios) := Tour⟗
IdTipoServicio = ID_Servicio VentaServicios

(σ ID_Servicio(VentaServicios)
←'IdTipoServicio',Gcount(ID_TipoServicio)(Servicios) ←
'Paquetes' (Servicios)⨝ ID_Servicio(VentaServicios) = ID_Servicio(Servicios)
ID_TipoServicio = 4 ∪ ID_Servicio(VentaServicios)) σIdTipoServicio =
ID_Servicio (Paquetes × VentaServicios) :=Paquetes⟗ IdTipoServicio
=ID_Servicio VentaServicios

σID_Servicio = ID_Servicio(Servicio × VentaServicios)


:=Servicio⟗IDServicio = ID_Servicio VentaServicios σID_Provincia

= ID_Provincia(Provincia × Servicios)
: =Provincia⟗ID_Provincia = ID_Provincia Servicios ∪ Nombre(Provincia)

Potrebbero piacerti anche