1
resposta

[Dúvida] Sobre a operação de Projeção em Álgebra Relacional

Tem um ponto que não ficou claro nas aulas em relação a operação de "projeção"; Eu estranhei que quando a professora removeu da projeção a coluna Vendas.id_pedido, houve uma diminuição de 25 linhas para apenas 4 linhas. Na minha cabeça, a projeção fazia apenas a operação de filtrar por coluna. Então recorri ao chatGPT pra confirmar se estava sendo feita também uma operação que usamos em SQL chamada "distinct" e ele confirmou que sim. Ou seja, além de filtrar as colunas, a "projeção" também remove as tuplas duplicadas. Então, caso esteja certo esse raciocínio, favor, se possível deixar um pouco mais claro nas aulas, caso contrário, se o aluno não tiver experiência ficará sem entender o que aconteceu, o que dificultará o aprendizado para os exemplos subsequentes.

Segue a consulta:

π id_vendedor_vendas, id_vendedor, nome (Vendas ⨝ id_vendedor_vendas = id_vendedor Vendedores )

1 resposta

Oii Paulo, como vai?

Vamos ver se entendi bem sua dúvida. Você estranhou que, ao retirar a coluna id_pedido da projeção, os resultados alteraram de 25 para 4 linhas. A consulta que você está falando é a seguinte:

π id_vendedor_vendas, id_vendedor, nome(Vendas ⨝ id_vendedor = id_vendedor_vendas Vendedores)

Nesse caso, temos que considerar a interação entre a projeçaõ e a junção. Não é a projeção sozinha que elimina (ou cria) linhas, mas sim a combinação entre os dois comandos utilizados.

A junção une duas tabelas com base em uma condição (nesse caso, o id_vendedor). Durante a junção das tabelas podem ser geradas tuplas com alguns dados duplicados. Se um vendedor realizou vários pedidos, isso será mostrado no momento da projeção caso o id_pedido esteja presente.

Porém, se não solicitarmos o id_pedido, a projeção agora apresenta apenas id_vendedor_vendas, id_vendedor e nome. Como a junção pode gerar linhas duplicadas com base em id_vendedor e id_vendedor_vendas, a projeção as agrupa, resultando em um menor número de linhas.

Complementando: a projeção e o select distinct funcionam de maneiras levemente diferentes - enquanto a projeção seleciona valores em uma coluna específica com base em uma operação anterior, o select distinct seleciona apenas as linhas únicas de uma tabela.

Espero ter ajudado, Paulo!

Abraços.