Operações de Conjunto

Autor

Douglas Braga

As operações de conjunto tratam relações como conjuntos de tuplas e aplicam as operações clássicas de teoria dos conjuntos: união, interseção e diferença.

Requisito de Compatibilidade

Para que as operações \(\cup\), \(\cap\) e \(-\) sejam válidas, as duas relações devem ser compatíveis, o que exige:

  1. A mesma aridade: ambas devem ter o mesmo número de atributos.
  2. Domínios compatíveis: para cada posição \(i\), o domínio do \(i\)-ésimo atributo de \(r\) deve ser compatível com o domínio do \(i\)-ésimo atributo de \(s\).

Em outras palavras, as relações devem “ter a mesma forma” para que faz sentido combinar suas tuplas.

Conjuntos utilizados nos exemplos

Definimos duas relações auxiliares a partir da tabela disciplina:

\[A \leftarrow \Pi_{id\_disciplina}(\sigma_{id\_curso = 211}(disciplina))\]

\[B \leftarrow \Pi_{id\_disciplina}(\sigma_{carga\_horaria \geq 60}(disciplina))\]

Relação \(A\) — disciplinas de Pedagogia (8 disciplinas):

id_disciplina
2110201
2110202
2110401
2110402
2110601
2110602
2110801
2110802

Relação \(B\) — disciplinas com carga horária \(\geq 60\) h (22 disciplinas — todas exceto 2110602 = 40 h e 2110802 = 50 h):

id_disciplina (carga_horaria)
1110201 75
1110202 60
1110401 75
1110402 95
1110601 75
1110602 75
1110801 100
1110802 90
3110201 150
3110202 120
3110401 180
3110402 120
3110601 150
3110602 120
3110801 100
3110802 160
2110201 60
2110202 60
2110401 80
2110402 80
2110601 80
2110801 60
Nota

2110602 (40 h) e 2110802 (50 h) não aparecem em \(B\), pois têm carga horária inferior a 60 h. As demais 6 disciplinas de PED aparecem em ambas as relações.

União (\(\cup\))

\[r \cup s\]

Retorna todas as tuplas que pertencem a \(r\), a \(s\) ou a ambas. Duplicatas são eliminadas.

\[A \cup B\]

Resultado — disciplinas de Pedagogia ou com carga horária \(\geq 60\) h (24 disciplinas — o conjunto completo da amostra):

2110201, 2110202, 2110401, 2110402, 2110601 e 2110801 pertencem às duas relações, mas aparecem apenas uma vez no resultado — a união elimina duplicatas automaticamente. 2110602 e 2110802 são adicionadas via \(A\).

Interseção (\(\cap\))

\[r \cap s\]

Retorna apenas as tuplas que pertencem simultaneamente a \(r\) e a \(s\).

\[A \cap B\]

Resultado — disciplinas de Pedagogia que também têm carga horária \(\geq 60\) h:

id_disciplina
2110201
2110202
2110401
2110402
2110601
2110801

2110602 (40 h) e 2110802 (50 h) estão em \(A\) mas não em \(B\), por isso são excluídas. As demais 6 disciplinas de PED satisfazem ambas as condições.

Nota

A interseção pode ser derivada das operações básicas: \(r \cap s = r - (r - s)\). Portanto, \(\cap\) não é um operador primitivo da álgebra relacional — é incluída por conveniência.

Diferença (\(-\))

\[r - s\]

Retorna as tuplas que pertencem a \(r\) mas não pertencem a \(s\).

\[A - B\]

Resultado — disciplinas de Pedagogia com carga horária \(< 60\) h:

id_disciplina
2110602
2110802

Das 8 disciplinas de PED, apenas 2110602 (40 h) e 2110802 (50 h) não satisfazem \(carga\_horaria \geq 60\) h e portanto não estão em \(B\). São as únicas que permanecem após a diferença.

Resumo Comparativo

Operação Símbolo Resultado com \(A\) e \(B\)
União \(A \cup B\) 24 disciplinas (catálogo completo)
Interseção \(A \cap B\) 6 disciplinas de PED com carga ≥ 60 h
Diferença \(A - B\) 2 disciplinas de PED com carga < 60 h

Para Praticar

1. Comutatividade e não-comutatividade. Das três operações de conjunto, quais são comutativas? Verifique com um exemplo concreto que \(A - B \neq B - A\).

\(\cup\) e \(\cap\) são comutativas (\(A \cup B = B \cup A\) e \(A \cap B = B \cap A\)). A diferença \(-\) não é comutativa.

Exemplo: seja \(A\) = disciplinas de PED (8 tuplas) e \(B\) = disciplinas com carga ≥ 60 h (22 tuplas). - \(A - B\) = disciplinas de PED com carga < 60 h = {2110602, 2110802} → 2 tuplas - \(B - A\) = disciplinas com carga ≥ 60 h que não são de PED = 22 − 6 = 16 tuplas


2. Equivalência. Prove que \(A \cap B\) é equivalente a \(A - (A - B)\).

  • \(A - B\) = elementos em A que não estão em B.
  • \(A - (A - B)\) = elementos de A que não estão em “\(A - B\)” = elementos de A que estão em B = \(A \cap B\). ✓

Essa equivalência mostra que \(\cap\) pode ser derivado dos operadores básicos \(\sigma\), \(\Pi\) e \(-\) — por isso a interseção não precisa ser um operador primitivo da álgebra relacional.


3. União de relações com schemas diferentes. Podemos calcular \(\Pi_{nome}(professor) \cup \Pi_{nome}(aluno)\)? O que o resultado representaria?

Sim, pois ambas as relações têm o mesmo schema após a projeção: um único atributo nome do tipo texto. O resultado seria uma relação contendo todos os nomes distintos de professores e alunos em uma única coluna. Se um aluno e um professor tivessem o mesmo nome, apareceriam apenas uma vez (a união elimina duplicatas). Em SQL: SELECT nome FROM professor UNION SELECT nome FROM aluno.