Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2024

Banco de DadosSQL
Código
qg351064
Banca
Quadrix
Órgão
CRN - 8ª Região (PR)
Ano
2024
Nível
Médio
Cargo
Assistente de Tecnologia da Informação Júnior
No SGBD Oracle, o comando alter table nutricionista add constraint nutricionista_fk foreign key (area_id) references area (area_id); tem como objetivo
  1. Ainserir um novo campo na tabela nutricionista, o campo area_id.
  2. Badicionar uma chave primária na tabela area.
  3. Cadicionar uma chave estrangeira na tabela area.
  4. Dadicionar uma chave estrangeira na tabela nutricionista.
  5. Eadicionar uma chave primária na tabela nutricionista.
Revelar gabarito e comentário

GabaritoD — adicionar uma chave estrangeira na tabela nutricionista.

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

Comando ALTER TABLE com FOREIGN KEY no Oracle

Gabarito: letra D. O comando ALTER TABLE nutricionista ADD CONSTRAINT nutricionista_fk FOREIGN KEY (area_id) REFERENCES area (area_id) adiciona uma chave estrangeira na tabela nutricionista, referenciando a chave primária da tabela area. A sintaxe ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY ... REFERENCES ... é o padrão SQL para criar uma restrição de integridade referencial, e o alvo da alteração é sempre a tabela nomeada logo após ALTER TABLE.

O comando ALTER TABLE é uma instrução da linguagem de definição de dados (DDL) usada para modificar a estrutura de uma tabela existente. Ele pode adicionar, deletar ou modificar colunas, bem como adicionar ou remover restrições (constraints). No caso apresentado, a restrição adicionada é uma chave estrangeira (foreign key), que estabelece um vínculo entre a tabela nutricionista e a tabela area. A chave estrangeira garante a integridade referencial: o valor da coluna area_id na tabela nutricionista deve existir na coluna area_id da tabela area (que é a chave primária desta). Isso impede, por exemplo, que um nutricionista seja cadastrado com uma área inexistente.

A sintaxe completa para adicionar uma chave estrangeira via ALTER TABLE é:

ALTER TABLE nome_da_tabela
ADD CONSTRAINT nome_da_restricao FOREIGN KEY (coluna1, coluna2)
REFERENCES tabela_referenciada (chave1, chave2);

No comando da questão, nome_da_tabela é nutricionista, nome_da_restricao é nutricionista_fk, a coluna local é area_id e a tabela referenciada é area com a coluna area_id. Portanto, a chave estrangeira é adicionada na tabela nutricionista, não na tabela area. A tabela area é apenas a tabela referenciada (o lado "pai" do relacionamento), que deve ter uma chave primária ou única na coluna referenciada.

É importante distinguir os conceitos envolvidos: a chave primária identifica unicamente cada registro de uma tabela, enquanto a chave estrangeira estabelece um relacionamento entre duas tabelas, referenciando a chave primária de outra tabela. O comando ADD CONSTRAINT ... FOREIGN KEY cria uma chave estrangeira; para criar uma chave primária, usaríamos ADD CONSTRAINT ... PRIMARY KEY. Além disso, o comando não insere um novo campo — ele apenas adiciona uma restrição sobre uma coluna que já deve existir na tabela. Se a coluna area_id não existisse, seria necessário primeiro usar ADD COLUMN.

A pegadinha desta questão está em identificar corretamente em qual tabela a chave estrangeira está sendo adicionada. O comando ALTER TABLE nutricionista indica claramente que a alteração é feita na tabela nutricionista. A tabela area aparece apenas na cláusula REFERENCES, que indica a tabela referenciada (o destino da referência), não a tabela que recebe a restrição. O candidato que confunde esses papéis pode marcar a alternativa C, que inverte os papéis das tabelas.

Guarde a estrutura do comando: ALTER TABLE [tabela que recebe a FK] ADD CONSTRAINT [nome] FOREIGN KEY (coluna local) REFERENCES [tabela referenciada] (coluna referenciada). É exatamente nessa distinção que as alternativas se dividem.

Critério

ALTER TABLE nutricionista ADD CONSTRAINT ... FOREIGN KEY (area_id) REFERENCES area (area_id)

