Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
Banco de Dados›Consultas e Comandos em SQL
Código
ce403670
Banca
CESPE / CEBRASPE
Órgão
TSE
Ano
2024
Cargo
TJ
No modelo a seguir, idProcesso da tabela Processo e IdOrgao da tabela Orgao são chaves primárias, NN corresponde a not null e FK, a foreign key.
Com base no modelo e nas informações precedentes, julgue o item subsecutivo.
A execução do script SQL a seguir criará as tabelas e o relacionamento entre elas, conforme o modelo apresentado.
CREATE TABLE Orgao ( IdOrgao INT NOT NULL PRIMARY KEY, NomeOrgao VARCHAR(45) NULL, FOREIGN KEY (Processo) REFERENCES Processo (IdOrgao) );
CREATE TABLE Processo ( idProcesso INT NOT NULL PRIMARY KEY, NumeroProcesso VARCHAR(45) NULL, IdOrgao INT NULL);
CCerto
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”.
SQL – Criação de Tabelas e Chave Estrangeira
Gabarito: Errado. O script SQL apresentado não cria as tabelas e o relacionamento conforme o modelo, pois a definição da chave estrangeira está invertida: a tabela Orgao referencia a tabela Processo (que ainda não existe na ordem de execução) e a coluna Processo não existe na tabela Orgao. Além disso, a tabela Processo não possui a restrição de chave estrangeira que deveria referenciar Orgao(IdOrgao). A sintaxe correta exige que a chave estrangeira seja declarada na tabela que contém a coluna que referencia outra tabela, e que a tabela referenciada exista antes.
O comando CREATE TABLE é um comando da sublinguagem DDL (Data Definition Language), responsável por criar estruturas de banco de dados, como tabelas. A definição de uma chave estrangeira (FOREIGN KEY) estabelece um vínculo entre duas tabelas, garantindo a integridade referencial: os valores da coluna que é chave estrangeira devem existir na coluna referenciada da outra tabela (que deve ser chave primária ou ter restrição UNIQUE). A sintaxe básica para criar uma tabela com chave estrangeira é:
No script do enunciado, a tabela Orgao é criada primeiro, mas a cláusula FOREIGN KEY (Processo) REFERENCES Processo (IdOrgao) tenta referenciar a tabela Processo, que ainda não foi criada — isso geraria um erro de execução na maioria dos SGBDs, pois a tabela referenciada deve existir no momento da criação da chave estrangeira. Além disso, a coluna Processo não existe na tabela Orgao; a chave estrangeira deve ser definida sobre uma coluna existente na própria tabela. A tabela Processo, por sua vez, possui a coluna IdOrgao, que deveria ser a chave estrangeira referenciando Orgao(IdOrgao), mas essa restrição não foi declarada. Portanto, o relacionamento não é criado conforme o modelo.
Para que o script funcionasse, a ordem correta seria criar primeiro a tabela Orgao (sem a chave estrangeira) e depois a tabela Processo com a restrição FOREIGN KEY (IdOrgao) REFERENCES Orgao(IdOrgao). Alternativamente, poderia-se usar ALTER TABLE para adicionar a chave estrangeira após a criação das tabelas. O modelo apresentado indica que Processo possui a chave estrangeira IdOrgao referenciando Orgao, e não o contrário.
A pegadinha da banca está em inverter a direção do relacionamento: o candidato pode não perceber que a chave estrangeira deve estar na tabela que contém a coluna que referencia outra, e que a tabela referenciada deve existir antes. Além disso, a coluna Processo na tabela Orgao não existe, o que torna o script inválido.
Item — ❌ Errado
O script não cria as tabelas e o relacionamento conforme o modelo. Os erros são:
Ordem de criação: a tabela Orgao referencia Processo, mas Processo ainda não foi criada — viola a exigência de que a tabela referenciada exista.
Coluna inexistente: FOREIGN KEY (Processo) referencia uma coluna Processo que não existe na tabela Orgao.
Relacionamento invertido: o modelo indica que Processo.IdOrgao é a chave estrangeira para Orgao.IdOrgao, mas o script não declara essa restrição na tabela Processo.
A sintaxe correta seria:
CREATE TABLE Orgao (
IdOrgao INT NOT NULL PRIMARY KEY,
NomeOrgao VARCHAR(45) NULL
);
CREATE TABLE Processo (
idProcesso INT NOT NULL PRIMARY KEY,
NumeroProcesso VARCHAR(45) NULL,
IdOrgao INT NULL,
FOREIGN KEY (IdOrgao) REFERENCES Orgao(IdOrgao)
);
Assim, o relacionamento é criado corretamente, com a chave estrangeira na tabela Processo apontando para a chave primária de Orgao.
NÃO CAIA NESSA!
A banca inverte a direção da chave estrangeira e usa uma coluna inexistente. Lembre-se: a chave estrangeira fica na tabela que contém a coluna que referencia outra, e a tabela referenciada deve existir antes. Aqui, o correto é Processo referenciar Orgao, não o contrário.