Todos os operadores vistos até aqui — seleção, projeção, união, interseção, diferença, produto cartesiano e junção — respondem perguntas do tipo “existe correspondência?”. A divisão relacional (÷) é diferente: ela responde perguntas de quantificação universal, do tipo “para TODOS os elementos de um conjunto”. É o operador certo quando a pergunta é algo como “quais fornecedores fornecem TODAS as peças do estoque?” ou “quais alunos cursaram TODAS as disciplinas obrigatórias?”.
Neste resumo, você vai entender a notação formal da divisão, por que ela não é um operador primitivo — assim como a junção do resumo anterior, ela também é definida em termos de operadores já vistos —, e a armadilha mais comum: tentar responder “para todos” usando apenas junção ou seleção, que só respondem “existe pelo menos um”.
📲 Canal Oficial do Dicionário do Concurseiro no WhatsApp
Receba resumos, questões comentadas e novidades diretamente no seu celular!
💡 Conteúdo exclusivo para concurseiros. Totalmente gratuito!
➗ Divisão relacional (÷): a pergunta “para todos”
A divisão trabalha com duas relações: um dividendo R, com atributos (X, Y), e um divisor S, com atributos (Y) — ou seja, os atributos de S precisam ser um subconjunto dos atributos de R. O resultado R ÷ S tem grau igual ao número de atributos de X (a parte de R que não está em S), e contém cada valor x de X tal que, para TODO valor y de S, a tupla (x, y) existe em R.
Exemplo clássico: R = Fornecimento(fornecedor, peça) lista quais peças cada fornecedor fornece; S = Peça(peça) lista todas as peças do catálogo. R ÷ S devolve os fornecedores que aparecem associados a todas as peças de S — não apenas a uma ou algumas. Basta um fornecedor deixar de fornecer sequer uma peça do catálogo para que ele já não entre no resultado.
🧩 Divisão não é primitiva: a fórmula da dupla subtração
Assim como a junção do resumo anterior é derivada de produto cartesiano + seleção, a divisão também não é um operador independente — ela se expressa em termos de projeção, produto cartesiano e diferença, todos já vistos nesta trilha:
R ÷ S = πX(R) − πX((πX(R) × S) − R)
Lendo por partes: πX(R) lista todos os candidatos possíveis (todos os valores de X que aparecem em R, mesmo que incompletos); πX(R) × S gera todas as combinações esperadas entre cada candidato e cada valor de S — o “cenário ideal” onde todo candidato estaria associado a todo elemento de S; subtrair R desse produto isola exatamente as combinações que deveriam existir em R mas não existem — ou seja, os candidatos “incompletos”; projetar isso em X e subtrair de novo do total elimina esses candidatos incompletos, sobrando só quem está de fato associado a todos os elementos de S.
⚠️ Pegadinhas comuns
- Divisão responde “para todos”, os outros operadores respondem “existe”: seleção, junção e produto cartesiano filtram ou combinam com base em correspondências pontuais; só a divisão exige que todas as combinações de um conjunto estejam presentes;
- Compatibilidade de esquema é obrigatória: os atributos de S devem ser um subconjunto dos atributos de R — se S tiver um atributo que não existe em R, a divisão não é definida;
- A fórmula usa dupla subtração, não uma única diferença:
πX(R) − πX((πX(R) × S) − R)— pular a etapa intermediária do produto cartesiano é o erro mais comum ao tentar reescrever a fórmula de memória; - SQL não tem operador de divisão nativo: a mesma lógica é implementada com dupla negação (
NOT EXISTSaninhado, “não existe peça que o fornecedor não forneça”) ou comGROUP BY+HAVING COUNT(DISTINCT peça) = (SELECT COUNT(*) FROM S)— oDISTINCTé necessário porque, ao contrário da relação teórica (que é um conjunto, sem repetição), uma tabela SQL real pode ter pares duplicados, o que infla a contagem sem oDISTINCT; bancas costumam pedir para reconhecer esse padrão em uma consulta SQL já escrita, não só a fórmula da álgebra; - Resultado vazio é um resultado válido: se nenhum valor de X estiver associado a todos os elementos de S, o resultado da divisão é a relação vazia — isso não é erro, é a resposta correta quando ninguém atende à condição “para todos”.
🎯 Dica Final para a Prova
Sempre que o enunciado usar palavras como “todos”, “todas” ou “cada um” associando duas entidades (fornecedor que fornece todas as peças, aluno que cursou todas as disciplinas), pense em divisão relacional antes de tentar resolver com junção. E se a questão pedir a fórmula equivalente em termos de outros operadores, lembre da estrutura fixa: projeção do dividendo, menos projeção da diferença entre o produto cartesiano (projeção × divisor) e o próprio dividendo.
✓ Agora que você entende como a divisão relacional formaliza o “para todos” da álgebra, o próximo passo é conhecer outra forma de expressar consultas na teoria relacional: o cálculo relacional de tuplas e domínios.
📍Gostou do conteúdo? Deixe um comentário, compartilhe e continue acompanhando o Dicionário do Concurseiro para mais Resumos de TI – Banco de Dados. Aqui você encontra explicações claras, atualizadas e com foco total no que cai em prova!
👉 Leia também no Dicionário do Concurseiro: Resumo TI Banco de Dados: Cálculo Relacional de Tuplas e Domínios – Noções
📘 Divisão relacional é o operador do “para todos” — enquanto os demais respondem se existe correspondência, ela só devolve quem está associado a cada elemento do divisor, sem exceção. Continue estudando!
Comentários
Seja o primeiro a comentar.
Você precisa fazer o login para publicar um comentário.