ALTER TABLE area ADD CONSTRAINT ... PRIMARY KEY (area_id)

ALTER TABLE nutricionista ADD (area_id NUMBER)

Tabela alterada

nutricionista (tabela que recebe a restrição)

area (tabela que recebe a restrição)

nutricionista (tabela que recebe a nova coluna)

Tipo de operação

Adiciona chave estrangeira (constraint de integridade referencial)

Adiciona chave primária (constraint de unicidade)

Adiciona nova coluna (DDL de estrutura)

Papel da tabela area

Tabela referenciada (lado "pai" do relacionamento)

Tabela alterada (recebe a PK)

Não aparece no comando

Pré-requisito

Coluna area_id já deve existir em nutricionista; area_id em area deve ser PK ou UNIQUE

Coluna area_id já deve existir em area

Coluna area_id não pode existir previamente

Efeito na integridade

Garante que todo area_id em nutricionista exista em area

Garante unicidade e identificação dos registros em area

Apenas cria o campo; sem restrição de integridade

Alternativa A — ❌ Incorreta

O comando não insere um novo campo na tabela nutricionista. A cláusula ADD CONSTRAINT adiciona uma restrição (constraint), não uma coluna. Para adicionar uma coluna, o comando correto seria ALTER TABLE nutricionista ADD (area_id NUMBER) (ou o tipo adequado). A restrição de chave estrangeira pressupõe que a coluna area_id já exista na tabela.

Alternativa B — ❌ Incorreta

O comando não adiciona uma chave primária na tabela area. A tabela area é apenas a tabela referenciada pela chave estrangeira (cláusula REFERENCES). Para adicionar uma chave primária na tabela area, o comando seria ALTER TABLE area ADD CONSTRAINT area_pk PRIMARY KEY (area_id). Além disso, a chave primária da tabela referenciada normalmente já existe antes da criação da chave estrangeira.

Alternativa C — ❌ Incorreta

Esta alternativa inverte os papéis das tabelas. A chave estrangeira é adicionada na tabela nutricionista (a tabela que contém a coluna area_id que referencia outra tabela), não na tabela area. A tabela area é a tabela referenciada, ou seja, o lado "pai" do relacionamento. O comando ALTER TABLE nutricionista deixa explícito que a alteração é na tabela nutricionista.

Alternativa D — ✅ Correta ⟵ GABARITO

O comando adiciona uma chave estrangeira na tabela nutricionista. A sintaxe ALTER TABLE nutricionista ADD CONSTRAINT nutricionista_fk FOREIGN KEY (area_id) REFERENCES area (area_id) cria uma restrição de integridade referencial na tabela nutricionista, fazendo com que a coluna area_id desta tabela referencie a coluna area_id da tabela area. Isso garante que todo valor de area_id em nutricionista exista em area.

Alternativa E — ❌ Incorreta

O comando não adiciona uma chave primária na tabela nutricionista. A cláusula FOREIGN KEY define uma chave estrangeira, não uma chave primária. Para adicionar uma chave primária, o comando seria ALTER TABLE nutricionista ADD CONSTRAINT nutricionista_pk PRIMARY KEY (area_id). A chave primária identifica unicamente os registros da própria tabela, enquanto a chave estrangeira referencia outra tabela.

NÃO CAIA NESSA!

A banca explora a confusão entre a tabela que recebe a chave estrangeira e a tabela referenciada. O comando ALTER TABLE nutricionista indica que a restrição é adicionada na tabela nutricionista; a tabela area aparece apenas na cláusula REFERENCES, sendo o destino da referência. O candidato que lê o comando rapidamente pode inverter os papéis e marcar a alternativa C. Lembre-se: a chave estrangeira fica na tabela que tem a coluna que referencia outra tabela — neste caso, nutricionista.

PEGA ESSA DICA!

Para resolver questões de ALTER TABLE ... ADD CONSTRAINT, identifique primeiro a tabela que vem logo após ALTER TABLE — é nela que a restrição será adicionada. Depois, verifique o tipo de restrição (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK) e a tabela referenciada na cláusula REFERENCES (se houver). Esse passo a passo evita a inversão de papéis que a banca costuma explorar.

Gabarito: letra D

Link permanente: /questoes/qg351064