Questão de Banco de Dados — Conceitos e Fundamentos de Modelo Relacional — FCC 2025
Banco de Dados›Conceitos e Fundamentos de Modelo Relacional
Código
fc150357
Banca
FCC
Órgão
SEFAZ PI
Ano
2025
Cargo
ATE ( )
Uma Secretaria da Fazenda está estruturando seu banco de dados para garantir a integridade e a eficiência das consultas sobre as fiscalizações historicamente realizadas. Para isso, foi criada uma estrutura relacional robusta, da qual fazem parte as tabelas abaixo. Considera-se que uma empresa pode ser fiscalizada várias vezes.
CREATE TABLE EMPRESA (
id_empresa INT PRIMARY KEY,
nome VARCHAR(255) NOT NULL
);
CREATE TABLE FISCALIZACAO (
id_fiscalizacao INT PRIMARY KEY,
id_empresa INT,
data_fiscalizacao DATE NOT NULL,
status VARCHAR(20) NOT NULL,
FOREIGN KEY (id_empresa) REFERENCES EMPRESA (id_empresa) ON DELETE CASCADE
);
Em condições ideais, um comportamento correto resultante dessa estrutura é:
ACaso um registro da tabela EMPRESA seja excluído, a exclusão será impedida pelo SGBD, pois há uma relação de integridade referencial entre as tabelas.
BPara garantir a integridade referencial, seria necessário adicionar um índice à coluna id_empresa na tabela FISCALIZACAO, pois a integridade referencial só pode ser aplicada em colunas indexadas.
CSe uma empresa for removida da tabela EMPRESA, todas as fiscalizações associadas a essa empresa na tabela FISCALIZACAO serão automaticamente excluídas, devido à cláusula ON DELETE CASCADE definida na FK.
DDurante a exclusão em cascata (cascading delete), os bloqueios são aplicados apenas às linhas da tabela EMPRESA, garantindo que as operações de exclusão na tabela FISCALIZACAO ocorram sem afetar a concorrência do banco de dados.
EO comando DELETE FROM EMPRESA WHERE id_empresa = 3 resultará em erro, caso existam registros correspondentes na tabela FISCALIZACAO, pois a integridade referencial impede a exclusão de registros referenciados.
Revelar gabarito e comentário▾
GabaritoC — Se uma empresa for removida da tabela EMPRESA, todas as fiscalizações associadas a essa empresa na tabela FISCALIZACAO serão automaticamente excluídas, devido à cláusula ON DELETE CASCADE definida na FK.
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”.
Integridade Referencial e ON DELETE CASCADE
Gabarito: letra C. A cláusula ON DELETE CASCADE na definição da chave estrangeira faz com que, ao excluir um registro da tabela EMPRESA, todas as linhas correspondentes na tabela FISCALIZACAO sejam excluídas automaticamente pelo SGBD. Essa é a semântica exata da ação referencial CASCADE, prevista no padrão SQL e implementada pelos principais SGBDs relacionais.
A integridade referencial é uma das restrições de integridade fundamentais do modelo relacional. Ela garante que uma chave estrangeira em uma tabela (a tabela filha) sempre aponte para uma chave primária existente em outra tabela (a tabela pai). No exemplo, id_empresa em FISCALIZACAO é a chave estrangeira que referencia id_empresa em EMPRESA. Isso impede, por exemplo, que se insira uma fiscalização para uma empresa que não existe. Mas a integridade referencial não define, por si só, o que acontece quando o registro pai é excluído — essa política é definida pelas ações referencias especificadas na cláusula FOREIGN KEY.
As ações referencias mais comuns são:
ON DELETE CASCADE: exclui automaticamente as linhas filhas quando a linha pai é excluída.
ON DELETE SET NULL: define a chave estrangeira das linhas filhas como NULL (exige que a coluna aceite nulos).
ON DELETE RESTRICT / NO ACTION: impede a exclusão da linha pai se existirem linhas filhas referenciando-a.
ON DELETE SET DEFAULT: define a chave estrangeira para um valor padrão.
No comando CREATE TABLE FISCALIZACAO, a cláusula FOREIGN KEY (id_empresa) REFERENCES EMPRESA (id_empresa) ON DELETE CASCADE determina que, ao excluir uma empresa, todas as suas fiscalizações serão excluídas em cascata. É exatamente o que a alternativa C afirma.
A pegadinha da questão está em confundir a ação CASCADE com a ação RESTRICT (ou NO ACTION). A alternativa A e a alternativa E descrevem o comportamento de RESTRICT, que impede a exclusão — mas o enunciado deixa claro que a FK foi definida com ON DELETE CASCADE, então a exclusão é permitida e propagada. A alternativa B confunde integridade referencial com indexação: a integridade referencial não exige índice explícito na coluna da chave estrangeira (embora muitos SGBDs criem índices automaticamente para otimizar a verificação). A alternativa D trata de bloqueios e concorrência, mas a exclusão em cascata envolve bloqueios tanto na tabela pai quanto nas tabelas filhas, pois o SGBD precisa garantir consistência durante a operação.
Guarde a distinção entre as ações referencias: CASCADE propaga a exclusão, RESTRICT/NO ACTION bloqueia, SET NULL anula. É exatamente nessa fronteira que as alternativas se dividem.
Critério
ON DELETE CASCADE (tabela do enunciado)
ON DELETE RESTRICT / NO ACTION
ON DELETE SET NULL
Efeito ao excluir registro pai
Exclui automaticamente as linhas filhas
Impede a exclusão se houver filhas
Define a FK das filhas como NULL
Exige coluna FK anulável?
Não
Não
Sim
Comportamento do DELETE na tabela EMPRESA
Executa com sucesso e propaga
Gera erro
Executa com sucesso e anula
Alternativa correspondente na questão
C (gabarito)
A e E (incorretas)
Não citada nas alternativas
Alternativa A — ❌ Incorreta
Afirma que a exclusão será impedida pelo SGBD. Isso seria verdade se a FK tivesse ON DELETE RESTRICT ou NO ACTION, mas a cláusula definida é ON DELETE CASCADE, que permite a exclusão e propaga o efeito para as linhas filhas. A integridade referencial não impede a exclusão por si só; ela apenas garante que não haja referências órfãs, e o CASCADE resolve isso excluindo as filhas.
Alternativa B — ❌ Incorreta
Afirma que seria necessário adicionar um índice à coluna id_empresa para garantir a integridade referencial. Isso é falso: a integridade referencial é uma restrição lógica do modelo relacional, implementada pelo SGBD independentemente de índices. Embora muitos SGBDs criem índices automaticamente nas colunas de chave estrangeira para acelerar as verificações de integridade, isso é uma otimização física, não um requisito lógico. A restrição FOREIGN KEY já é suficiente para garantir a integridade referencial.
Alternativa C — ✅ Correta ⟵ GABARITO
Descreve exatamente o efeito da cláusula ON DELETE CASCADE: ao excluir uma empresa da tabela EMPRESA, todas as fiscalizações associadas na tabela FISCALIZACAO serão excluídas automaticamente. Isso é a definição de exclusão em cascata, uma das ações referencias do padrão SQL.
Alternativa D — ❌ Incorreta
Afirma que os bloqueios são aplicados apenas às linhas da tabela EMPRESA. Na prática, a exclusão em cascata envolve o bloqueio das linhas afetadas em ambas as tabelas (pai e filha), pois o SGBD precisa garantir que nenhuma outra transação modifique essas linhas durante a operação, preservando a consistência e o isolamento. A afirmação de que as operações na tabela FISCALIZACAO ocorrem "sem afetar a concorrência" é incorreta — a exclusão em cascata pode, sim, gerar contenção de bloqueios.
Alternativa E — ❌ Incorreta
Afirma que o DELETE FROM EMPRESA WHERE id_empresa = 3 resultará em erro se houver registros correspondentes em FISCALIZACAO. Isso seria o comportamento de ON DELETE RESTRICT ou NO ACTION. Como a FK foi definida com ON DELETE CASCADE, o comando será executado com sucesso e as fiscalizações associadas serão excluídas automaticamente.
NÃO CAIA NESSA!
A banca explora a confusão entre as ações referencias CASCADE e RESTRICT. As alternativas A e E descrevem o comportamento de RESTRICT (bloquear a exclusão), mas o enunciado deixa explícito ON DELETE CASCADE. Fique atento à cláusula exata da FK: se for CASCADE, a exclusão propaga; se for RESTRICT/NO ACTION, a exclusão é bloqueada. Com treino, você identifica essa troca de longe 💪.
PEGA ESSA DICA!
Para memorizar as ações referencias, pense: CASCADE = "cai junto" (exclui as filhas), RESTRICT = "restringe" (impede), SET NULL = "zera" (anula a FK). Na prova, leia a cláusula FOREIGN KEY com atenção e verifique qual ação foi especificada — é ela que determina o comportamento.