A InsigthPlaces decidiu avaliar quais plataformas deve continuar ativas. Aquelas com mais de 5 avaliacoes consideradas baixas (notas entre 1 a 3), devem ser desativadas, até comprovarem melhorias em questoes como atendimento, limpeza,e servico, por exemplo.
Trigger para desativar hospedagens ruins da plataforma para pedir melhorias.
1 - Criar tabela para colocar hospedagens que recebam mais de 5 avaliacoes baixas.
-- Cria tabela para armazenas hospedagens com avaliacoes baixas
CREATE TABLE HospedagensParaMelhorar (
hospedagem_id VARCHAR(255),
cliente_id VARCHAR(255),
nota_estadia INT CHECK (nota BETWEEN 1 AND 3),
FOREIGN KEY (hospedagem_id) REFERENCES hospedagens(hospedagem_id),
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
);
2 - Criar uma funcao para calcular o total de notas baixas que uma determinada hospedagem possui
-- Cria funcao para verificar a quantidade de notas baixas (entre 1 e 3)
DROP FUNCTION IF EXISTS Total_notas_baixas
DELIMITER $$
CREATE FUNCTION Total_notas_baixas(HospedagemID VARCHAR(255))
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE totalnotabaixa INT DEFAULT 0;
SELECT COUNT(nota) INTO totalnotabaixa
FROM avaliacoes
WHERE hospedagem_id = HospedagemID
AND nota BETWEEN 1 AND 3;
RETURN totalnotabaixa;
END$$
DELIMITER ;
Se a hospedagem tem mais de 5 notas considerados um padrao baixo para a plataforma. O status passa para INATIVO. Depois a hospedagem é inserida na tabela HospedagensParaMlehorar
-- trigger para adiconar hospedagens com notas baixas a tabela de hospedagens para melhorar
DELIMITER $$
CREATE TRIGGER hospedagens_notas_baixas
AFTER INSERT ON avaliacoes
FOR EACH ROW
BEGIN
DECLARE qtd_notasbaixas INT;
SET qtd_notasbaixas = Total_notas_baixas(NEW.hospedagem_id);
IF qtd_notas_baixas >= 5 THEN
UPDATE hospedagens
SET ativo = 0
WHERE hospedagem_id = NEW.hospedagem_id;
END IF;
-- Insere na tabela de hospedagens ruins
IF NEW.nota BETWEEN 1 AND 3 THEN
INSERT INTO HospedagensParaMelhorar(hospedagem_id, cliente_id, nota_estadia)
VALUES (NEW.hospedagem_id, NEW.cliente_id, NEW.nota);
END IF;
END$$
DELIMITER ;
Nao sei se na pratica funcionaria, mas acredito que faz sentido.