Operações de Conjunto
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:
- A mesma aridade: ambas devem ter o mesmo número de atributos.
- 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 |
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.
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.