Skip to content

Latest commit

 

History

History
154 lines (123 loc) · 9.35 KB

topico-10.md

File metadata and controls

154 lines (123 loc) · 9.35 KB

[Tópico T10] - Álgebra Relacional - Produto Cartesiano e Junção

by Prof. Plinio Sa Leitao-Junior (INF/UFG)

Operação PRODUTO CARTESIANO (CARTESIAN PRODUCT) ou PRODUTO CRUZADO (CROSS PRODUCT)

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.

PRODUTO CARTESIANO Exemplo 1:

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.

Operação JUNÇÃO (JOIN)

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)

JUNÇÃO Exemplo 1:

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.

JUNÇÃO THETA (THETA JOIN)

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).

EQUIJUNÇÃO (EQUIJOIN)

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

Operação JUNÇÃO NATURAL (NATURAL JOIN)

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.

JUNÇÃO Exemplo 2

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.

Em síntese

+ 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.

Atividade (data limite: 29/08/2021 23h59min59s)

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:

  1. Qual o conteúdo da relação AUX3 ?
  2. Qual o conteúdo da relação AUX4 ?
  3. Qual o conteúdo da relação AUX5 ?
  4. 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):

  1. AUX3: Nenhum preço (conjunto vazio)
  2. AUX4: Todos os preços
  3. AUX5: ...
  4. AUX6: ...

Artefatos

  1. 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.