Até aqui, toda a trilha tratou de álgebra relacional: seleção, projeção, junção, divisão — um conjunto de operadores que descrevem como obter o resultado, passo a passo, encadeando operações. O cálculo relacional parte de uma lógica diferente: em vez de descrever a sequência de operações, ele descreve o que o resultado deve satisfazer, usando notação de lógica de predicados — variáveis, quantificadores e conectivos lógicos.
Neste resumo, você vai entender a diferença entre linguagem procedural (álgebra) e declarativa (cálculo), as duas variantes do cálculo relacional — de tuplas e de domínios —, e por que o quantificador universal (∀) que aparece aqui é a mesma “pergunta para todos” formalizada pela divisão relacional no resumo anterior, só que expressa de um jeito diferente.
📲 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!
📐 Procedural x declarativo: álgebra diz “como”, cálculo diz “o quê”
A álgebra relacional é procedural: uma expressão como πnome(σsalário>5000(Funcionário)) especifica exatamente a sequência de passos — primeiro filtra, depois projeta. O cálculo relacional é declarativo: ele descreve apenas as propriedades que as tuplas do resultado devem satisfazer, sem dizer em que ordem ou por qual caminho chegar até elas. É a mesma distinção, em espírito, que separa “como calcular” de “o que eu quero obter” — e é essa lógica declarativa que inspira o SQL, ainda que ele tenha elementos sintáticos que lembram a álgebra.
🔤 Cálculo relacional de tuplas (CRT)
No cálculo relacional de tuplas, a variável percorre tuplas inteiras de uma relação. Uma consulta tem a forma { t | P(t) } — “o conjunto de tuplas t tal que a fórmula P(t) é verdadeira”. Exemplo: { t | t ∈ Funcionário ∧ t.salário > 5000 } devolve todas as tuplas t da relação Funcionário cujo atributo salário é maior que 5000 — o mesmo resultado que σsalário>5000(Funcionário) na álgebra, só que descrito por uma condição lógica, não por um operador aplicado passo a passo.
🔢 Cálculo relacional de domínios (CRD)
No cálculo relacional de domínios, a variável não percorre a tupla inteira — percorre valores individuais de domínio, um para cada atributo. Uma consulta tem a forma { <x1, x2, ..., xn> | P(x1, x2, ..., xn) }, onde cada xi representa o valor de um atributo específico, não a tupla como um todo. Essa é a lógica por trás de linguagens visuais como QBE (Query By Example), que pedem valores atributo a atributo em vez de condições sobre a tupla completa. A mesma consulta do CRT acima, em CRD, ficaria { <n, s> | ∃d (Funcionário(d, n, s) ∧ s > 5000) } — n e s são os valores de nome e salário que compõem o resultado, e ∃d existe apenas para “amarrar” esses dois valores a uma mesma tupla de Funcionário, já que o CRD não tem uma variável única representando a linha inteira.
🔁 Quantificadores e a reconexão com a divisão relacional
O cálculo relacional usa dois quantificadores da lógica de predicados: ∃ (existe pelo menos um) e ∀ (para todo). Uma seleção simples sobre uma única variável, como o exemplo de CRT visto antes, não exige quantificador algum; o ∃ se torna necessário quando a fórmula precisa introduzir uma variável adicional para “buscar” uma tupla relacionada — típico de consultas equivalentes a junção, e é exatamente o papel do ∃d no exemplo de CRD acima. Já o quantificador ∀ responde exatamente o tipo de pergunta que a divisão relacional (resumo anterior) formalizou na álgebra — “para todo elemento de um conjunto, a condição vale”. A conexão vai além da semelhança: assim como a divisão foi expressa por uma dupla subtração (projeção, produto cartesiano e diferença aplicados duas vezes), o quantificador universal no cálculo também se expressa por dupla negação, pela equivalência lógica ∀x P(x) ≡ ¬∃x ¬P(x) — “para todo x, P(x)” é logicamente o mesmo que “não existe x para o qual P(x) seja falso”. É a mesma ideia de “para todos” por trás de duas notações diferentes.
✅ Segurança das expressões (safety)
Nem toda expressão de cálculo relacional é utilizável: uma expressão é considerada segura (safe) quando gera um resultado finito, restrito a valores que já aparecem no domínio ativo do banco. Uma expressão como { t | ¬(t ∈ Funcionário) } é insegura (unsafe): ela pediria “todas as tuplas que não pertencem a Funcionário”, o que é um conjunto potencialmente infinito, sem limite definido pelos dados existentes. A negação combinada com uma condição sem vínculo a um domínio finito é a fonte mais comum de expressões inseguras.
⚖️ Completude relacional: álgebra e cálculo têm o mesmo poder
Apesar de partirem de lógicas opostas — procedural x declarativo —, álgebra relacional e cálculo relacional (de tuplas ou de domínios, restrito a expressões seguras) têm exatamente o mesmo poder de expressão: toda consulta expressável em uma é expressável na outra. Esse resultado é conhecido como completude relacional, e uma linguagem que atinge esse poder é chamada relacionalmente completa. O SQL é relacionalmente completo — ele bebe tanto da álgebra (junções, uniões) quanto do cálculo (a cláusula WHERE com subconsultas é, na essência, uma condição declarativa sobre o que o resultado deve satisfazer).
⚠️ Pegadinhas comuns
- CRT quantifica sobre tuplas, CRD quantifica sobre valores de domínio: no cálculo de tuplas a variável é
t(uma linha inteira, acessada comot.atributo); no cálculo de domínios cada variável já representa um valor de um atributo específico — não confundir os dois níveis de granularidade; - Cálculo não é “mais poderoso” que álgebra: pela completude relacional, ambos têm o mesmo poder de expressão (restrito a expressões seguras) — a diferença é de estilo (procedural x declarativo), não de capacidade;
- ∀ e ∃ se convertem um no outro:
∀x P(x) ≡ ¬∃x ¬P(x)e, de forma simétrica,∃x P(x) ≡ ¬∀x ¬P(x)— bancas exploram essa equivalência pedindo para reescrever uma fórmula com ∀ usando apenas ∃ e negação, ou vice-versa; - Insegurança vem de negação sem vínculo de domínio: uma expressão com ¬ não é insegura por si só — o problema é quando a negação gera um conjunto sem limite definido pelos dados existentes no banco;
- SQL não é puramente procedural nem puramente declarativo: ele mistura elementos dos dois — cláusulas como
JOINlembram álgebra, enquanto oWHEREcom subconsultas correlacionadas lembra cálculo.
🎯 Dica Final para a Prova
Se a questão descrever uma consulta usando t.atributo e uma condição sobre a tupla inteira, é cálculo de tuplas; se cada variável representa um valor isolado de um atributo, é cálculo de domínios. Se a fórmula usar ∀ e a banca pedir a versão equivalente com ∃, lembre da dupla negação: ∀x P(x) ≡ ¬∃x ¬P(x) — a mesma lógica “para todos, sem exceção” que a divisão relacional resolveu com dupla subtração no resumo anterior.
✓ Agora que você conhece a base do cálculo relacional e sua equivalência de poder com a álgebra, o próximo passo é ver como expressões algébricas diferentes podem produzir o mesmo resultado: a equivalência de expressões relacionais.
📍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: Equivalência de Expressões Relacionais
📘 Álgebra descreve o caminho, cálculo descreve o destino — e, pela completude relacional, os dois chegam sempre ao mesmo lugar. Continue estudando!
Comentários
Seja o primeiro a comentar.
Você precisa fazer o login para publicar um comentário.