Pular para o conteúdo principal

Questão de Banco de Dados — Visão (View) — Quadrix 2025

Banco de DadosVisão (View)
Código
qa698954
Banca
Quadrix
Órgão
CRM MS
Ano
2025
Cargo
Ana ( )
O Hospital Campo Grande do Norte deseja gerenciar a participação de seus médicos em congressos médicos. Para isso, um banco de dados relacional foi projetado com as tabelas seguir.   CREATE TABLE Medicos (        id_medico INT PRIMARY KEY,        nome VARCHAR(100) NOT NULL,        especialidade VARCHAR(50) NOT NULL ); CREATE TABLE Congressos (        id_congresso INT PRIMARY KEY,        nome VARCHAR(100) NOT NULL,        local VARCHAR(100) NOT NULL,        data_inicio DATE NOT NULL,        data_fim DATE NOT NULL CHECK (data_fim > = data_inicio) ); CREATE TABLE Participacoes (         id_medico INT,         id_congresso INT,         papel VARCHAR(50) CHECK (papel IN (‘Palestrante’, ‘Ouvinte’, ‘Organizador)),         data_inscricao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,         PRIMARY KEY (id_medico, id_congresso),         FOREIGN KEY (id_medico) REFERENCES Medicos(id_medico) ON DELETE CASCADE,        FOREIGN KEY (id_congresso) REFERENCES Congressos(id_congresso) ON DELETE CASCADE         ); Além disso, para facilitar consultas, foi criada a seguinte view. CREATE VIEW V_Medicos_Congressos AS SELECT M.nome AS medico, C.nome AS congresso, C.local, P.papel FROM Medicos M JOIN Participacoes P ON M.id_medico = P.id_medico JOIN Congressos C ON P.id_congresso = C.id_congresso;   Com base nessa situação hipotética, julgue o item a seguir. A visão V_Medicos_Congressos permite que sejam inseridos diretamente novos registros na tabela Participacoes, desde que a inserção não viole as restrições de integridade, como CHECK e FOREIGN KEY.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Visões (views) e atualização de dados no SQL

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).

NÃO CAIA NESSA!

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.: id_medico, id_congresso)

Visão atualizável
  • 1Requisitos
    • Única tabela de base
    • Sem JOIN
    • Sem GROUP BY/agregação
    • Sem DISTINCT
  • 2Visão de junção (V_Medicos_Congressos)
    • JOIN entre 3 tabelas
    • Não expõe chaves primárias
    • Inserção direta inviável
LEVEL · soulevel.com.br

Item — ❌ ERRADO

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