Está en la página 1de 9

Una solución posible

Prueba 1. Bases de Datos

1.
2.
3.

Nombre de la tabla Dueño


Descripción Esta table almacena a las personas que son dueñ@s de mascotas
Columna Tipo PK / FK NN Unique
Rut Text PK
Nombre Text NN
Celular Text NN
En caso de
emergencias, se
require que cada
dueño tenga celular

Nombre de la tabla Raza


Descripción Acá se almacenan todas las razas de mascotas del Sistema. Sirve para ser referenciada por la
table mascota
Columna Tipo PK / FK NN Unique
Codigo TEXT PK
Nombre TEXT NN Debería ser unique,
para evitar errores

Nombre de la tabla Tipo_actividad


Descripción Acá se almacenan los tipos de actividades que las mascotas realizan en el hotel. Actualmente
sirve para poder referenciar el requerimiento de espacio para (dormir, jugar)
Columna Tipo PK / FK NN Unique
Actividad TEXT PK

Nombre de la tabla Requerimiento_espacio


Descripción Esta tabla almacena el requerimiento en metros2 para cada raza, en cada etapa de su vida y
para todo tipo de actividad
Columna Tipo PK / FK NN Unique
Código_raza TEXT PK FK (raza)
Etapa TEXT PK FK (etapa_vida)
Tipo_actividad TEXT PK FK (tipo_actividad)
Metros2 Float NN

Nombre de la tabla Etapa_vida


Descripción Acá se almacenan las diferentes etapas de la vida de las mascotas. Actualmente (cachorro,
adulto, mayor). Sirve para ser referenciado desde el requerimiento de espacio y la mascota.
Columna Tipo PK / FK NN Unique
Etapa TEXT PK
Nombre de la tabla Mascota
Descripción Acá se almacenan las mascotas que se quedan en el hotel. De acuerdo al diseño actual, cada
mascota se registra indicando la etapa de la vida en que se encuentra. Si esto cambia, es
necesario actualizar el registro acá.
Columna Tipo PK / FK NN Unique
Código_Chip TEXT PK
Nombre TEXT NN
Etapa_vida TEXT FK (etapa_vida) NN
Rut_dueño TEXT FK (dueño) NN
Código_raza TEXT FK (raza) NN

Nombre de la tabla Reserva


Descripción Acá se almacenan las reservas que los dueños reservan para sus mascotas.
Columna Tipo PK / FK NN Unique
Código_chip TEXT PK FK (mascota)
Fecha_inicio DATE PK
Fecha_fin DATE NN
Ingreso_registrado BOOLEAN NN

Nombre de la tabla Tipo_servicio


Descripción Acá se almacenan los diferentes tipos de servicios ofrecidos por el hotel, indicando el precio
de cada uno
Columna Tipo PK / FK NN Unique
Nombre TEXT PK
Valor Integer NN

Nombre de la tabla Servicio


Descripción Acá se almacenan todos los servicios aplicados a una mascota. OJO que como se relaciona con
la reserva, es necesario traer la llave de dicha tabla.
Columna Tipo PK / FK NN Unique
Código_chip TEXT FK (reserva)
Fecha_inicio DATE FK (reserva)
Tipo_servicio Text FK (tipo_servicio)
Fecha DATE NN
4.
create table dueno ( rut text primary key, nombre text not null, celular text not null );

create table raza ( codigo text primary key, nombre text not null );

create table etapa_vida ( etapa text primary key );

create table mascota ( codigo_chip text primary key, nombre text not null,
etapa_vida text not null references etapa_vida(etapa),
rut_dueno text not null references dueno(rut),
codigo_raza text not null references raza(codigo) );

create table tipo_actividad ( actividad text primary key );

create table requerimiento_espacio ( codigo_raza text not null references raza(codigo),


etapa text not null references etapa_vida(etapa),
tipo_actividad text not null references tipo_actividad(actividad),
metros2 float not null, primary key(codigo_raza, etapa, tipo_actividad) );

create table reserva ( codigo_chip text not null references mascota(codigo_chip),


fecha_inicio date not null, fecha_fin date not null,
ingreso_registrado bool not null, primary key (codigo_chip, fecha_inicio) );

create table tipo_servicio ( nombre text primary key, valor integer not null );

create table servicio ( codigo_chip text not null, fecha_inicio date not null,
tipo_servicio text not null references tipo_servicio(nombre),
fecha date not null,
constraint fk_reserva foreign key (codigo_chip, fecha_inicio)
references reserva (codigo_chip, fecha_inicio) );
5.

insert
into
dueno (rut, nombre, celular)
values
('r1', 'n1', 'c1'),
('r2', 'n2', 'c2'),
('r3', 'n3', 'c3'),
('r4', 'n4', 'c4'),
('r5', 'n5', 'c5');

insert
into
raza(codigo, nombre)
values
('B1', 'Basset hound'),
('B2', 'Beagle'),
('P1', 'Pastor alemán'),
('SS', 'San bernardo');

insert
into
etapa_vida
values
('cachorro'),
('adulto'),
('mayor');

insert
into
mascota(codigo_chip, nombre, etapa_vida, rut_dueno, codigo_raza)
values
('123', 'Lucas', 'cachorro', 'r1', 'B2'),
('456', 'Carlota', 'cachorro', 'r1', 'B1'),
('789', 'Kaiser', 'adulto', 'r2', 'P1'),
('abc', 'Cachupín', 'mayor', 'r3', 'B2'),
('def', 'Titán', 'adulto', 'r5', 'SS');

