Visões (views) em SQL
Gabarito: letra E. Visões materializadas armazenam fisicamente o resultado da consulta em uma tabela (física ou temporária) e podem utilizar técnicas de atualização incremental para mantê-la sincronizada com as tabelas base, sem recriar todo o conteúdo a cada alteração. Esse é o conceito central cobrado na alternativa correta.
As demais alternativas contêm erros conceituais: WITH CHECK OPTION não transforma uma view em asserção; a modificação de consultas não é eficaz para consultas complexas; visões comuns não exigem refresh do usuário; e view em linha é definida na cláusula FROM, não no HAVING.
Alternativa A — ❌ Incorreta
A cláusula WITH CHECK OPTION é utilizada no final da definição de uma view para garantir que toda inserção ou atualização realizada por meio dessa view respeite a condição da consulta que a define (a cláusula WHERE). Ela não torna a view uma asserção (assertion), que é uma constraint geral sobre o banco de dados, definida com CREATE ASSERTION. A alternativa confunde dois conceitos distintos.
Alternativa B — ❌ Incorreta
A modificação de consultas (query modification) é uma técnica de implementação de visões não materializadas: a cada consulta sobre a view, o SGBD substitui o nome da view pela consulta original, gerando uma nova consulta maior. Para consultas complexas, essa abordagem é ineficiente, pois repete o processamento a cada acesso. Técnicas como materialização (vistas materializadas) são mais indicadas para consultas complexas, pois armazenam o resultado pré-computado.
Alternativa C — ❌ Incorreta
Em visões comuns (não materializadas), o estado da view é sempre atualizado automaticamente: quando uma tabela base é modificada, as consultas subsequentes à view refletem essas alterações, sem necessidade de comando REFRESH. A necessidade de refresh manual existe apenas para visões materializadas, e mesmo assim não é necessário fazê-lo "a cada execução" — o SGBD pode usar refresh periódico ou incremental. A alternativa generaliza incorretamente.
Alternativa D — ❌ Incorreta
Uma view em linha (inline view) é uma subconsulta utilizada na cláusula FROM de uma consulta SQL, e não no HAVING. A sintaxe típica é:
SELECT ...
FROM (SELECT ...) AS subconsulta
WHERE ...
Já a cláusula HAVING é usada para filtrar grupos após a agregação (GROUP BY). A alternativa troca o local correto (FROM) pelo HAVING.
Alternativa E — ✅ Correta ⟵ GABARITO
Visões materializadas (materialized views) criam uma tabela física (ou até mesmo temporária, dependendo da implementação) que armazena o resultado da consulta da view. Para manter essa tabela atualizada, o SGBD pode empregar atualização incremental (incremental refresh), que calcula apenas as alterações ocorridas nas tabelas base, aplicando-as à view materializada. Isso evita a recriação completa da view e melhora o desempenho em consultas subsequentes. A descrição da alternativa está correta.
Gabarito: letra E.