A Operação PRODUTO CARTESIANO é usada para a combinação (concatenação) de tuplas:
- É uma operação baseada em conjuntos.
- O símbolo × identifica a operação.
- A operação produz uma nova relação (novo conjunto), em que cada elemento é uma combinação (concatenação) de cada elemento (tupla) de uma relação (conjunto) com cada elemento (tupla) de outra relação (conjunto).
- O resultado do produto cartesiano entre R(A1, A2, ..., An) e S(B1, B2, ..., Bm) é:
- uma relação Q com grau (n + m) atributos, cujo esquema é: Q(A1, A2, ..., An, B1, B2 ,…, Bm);
- se nR e nS são os números de tuplas em R e S, denotados por nR=|R| e nS=|S|, respectivamente, então Q terá (nR * nS) tuplas.
Observe o resultado da expressão PRODUTO × CATEGORIA na figura abaixo:
- PRODUCT tem 04 atributos e CATEGORIA tem 02 atritbutos:
- PRODUTO × CATEGORIA tem 06 atributos.
- PRODUCT tem 05 tuplas e CATEGORIA tem 02 tuplas:
- PRODUTO × CATEGORIA tem 10 tuplas.
Se usada de forma isolada, a operação PRODUTO CARTESIANO usualmente não possui resultados práticos:
∎ Contudo, possui valor para fins didáticos.
∎ Pode ser útil se utilizada conjuntamente com a seleção de tuplas; por exemplo, selecionar somente as combinações (concatenações) entre tuplas que são relacionadas entre si.
∎ A operação JUNÇÃO representa uma alternativa valiosa à operação PRODUTO CARTESIANO.
A Operação JUNÇÃO é usada para a combinação (concatenação?) de tuplas, desde que uma condição de seleção seja verdadeira (um predicado seja atendido):
- O símbolo ⋈ identifica a operação.
- A condição de seleção presente na JUNÇÃO é denominada predicado de junção.
- O resultado da JUNÇÃO é um subconjunto do resultado da PRODUTO CARTESIANO?
- As duas expressões abaixo são equivalentes? Ou seja, as expressões produzem o mesmo resultado?
- R ⋈predicado S
- σpredicado (R × S)
Observe o resultado da expressão PRODUTO ⋈Categ = CodCategCATEGORIA na figura abaixo:
- Didaticamente, podemos comparar PRODUTO CARTESIANO e JUNÇÃO:
- dentre as tuplas (elementos) resultantes da PRODUTO CARTESIANO (na figura à esq.), são selecionadas tuplas (elementos) para a JUNÇÃO (na figura à dir.);
- as tuplas selecionadas devem satisfazer ao predicado Categ = CodCateg.
Sobre a junção entre as tuplas de R e S, o predicado tipicamente assume a seguinte forma genérica:
- <condição> AND <condição> AND ... AND <condição>:
- <condição> possui o formato Ai θ Bj;
- Ai é um atributo de R;
- Bj é um atributo de S;
- Ai e Bj têm o mesmo domínio;
- θ (theta) é um dos operadores de comparação em {=, < , ≤,>, ≥, ≠}.
- Ou seja, a JUNÇÃO THETA permite o uso de qualquer dos operadores de comparação em {=, < , ≤,>, ≥, ≠}:
- ou seja, a JUNÇÃO THETA não é restrita ao operador de igualdade;
- por exemplo, o predicado Categ > CodCateg pode ser usado em JUNÇÃO THETA (em vez de o predicado Categ = CodCateg).
A Operação JUNÇÃO é comumente usada com o operador de igualdade, para explorar as associações entre tuplas em Bancos de Dados Relacionais:
- A EQUIJUNÇÃO é a JUNÇÃO que usa apenas o operador de igualdade.
- A expressão em JUNÇÃO Exemplo 1 é uma EQUIJUNÇÃO:
- PRODUTO ⋈Categ = CodCategCATEGORIA
Observemos, novamente, o resultado obtido em JUNÇÃO Exemplo 1:
- A expressão é uma EQUJUNÇÃO:
- PRODUTO ⋈Categ = CodCategCATEGORIA.
- A figura (à dir.) demonstra que há valores repetidos no resultado da operação:
- os atributos Categ e CodCateg estão no predicado da EQUIJUNÇÃO (Categ = CodCateg);
- portanto, os valores associados aos atributos Categ e CodCateg caracterizam repetição de dados no resultado da consulta, conforme ressaltado na figura (duas colunas em que todos os valores são iguais).
A Operação JUNÇÃO NATURAL elimina repetições de dados (colunas repetidas), que são em decorrência dos atributos presentes no predicado de EQUIJOIN:
- O símbolo * identifica a operação:
- alguns autores empregam o símbolo ⋈ isolado (sem ser seguido por um predicado de JUNÇÃO).
- A JUNÇÃO NATURAL não possui, explicitamente, um predicado de JUNÇÃO:
- então, como saber que predicado de JUNÇÃO aplicar a JUNÇÃO NATURAL, se nenhum predicado está explícito?
- ao aplicar a JUNÇÃO NATURAL entre R e S, deve haver pelo menos um atributo com o mesmo nome em R e em S:
- os atributos de mesmo nome são usados no predicado implícito de JUNÇÃO NATURAL;
- sejam R(A1, A2, ..., X1, ... An) e S(B1, B2, ..., X1, ... Bm), então o atributo de mesmo nome em R e S é X1;
- a expressão R * S irá aplicar o predicado implícito R.X1=S.X1 para a JUNÇÃO NATURAL.
Sobre as relações PRODUTO e CATEGORIA em "PRODUTO CARTESIANO Exemplo 1", considere as observações:
- Os esquemas dessas relações não possuem atributos com nomes comuns:
- em PRODUTO, há os atributos CodProduto, Descrição, Preço e Categ;
- em CATEGORIA, já os atributos CodCateg e Nome.
- Para aplicar a JUNÇÃO NATURAL entre PRODUTO e CATEGORIA é necessário:
- alterar o nome do atributo Categ em PRODUTO (alterar para CodCateg); ou
- alterar o nome do atributo CodCateg em CATEGORIA (alterar para Categ).
Ambas as sequências de expressões abaixo implementam a JUNÇÃO NATURAL entre PRODUTO e CATEGORIA:
∎ TEMP(CodProduto, Descrição, Preço, CodCateg) ← PRODUTO
∎ RESULT ← TEMP * CATEGORIA
OU
∎ RESULT ← ρ (CodProduto, Descrição, Preço, CodCateg) (PRODUTO) * CATEGORIA
A figura a seguir ilustra a distinção entre as operações JUNÇÃO e JUNÇÃO NATURAL.
+ Um banco de dados relacional tipicamente possui muitas tuplas.
- Fatos do mundo real estão decompostos em várias tuplas.
+ Cada tupla se associa com, pelo menos, uma outra tupla.
- A Operação JUNÇÃO combina tuplas relacionadas entre si.
Considere o esquema lógico do BD Simples:
∎ PRODUTO(CodProduto, Descrição, Preço, Categ), cuja chave primária (PK) é CodProduto;
∎ CATEGORIA(CodCateg, Nome), cuja chave primária (PK) é CodCateg;
∎ PRODUTO(Categ) REFERENCIA CATEGORIA(CodCateg).
Considere, também, o [conteúdo do] banco de dados na figura que ilustra PRODUTO CARTESIANO Exemplo 1:
∎ em CATEGORIA há 02 tuplas;
∎ em PRODUTO há 05 tuplas.
A seguinte sequência de expressões da álgebra relacional foi aplicada ao BD Simples:
∎ AUX1 ← π CodProduto, Descrição, Preço (PRODUTO)
∎ AUX2 ← π CodProduto, Descrição, Preço (PRODUTO)
∎ AUX3 ← π AUX1.Preço (AUX1 ⋈AUX1.Preço < AUX2.Preço AUX2)
∎ AUX4 ← π AUX2.Preço (AUX1 ⋈AUX1.Preço < AUX2.Preço AUX2)
∎ AUX5 ← π AUX1.Preço (AUX1 ⋈AUX1.Preço <= AUX2.Preço AUX2)
∎ AUX6 ← π AUX2.Preço (AUX1 ⋈AUX1.Preço <= AUX2.Preço AUX2)
Criar uma issue no projeto https://github.com/plinioleitao/bd-2021-1-bia, com o título "Tópico 10", para responder:
- Qual o conteúdo da relação AUX3 ?
- Qual o conteúdo da relação AUX4 ?
- Qual o conteúdo da relação AUX5 ?
- Qual o conteúdo da relação AUX6 ?
As respostas possíveis se referem aos preços dos produtos, podendo ser:
∎ Nenhum preço (conjunto vazio)
∎ Todos os preços
∎ Todos os preços, exceto o menor preço
∎ Todos os preços, exceto o maior preço
∎ Somente o menor preço
∎ Somente o maior preço
Responda segundo o modelo (apenas um modelo):
- AUX3: Nenhum preço (conjunto vazio)
- AUX4: Todos os preços
- AUX5: ...
- AUX6: ...
- Issue criada no projeto https://github.com/plinioleitao/bd-2021-1-bia, cujo título é "Tópico 10", para indicar suas reflexões iniciais sobre conceitos da álgebra relacional.