insert
into
tipo_actividad
values
('dormir'),
('jugar');
insert
into
requerimiento_espacio (codigo_raza, etapa, tipo_actividad, metros2)
values
('B1', 'cachorro', 'dormir', .5),
('B1', 'adulto', 'dormir', 1),
('B1', 'mayor', 'dormir', 1),
('B1', 'cachorro', 'jugar', 4),
('B1', 'adulto', 'jugar', 8),
('B1', 'mayor', 'jugar', 11),
('B2', 'cachorro', 'dormir', .5),
('B2', 'adulto', 'dormir', 1),
('B2', 'mayor', 'dormir', 1),
('B2', 'cachorro', 'jugar', 3),
('B2', 'adulto', 'jugar', 7),
('B2', 'mayor', 'jugar', 10),
('P1', 'cachorro', 'dormir', .65),
('P1', 'adulto', 'dormir', 1.3),
('P1', 'mayor', 'dormir', 1.3),
('P1', 'cachorro', 'jugar', 6),
('P1', 'adulto', 'jugar', 13),
('P1', 'mayor', 'jugar', 17),
('SS', 'cachorro', 'dormir', 1),
('SS', 'adulto', 'dormir', 2),
('SS', 'mayor', 'dormir', 2),
('SS', 'cachorro', 'jugar', 10),
('SS', 'adulto', 'jugar', 21),
('SS', 'mayor', 'jugar', 26) ;

insert
into
reserva (codigo_chip, fecha_inicio, fecha_fin, ingreso_registrado)
values
('123', '2020-01-01', '2020-01-20', false),
('123', '2020-02-14', '2020-02-20', false),
('123', '2020-05-05', '2020-06-01', false),
('abc', '2020-03-05', '2020-04-01', false),
('def', '2020-06-01', '2020-07-10', false);

insert
into
tipo_servicio (nombre, valor)
values
('corte', 7500),
('uñas', 4500),
('baño', 9500);

insert
into
servicio (codigo_chip, fecha_inicio, tipo_servicio, fecha)
values
('123', '2020-01-01', 'corte', '2020-01-02'),
('123', '2020-01-01', 'uñas', '2020-01-03'),
('def', '2020-06-01', 'uñas', '2020-06-02'),
('def', '2020-06-01', 'corte', '2020-06-02'),
('def', '2020-06-01', 'baño', '2020-06-02'),
('123', '2020-05-05', 'uñas', '2020-06-01');
6.
-- a: está más arriba!

-- b:
insert into dueno (rut, nombre, celular) values ('111111111', 'Felipe', '+56998765432');

insert into mascota(codigo_chip, nombre, etapa_vida, rut_dueno, codigo_raza) values


('85729', 'Chucho', 'adulto', '111111111', 'B2');

insert into reserva (codigo_chip, fecha_inicio, fecha_fin, ingreso_registrado) values


('85729', '2020-08-01', '2020-08-20', false);

-- c:
update reserva set ingreso_registrado = true
where codigo_chip = '85729' and fecha_inicio = '2020-08-01'

-- d:
insert into servicio (codigo_chip, fecha_inicio, tipo_servicio, fecha) values
('85729', '2020-08-01', 'corte', '2020-08-02'),
('85729', '2020-08-01', 'uñas', '2020-08-17')

-- e:
select count(*) from reserva -- Si muestra un CERO es porque la mascota NO está
where '2020-07-01' between fecha_inicio and fecha_fin
and codigo_chip = '85729';

-- f:
-- 50 metros total, 35% dormir = 17.5m2 65% jugar = 32.5m2

select re.tipo_actividad, re.metros2 as espacio_ocupado, 17.5 - re.metros2 as espacio_disponible


from reserva r
inner join mascota m on m.codigo_chip = r.codigo_chip
inner join raza ra on ra.codigo = m.codigo_raza
inner join requerimiento_espacio re on re.codigo_raza = ra.codigo and re.etapa = m.etapa_vida
where '2020-07-02' between r.fecha_inicio and r.fecha_fin
and re.tipo_actividad = 'dormir'
union
select re.tipo_actividad, re.metros2, 32.5 - re.metros2
from reserva r
inner join mascota m on m.codigo_chip = r.codigo_chip
inner join raza ra on ra.codigo = m.codigo_raza
inner join requerimiento_espacio re on re.codigo_raza = ra.codigo and re.etapa = m.etapa_vida
where '2020-07-02' between r.fecha_inicio and r.fecha_fin
and re.tipo_actividad = 'jugar'
-- g:

select re.tipo_actividad, re.metros2 * 1000 * (r.fecha_fin - r.fecha_inicio) as total


from reserva r
inner join mascota m on m.codigo_chip = r.codigo_chip
inner join raza ra on ra.codigo = m.codigo_raza
inner join requerimiento_espacio re on re.codigo_raza = ra.codigo and re.etapa = m.etapa_vida
where r.codigo_chip = '85729' and r.fecha_inicio = '2020-08-01'
and re.tipo_actividad = 'dormir'
union
select re.tipo_actividad, re.metros2 * 750 * (r.fecha_fin - r.fecha_inicio)
from reserva r
inner join mascota m on m.codigo_chip = r.codigo_chip
inner join raza ra on ra.codigo = m.codigo_raza
inner join requerimiento_espacio re on re.codigo_raza = ra.codigo and re.etapa = m.etapa_vida
where r.codigo_chip = '85729' and r.fecha_inicio = '2020-08-01'
and re.tipo_actividad = 'jugar'
union
select 'servicios', sum(tipo.valor)
from servicio s
inner join tipo_servicio tipo on tipo.nombre = s.tipo_servicio
where codigo_chip = '85729' and fecha_inicio = '2020-08-01'

También podría gustarte