Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas 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.

Imagem associada para resolução da questão

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

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

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 é:

CREATE TABLE tabela_filha (
    coluna1 tipo,
    coluna2 tipo,
    CONSTRAINT nome_fk FOREIGN KEY (coluna_fk) REFERENCES tabela_pai (coluna_pk)
);

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:

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

  2. Coluna inexistente: FOREIGN KEY (Processo) referencia uma coluna Processo que não existe na tabela Orgao.

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

Gabarito: Errado

Link permanente: /questoes/ce403670