1
resposta

[Dúvida] Faça como eu fiz: trabalhando com funções e Trigger

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.

1 resposta

Oi, Amanda! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

A ideia de usar uma função para contar as avaliações e depois utilizá-la dentro da trigger mostra um bom entendimento de automatização de processos no MySQL. Continue assim!

Uma dica interessante para o futuro é utilizar tambem a funcao AVG() para acompanhar a media das notas de uma hospedagem. Isso pode ajudar a identificar rapidamente plataformas com avaliacao geral baixa. Veja este exemplo:


SELECT hospedagem_id, AVG(nota) AS media_notas
FROM avaliacoes
GROUP BY hospedagem_id;

Esse codigo calcula a media das notas de cada hospedagem usando AVG() e GROUP BY, permitindo analisar rapidamente quais hospedagens possuem avaliacao geral baixa.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Para saber mais:

Sugestão de conteúdo:

DOCUMENTAÇÃO
AVG
Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!