Professional Documents
Culture Documents
Produto Cartesiano em SQL-iesb
Produto Cartesiano em SQL-iesb
BANCO DE DADOS
Introdução
Vivemos em uma sociedade cada dia mais orientada a dados, e aqueles
indivíduos ou empresas que conseguirem extrair informação desses
dados poderão exercer suas atividades de maneira mais eficaz, o que
pode ampliar suas capacidades para tomadas de decisão mais assertivas.
Por conseguinte, há uma grande demanda por sistemas que permitem
o armazenamento e a recuperação desses dados. Atendendo a esse
propósito, existem muitas soluções para sistemas de gerenciamento de
banco de dados (SGBD), que possibilitam a realização de consultas por
meio da linguagem padrão SQL (Structured Query Language). E, uma
vez que os conceitos da álgebra relacional fazem parte dos fundamentos
da SQL e de como os SGBD comerciais processarão as consultas que
desenvolvemos, torna-se imprescindível entendermos o funcionamento
das operações da álgebra relacional.
Neste capítulo, você conhecerá a operação de produto cartesiano
em álgebra relacional, conseguirá identificar a operação de produto car-
tesiano em bancos de dados relacionais por meio de diversos exemplos
conceituais e, por fim, compreenderá como implementar essa operação
em SQL no SGBD PostgreSQL.
2 Produto cartesiano em SQL
Suponha que seja necessário realizar uma consulta que apresente todas
as informações combinadas para Funcionários e Departamentos.
A formalização dessa operação de produto cartesiano poderá será representada
pela expressão:
Funcionários × Departamentos
Por conseguinte, o retorno dessa operação será uma nova relação, que iden-
tificaremos como Func_Depto e que terá a seguinte estrutura e elementos:
Figura 1. Representação visual para a operação produto cartesiano utilizando como exem-
plos as relações (entrada) Funcionários e Departamentos e a nova relação (saída)
Func_Depto.
1001 Estatís- 101 2020/1 10001 João Gus- 1990- Jg_rico@ 0 1002
tica I tavo Rico 04-12 mail.com
1001 Estatís- 101 2020/1 10002 Luís Tadeu 1999- tadeum@ 1 1001
tica I Marciano 08-26 mail.com
1001 Estatís- 101 2020/1 10003 Otávio Nu- 1998- o_nunes@ 1 1002
tica I nes Santos 05-05 mail.com
1002 Cálculo 102 2020/1 10001 João Gus- 1990- Jg_rico@ 0 1002
Básico tavo Rico 04-12 mail.com
1002 Cálculo 102 2020/1 10002 Luís Tadeu 1999- tadeum@ 1 1001
Básico Marciano 08-26 mail.com
(Continua)
Produto cartesiano em SQL
7
8
(Continuação)
Quadro 4. Tabela para representação da nova relação disc_alun, resultante da operação produto cartesiano disciplinas × alunos
1002 Cálculo 102 2020/1 10003 Otávio Nu- 1998- o_nunes@ 1 1002
Básico nes Santos 05-05 mail.com
1003 Cálculo 102 2020/2 10001 João Gus- 1990- Jg_rico@ 0 1002
Avan- tavo Rico 04-12 mail.com
çado
1003 Cálculo 102 2020/2 10002 Luís Tadeu 1999- tadeum@ 1 1001
Avan- Marciano 08-26 mail.com
çado
1003 Cálculo 102 2020/2 10003 Otávio Nu- 1998- o_nunes@ 1 1002
Avan- nes Santos 05-05 mail.com
çado
(Continua)
(Continuação)
Quadro 4. Tabela para representação da nova relação disc_alun, resultante da operação produto cartesiano disciplinas × alunos
NOME
NOME
EMAIL
TITULO
PERIODO
SIT_MATR
ID_ALUNO
DESC_DISC
DATA_NASC
ID_DISCIPLINA
ID_DISCIPLINA
ID_PROFESSOR
ID_PROFESSOR
DEPARTAMENTO
1001 Estatística 101 2020/1 10004 Marta 1992- m.azevedo@ 1 1003 101 Jose Mestrado Estatística
I Azevedo 06-10 mail.com Borges
1002 Cálculo 102 2020/1 10004 Marta 1992- m.azevedo@ 1 1003 101 Jose Mestrado Estatística
Básico Azevedo 06-10 mail.com Borges
1003 Cálculo 102 2020/2 10004 Marta 1992- m.azevedo@ 1 1003 101 Jose Mestrado Estatística
Avançado Azevedo 06-10 mail.com Borges
1001 Estatística 101 2020/1 10004 Marta 1992- m.azevedo@ 1 1003 102 Mariana Doutorado Matemática
I Azevedo 06-10 mail.com Tedesco
1002 Cálculo 102 2020/1 10004 Marta 1992- m.azevedo@ 1 1003 102 Mariana Doutorado Matemática
Básico Azevedo 06-10 mail.com Tedesco
1003 Cálculo 102 2020/2 10004 Marta 1992- m.azevedo@ 1 1003 102 Mariana Doutorado Matemática
Avançado Azevedo 06-10 mail.com Tedesco
Produto cartesiano em SQL
11
12 Produto cartesiano em SQL
Figura 3. Exemplo de problema a ser atendido com a operação produto cartesiano, ex-
pressão para álgebra relacional e esta convertida para SQL.
Note ainda que, para esse exemplo funcionar, precisamos antes termos
criado as tabelas alunos, disciplinas e professores. Depois disso,
podemos inserir alguns registros de exemplo em cada uma delas, que seguirão
a mesma estrutura de dados e tuplas apresentada anteriormente. Para imple-
mentação SQL, você pode considerar os seguintes comandos DDL (Data
Definition Language) para criação dessas tabelas no banco de dados.
Figura 4. Exemplo das tabelas com registros de alunos, disciplinas e professores que foram
implementadas no SGBD PostgreSQL.
Porém, note que há colunas que repetem suas descrições nas tabelas, como
nome para tabela professores e alunos. Então, se executarmos essa
nova consulta, qual informação será recuperada?
Nenhuma, pois ela retornará um erro indicando que há colunas com refe-
rências ambíguas. Para evitarmos esse tipo de conflito, na cláusula SELECT
devemos adicionar a tabela de interesse antes da coluna, unindo a tabela e a
coluna com um ponto, dentro de uma estratégia chamada de qualificador de
nome, cuja implementação é bem simples, como no exemplo a seguir:
Então, outra alternativa corresponde a adicionar uma condição que faça uma
ligação entre os registros das tabelas envolvidas (veja o exemplo da Figura 9b,
linha 3 no Query Editor). Imagine ainda que só pudesse buscar as informações
com base no nome da disciplina, ou seja, sem saber o código correspondente,
como você o faria? Isso porque, na nossa tabela alunos, apenas aparece
o código da disciplina, e não a sua descrição. Você verá de maneira mais
aprofundada o conceito de junção em outros capítulos desta disciplina. Para
concluirmos o caso trabalhado aqui, na Figura 9 são apresentadas diferentes
construções e resultados para exemplificação do que discutimos até agora.
Para a consulta (c), informamos duas condições: (1) que o aluno precisa
estar matriculado e (2) que o aluno precisa ter uma disciplina de código cor-
respondente a Cálculo Básico. Considerando essas duas condições,
encontramos o aluno Otávio Nunes Santos na tabela alunos, mas,
como não temos outra condição específica em relação à tabela disciplina,
ou algo que faça uma ligação entre os registros dessas tabelas, realiza-se a
operação produto cartesiano e produzem-se combinações para esse aluno com
todas as disciplinas disponíveis (Estatística I, Cálculo Básico e
Cálculo Avançado). Já na consulta (d), nossa questão não é atendida, pois
foram retornados todos os alunos matriculados, e não apenas os da disciplina
Cálculo Básico.
Elmasri e Navathe (2011) chamam a atenção para o fato de que a operação produto
cartesiano deve ser utilizada com cautela, visto que geraremos todas as combinações de
tuplas possíveis. E, como essa operação pode representar um custo de processamento
adicional ao SGBD, devemos avaliar sua real necessidade.
Portanto, quando possível, indica-se a combinação de outras operações da álgebra
relacional, como a projeção, a seleção e, especialmente, a junção. Assim, desenvolve-
remos consultas mais eficazes e que retornem as informações realmente necessárias.
DATE, J. The new relational database dictionary. [S. l.]: O’Reilly, 2016.
ELMASRI R.; NAVATHE, S. Sistemas de banco de dados. 6. ed. São Paulo: Pearson, 2011.
RAMARKRISHNAM, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed.
Porto Alegre: AMGH, 2011.
Leituras recomendadas
MACHADO, F. N. R. Banco de dados: projeto e implementação. 3. ed. São Paulo: Érica, 2009.
MANNINO, M. V. Projeto, desenvolvimento de aplicações e administração de banco de
dados. 3.ed. Porto Alegre: AMGH, 2008.