super_banner_728x90

quarta-feira, 22 de julho de 2009

Conjuntos e Bancos de Dados - parte 1


Um outro assunto que precisamos estudar bem quando queremos ser bons cientistas da Computação é a Teoria dos Conjuntos. Ela é dada logo no início do curso, justamente por ser a base para um monte de coisas que vem depois. Hoje vamos falar da ligação direta desse assunto com Bancos de Dados.

Conjuntos são grupos de coisas quaisquer (porém especificadas), que são chamadas de elementos. Podemos ter conjuntos de carros, conjuntos de pessoas, conjuntos de números pares, conjuntos de números maiores que 10, etc. Podemos representá-los com gráficos, diagramas, expressões matemáticas, e por aí vai.

Operações sobre conjuntos
Quando começamos a brincar com conjuntos, aprendemos algumas operações que tornam seu uso mais interessante. Entender bem essas simples operações nos faz compreender mais facilmente algumas operações em bancos de dados.

1. União: determinada pela junção dos elementos de dois ou mais conjuntos.
2. Diferença: determinada pelos conjunto de elementos pertencentes num conjunto e que não pertencem a outro(s).
3. Interseção: determinada pelo conjunto de elementos pertencentes a dois ou mais conjuntos simultaneamente.
Ex:
A = {1, 2, 4, 5}
B = {1, 5, 7, 10}
C = {2, 4, 6}
A ∪ B = {1, 2, 4, 5, 7, 10}
A ∪ C = {1, 2, 4, 5, 6, 7, 10}
A - B = {2, 4}
B - C = {1, 5, 7, 10}
A ∩ C = {2, 4}
B ∩ C = ∅

Suponha que tenhamos uma tabela do tipo Pessoa (com cpf, nome e idade) e que tenhamos os seguintes registros:
('015.176.998-06', 'Carlos Aguiar', 25)
('772.993.456-08', 'João Henrique', 22)
('598.451.230-77', 'Patrícia Silva', 25)
('574.889.775-98', 'Pedro Souza', 29)
('100.874.985.-12', 'Maria Fernandes', 19)

Em Álgebra Relacional (depois iremos estudar esse assunto mais detalhadamente), que é uma base para linguagens para consulta de bancos de dados, essas 3 operações acima são definidas da mesma forma. Há também nessa álgebra duas operações importantes chamadas seleção (σ), que define uma condição que os elementos devem satisfazer, e projeção (π), que define um conjunto de atributos a serem escolhidos.

Os símbolos que representam essas operações ficam fáceis de assimilar se relacionarmos a primeira letra do símbolo com a primeira letra da operação. Enquanto seleção e sigma (σ) começam com "s", projeção e pi (π) começam com "p".

Sejam então as seguintes condições (σ):
A: idade = 25
B: nome = 'Carlos Aguiar'
C: cpf = '598.451.230-77'

Logo,
σA(Pessoa) = {('015.176.998-06', 'Carlos Aguiar', 25), ('598.451.230-77', 'Patrícia Silva', 25)};
σB(Pessoa) = {('015.176.998-06', 'Carlos Aguiar', 25)};
σC(Pessoa) = {('598.451.230-77', 'Patrícia Silva', 25)}.

* Obs: a projeção tornaria possível recuperarmos apenas uma parte (alguns campos) dos registros, como só o nome, ou só o nome e a idade, só o cpf e o nome, etc.

Que registros então seriam retornados nas seguintes operações?
1. A união de σA(Pessoa) e σC(Pessoa)
2. A diferença entre σA(Pessoa) e σB(Pessoa)
3. A interseção de σA(Pessoa) e σB(Pessoa)
4. A interseção de σB(Pessoa) e σC(Pessoa)

E se definíssemos uma condição D: idade > 20, qual seriam os registros retornados na diferença entre σB(Pessoa) e σD(Pessoa)?

Você saberia criar essas 4 operações em SQL? Na parte 2 veremos todas essas respostas.

Até lá!