1
resposta

[RESPOSTA] [SOLICITAÇÃO DE ANÁLISE]

Com relação ao que foi pedido fiz as seguintes queries:

CREATE VIEW `vw_relatório_de_compras_qtd` AS
SELECT NF.CPF, TC.NOME, DATE_FORMAT(NF.DATA_VENDA, '%m/%Y') AS `mes/ano`,
SUM(INF.QUANTIDADE) AS QTD_COMPRADA, MAX(TC.VOLUME_DE_COMPRA) AS QTD_LIMITE
FROM notas_fiscais AS NF
INNER JOIN itens_notas_fiscais AS INF ON NF.NUMERO = INF.NUMERO
INNER JOIN tabela_de_clientes AS TC ON NF.CPF = TC.CPF
GROUP BY NF.CPF, `mes/ano`
ORDER BY `mes/ano`, TC.NOME;

SELECT VW.CPF, VW.NOME, VW.`mes/ano`, VW.QTD_COMPRADA, VW.QTD_LIMITE,
ROUND((1 - (VW.QTD_LIMITE/VW.QTD_COMPRADA)) * 100, 2) AS PERCENTUAL
FROM (
SELECT * FROM `vw_relatório_de_compras_qtd`) AS VW
WHERE (VW.QTD_LIMITE - VW.QTD_COMPRADA) < 0;

Gostaria de saber o seguinte: O fato de criar uma view prejudica o cost da query? Seria a execução desta query com esse formato? Ressalto que não incluí o campo compra válida/inválida tendo em vista que não há necessidade neste relatória, uma vez que todas as compras seriam "inválidas".

1 resposta

Oi Bruno, tudo bem?

Desculpa pela demora em retornar com sua resposta.

Isso depende muito, uma view tem suas vantagens e desvantagens. Entre as vantagens estão:

  • Essas consultas pré-definidas ficam armazenadas e você não precisa lembrar de como criar.
  • Você pode usar este resultado em outras consultas diminuindo a complexidade, pois você fará referência a uma tabela virtual montada fora desta consulta.
  • Elas permitem criar uma visão mais lógica para entender melhor a modelagem.

E nas desvantagens:

  • Esconde uma complexidade da query, pode enganar quanto a performance necessária para acessar determinada informação. E pode ser pior quando views usam outras views. Têm casos você pode estar fazendo consultas desnecessárias sem saber.
  • Cria uma camada extra. Mais objetos para administrar. Isso pode ser considerado um aumento de complexidade. Uma outra forma de ver isto é que uma view pode ser mal usada.

Bom, você ter criado uma view facilitou no desenvolvimento do código e se formos comparar com o código de exemplo do exercício, o tempo de execução foi melhor em alguns milissegundos. É bom tomar cuidado ao criar uma view, pois pode mais atrapalhar do que ajudar.

Espero ter ajudado de alguma forma. Qualquer coisa é só falar :)