João, administrador de banco de dados, deverá projetar um banco de dados Oracle de registro de alunos que contenha várias tabelas para armazenar informações acadêmicas: \bullet A tabela “Aluno” armazena informações sobre alunos. \bullet A tabela “Notas_Aluno” armazena informações sobre as notas do aluno. \bullet Ambas as tabelas têm uma coluna chamada “Aluno_ID”. \bullet A coluna “Aluno_ID” na tabela “Aluno” é uma chave primária. João deverá criar a chave estrangeira na coluna “aluno_ID” da tabela “Notas_Aluno” para relacionar-se com a coluna “aluno_ID” da tabela “Aluno”. Para isso, João deverá utilizar o seguinte comando:
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”.
Chave Estrangeira (FOREIGN KEY) no Oracle
Gabarito: letra D. A sintaxe correta para criar uma chave estrangeira em uma tabela no Oracle é CONSTRAINT nome_da_restricao FOREIGN KEY (coluna) REFERENCES tabela_referenciada (coluna_referenciada). A alternativa D é a única que apresenta exatamente essa estrutura, com a palavra-chave FOREIGN KEY no lugar certo e a referência à tabela aluno e à coluna aluno_ID.
A chave estrangeira (ou foreign key) é o mecanismo do modelo relacional que garante a integridade referencial entre duas tabelas. Ela estabelece que os valores de uma coluna (ou conjunto de colunas) em uma tabela devem corresponder a valores de uma chave primária (ou única) em outra tabela. No caso do enunciado, a tabela Notas_Aluno deve ter uma coluna aluno_ID que só aceite valores que existam na coluna aluno_ID da tabela Aluno (que é a chave primária). Isso impede, por exemplo, que se registre uma nota para um aluno que não existe.
A sintaxe para definir uma chave estrangeira pode aparecer de duas formas principais: inline (dentro da definição da coluna) ou como uma restrição de tabela (constraint). A forma mais comum e recomendada, especialmente quando a chave é composta por mais de uma coluna, é a de restrição de tabela, que é exatamente o que as alternativas tentam reproduzir. A estrutura completa dessa restrição é:
CONSTRAINT nome_da_restricao: dá um nome à restrição, o que facilita sua identificação e gerenciamento posterior (por exemplo, para dropá-la ou identificá-la em mensagens de erro).
FOREIGN KEY (coluna_local): indica que a coluna (ou colunas) listada na tabela atual será a chave estrangeira.
REFERENCES tabela_pai (coluna_pai): aponta para a tabela e a coluna que são referenciadas, ou seja, a chave primária (ou única) da tabela "pai".
A pegadinha desta questão é puramente sintática: a banca embaralha a ordem dos elementos da cláusula CONSTRAINT. O candidato que conhece a sintaxe correta identifica imediatamente que a ordem canônica é CONSTRAINT nome FOREIGN KEY (coluna) REFERENCES tabela (coluna). Qualquer variação dessa ordem (como colocar REFERENCES antes de FOREIGN KEY, ou omitir a palavra FOREIGN KEY, ou colocar o nome da restrição depois de FOREIGN KEY) torna o comando inválido no Oracle.
Vamos analisar cada alternativa em detalhe, verificando a posição exata de cada elemento da sintaxe.
A: omite FOREIGN KEY; B: nome ausente após CONSTRAINT; C: falta CONSTRAINT; E: ordem invertida (REFERENCES antes de FOREIGN KEY)
Palavra-chave CONSTRAINT
Presente, seguida do nome da restrição
A: presente, mas sem FOREIGN KEY; B: usada como nome (inválido); C: ausente; E: presente, mas com ordem errada
Cláusula FOREIGN KEY
Corretamente posicionada após o nome da restrição
A: ausente; B: no lugar do nome; C: sem CONSTRAINT antes; E: após REFERENCES
Cláusula REFERENCES
Aponta para aluno(aluno_ID) no final
A: presente, mas sem coluna local; B: correta, mas nome ausente; C: correta, mas sem CONSTRAINT; E: antes de FOREIGN KEY e com sintaxe quebrada
Validade no Oracle
✅ Comando válido e executável
❌ Todos geram erro de sintaxe
Alternativa A — ❌ Incorreta
Esta alternativa omite a palavra-chave FOREIGN KEY. A cláusula CONSTRAINT aluno_ID_fk REFERENCES aluno(aluno_ID) não é válida, pois o Oracle espera que, após o nome da restrição, venha a expressão FOREIGN KEY (coluna). Sem ela, o comando não sabe qual coluna da tabela notas_aluno será a chave estrangeira. O erro é a ausência do identificador FOREIGN KEY.
Alternativa B — ❌ Incorreta
Aqui, o erro está na posição do nome da restrição. A sintaxe CONSTRAINT FOREIGN KEY (aluno_ID) REFERENCES aluno (aluno_ID) não atribui um nome à restrição; ela tenta usar FOREIGN KEY como se fosse o nome, o que é inválido. A ordem correta exige que o nome venha imediatamente após CONSTRAINT, antes de FOREIGN KEY. O erro é a troca da ordem: o nome da restrição está ausente e FOREIGN KEY está no lugar errado.
Alternativa C — ❌ Incorreta
Nesta alternativa, o nome da restrição aluno_ID_fk aparece solto, sem a palavra CONSTRAINT antes dele. A sintaxe aluno_ID_fk FOREIGN KEY (aluno_ID) REFERENCES aluno(aluno_ID) não é reconhecida pelo Oracle, pois falta a palavra-chave CONSTRAINT que inicia a definição da restrição. O erro é a omissão da palavra CONSTRAINT.
Alternativa D — ✅ Correta ⟵ GABARITO
Esta alternativa apresenta a sintaxe completa e correta: CONSTRAINT aluno_ID_fk FOREIGN KEY (aluno_ID) REFERENCES aluno(aluno_ID). Ela contém todos os elementos na ordem certa: a palavra CONSTRAINT, o nome da restrição (aluno_ID_fk), a expressão FOREIGN KEY com a coluna local (aluno_ID), e a cláusula REFERENCES apontando para a tabela aluno e a coluna aluno_ID. É exatamente o que o Oracle espera para criar uma chave estrangeira como restrição de tabela.
Alternativa E — ❌ Incorreta
Esta alternativa inverte completamente a ordem dos elementos. A sintaxe CONSTRAINT aluno_ID_fk REFERENCES (aluno_ID) FOREIGN KEY aluno(aluno_ID) coloca REFERENCES antes de FOREIGN KEY, e ainda separa a coluna da tabela referenciada de forma incorreta. O Oracle não reconhece essa estrutura. O erro é a inversão total da ordem dos elementos da cláusula.
NÃO CAIA NESSA!
A banca explora a confusão clássica com a ordem dos elementos da cláusula CONSTRAINT. O candidato que decora a sintaxe de forma solta pode se perder entre as alternativas. A ordem canônica é sempreCONSTRAINT nome FOREIGN KEY (coluna) REFERENCES tabela (coluna). Memorize essa sequência como um bloco único: "CONSTRAINT + nome + FOREIGN KEY + (coluna) + REFERENCES + tabela + (coluna)". Com treino, você identifica a correta de imediato, sem precisar analisar cada variação 💪.