Questão de Banco de Dados — Visão (View) — Quadrix 2025
- Código
- qa698954
- Banca
- Quadrix
- Órgão
- CRM MS
- Ano
- 2025
- Cargo
- Ana ( )
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO (letra E). A visão V_Medicos_Congressos é uma visão de junção (join) entre três tabelas, e, embora o SQL padrão permita inserções em visões simples, uma visão baseada em múltiplas tabelas com junção não é diretamente atualizável — a inserção de novos registros na tabela Participacoes através dessa visão não é permitida, pois o SGBD não consegue mapear de forma inequívoca os dados inseridos para as tabelas de base. A regra que decide a questão é o conceito de visão atualizável, que exige que a visão seja derivada de uma única tabela de base.
Uma visão (ou view) é uma tabela virtual derivada de outras tabelas, que podem ser tabelas de base ou mesmo outras visões previamente definidas. Tecnicamente, uma visão é uma consulta predefinida ou armazenada, que é executada sempre que referenciada. Ela é utilizada para que não seja necessário refazer a consulta sempre que for necessário utilizá-la. Uma visão não necessariamente existe em forma física; ela é considerada uma tabela virtual, ao contrário das tabelas da base, cujas tuplas sempre estão armazenadas fisicamente no banco de dados.
A questão central aqui é: quando uma visão é atualizável? No SQL padrão, uma visão é considerada atualizável se, entre outros requisitos, ela for definida sobre uma única tabela de base e não contiver junções (JOINs), agrupamentos (GROUP BY), funções de agregação, DISTINCT, ou outras construções que impeçam o mapeamento direto das linhas da visão para as linhas da tabela de base. A visão V_Medicos_Congressos é criada com um JOIN entre as tabelas Medicos, Participacoes e Congressos. Isso a torna uma visão de junção, que não é diretamente atualizável no padrão SQL.
Para entender por que a inserção não é permitida, imagine que você tente inserir uma linha na visão com os valores ('Dr. João', 'Congresso de Cardiologia', 'São Paulo', 'Palestrante'). O SGBD precisaria descobrir em qual tabela inserir cada valor: 'Dr. João' vai para Medicos.nome, 'Congresso de Cardiologia' vai para Congressos.nome, 'São Paulo' vai para Congressos.local, e 'Palestrante' vai para Participacoes.papel. Mas a visão não expõe as chaves primárias (id_medico, id_congresso), que são obrigatórias e necessárias para criar os registros nas tabelas de base. Sem essas chaves, o SGBD não consegue determinar como inserir os dados de forma consistente, respeitando as restrições de integridade referencial. Por isso, a inserção direta através dessa visão é inviável.
A pegadinha da banca está em sugerir que, como a visão é uma "tabela virtual", ela poderia ser usada para inserir dados nas tabelas de base, desde que as restrições de integridade fossem respeitadas. Isso é verdade apenas para visões simples e atualizáveis, não para visões de junção. A banca explora a confusão entre o conceito geral de visão (que é uma consulta armazenada) e o conceito específico de visão atualizável (que tem requisitos rígidos).
A banca tenta fazer você acreditar que qualquer visão pode ser usada para inserir dados, desde que as restrições de integridade sejam respeitadas. Mas a regra é mais restrita: apenas visões simples, baseadas em uma única tabela, sem junções, são diretamente atualizáveis. Uma visão com JOIN entre três tabelas não é atualizável, pois o SGBD não consegue mapear os dados inseridos para as tabelas de base de forma inequívoca. Fique atento: a presença de JOIN na definição da visão é o sinal de alerta.
Critério | Visão Atualizável (simples) | Visão de Junção (V_Medicos_Congressos) |
|---|---|---|
Definição | Baseada em uma única tabela de base | Baseada em múltiplas tabelas com JOIN |
Inserção direta | Permitida (se demais requisitos atendidos) | Não permitida (não é diretamente atualizável) |
Mapeamento de dados | Inequívoco (linha da visão ↔ linha da tabela) | Ambíguo (SGBD não sabe distribuir entre tabelas) |
Exposição de chaves primárias | Geralmente expõe as chaves | Não expõe (ex.: |
A afirmação de que a visão V_Medicos_Congressos permite inserções diretas na tabela Participacoes está errada. A visão é definida com um JOIN entre as tabelas Medicos, Participacoes e Congressos, o que a torna uma visão de junção. No SQL padrão, visões de junção não são diretamente atualizáveis, pois o SGBD não consegue determinar, de forma inequívoca, como os dados inseridos devem ser distribuídos entre as tabelas de base. Além disso, a visão não expõe as chaves primárias (id_medico, id_congresso), que são essenciais para a inserção na tabela Participacoes. Portanto, a inserção direta através dessa visão não é permitida, mesmo que as restrições de integridade (CHECK, FOREIGN KEY) fossem respeitadas.
Gabarito: ERRADO (letra E).
Link permanente: /questoes/qa698954