Construindo uma Árvore com apenas um comando SQL – ORACLE

Caríssimos, quanto tempo hein!

Estou todo enrolado me preparando para a viajem da minha vida! Passei no mestrado em Pernambuco (UFPE) e irei cursá-lo para felicidade geral da nação, pelo menos lá em casa!

Hoje, ainda no trabalho me deparei com o desafio de criar uma forma de produzir uma hierarquia com um certo Objeto (Enfim um post de JAVA!). Situação era:

O Modelo Casa tinha 2 Vizinhos, cada vizinho tinha mais dois outros vizinhos que não era a primeira casa, e assim sucessivamente. No banco de dados eu tinha uma tabela assim:

create table hierarquia (

casa_pai_codg number(5,0);

casa_filho_codg number(5,0);

tipo_vizinho char(1 BYTE)

);

Assim, no meu pequeno entendimento eu pensei:

Uma casa tem um pai, esse pai é vizinho da casa filho ou pela esquerda ou pela direita.

Baseado nisso, corri nos foruns americanos que discutem sobre o Oracle, o nosso banco em questão. Depois de muito fuçar achei uma operação relativamente simples que constrói uma árvore a partir de um nó.


--Executei essa query na tabela que mostrei anteriormente
select
casa_pai_codg as pai,
casa_filho_codg as filho,
level as nivelHierarquivo
from hierarquia
start with casa_pai_codg = 1 connect by prior casa_filho_codg = casa_pai_codg
order by level

Tal função retorna um pool de registros indicando pai e filhos a partir de um pai conhecido (no nosso caso o pai número 1) e ordena pelo LEVEL que ele ocupa na nossa árvore. Não necessariamente a árvore precisa ser binária.

Testes ainda a serem feitos:

Quando os relacionamentos formam um GRAFO.

Enjoy!

Banco de Dados em Mangá

Aproveitando a deixa do post anterior, gostaria de mostrar um trabalho de tradução interessante do pessoal da Novatec Editora, é nada mais do que um mangá que ensina como lhe dar com SQL e Banco de Dados, li e curti o trabalho, é algo bem inicial mas que pode ajudar, e muito, os aventureiros nas bases de dados.

No Guia Mangá de Bancos de Dados acompanhamos Tica ensinando Ruruna e Cain a criar um banco de dados para gerenciar as vendas, mercadorias e exportações de seu reino (:D) e aprende como os bancos de dados funcionam e o significado de termos como esquemas, chaves, normalização e transações.

EOperações de extração de dados usando noções de conjuntos e algebra relacional também são mostrados além de ensinar a controlar permissões de usuários e utilizar bloqueios para evitar conflitos e duplicidade de dados.

Pode baixar o release aqui.

Experiência, coisa que não se compra… Postgres…

Bonan Tagon!

Hoje ao retomar meus trabalhos caseiros me deparei com um erro. A aplicação, feita em Java com banco Postgres iniciava porém ao efetuar o login na mesma não mostrava as opções, as permissões nada, como se não tivesse carregado os dados…

Carregando os dados…

Carregando os dados…

Fui jantar…

Carregando os dados…

Carregando os dados…

Quando eu volto eu vi que era coisa de Banco de Dados, fui atrás do Postgres, simplesmente o treco não tinha iniciado ^^. Daew eu fui inicia-lo:

/etc/init.d/postgres-8.4 start

Resultado:

pg_ctl: invalid data in PID file “/opt/PostgreSQL/8.4/data/postmaster.pid”
PostgreSQL 8.4 did not start in a timely fashion, please see /opt/PostgreSQL/8.4/data/pg_log/startup.log for details

Abri o arquivo startup.log e no arquivo não tinha nada! Pesquisando os fóruns americanos vi que algum arquivo se corrompeu e por isso o Postgres não iniciava, penso: lá vou eu instalar esse treco de novo, perdi os dados, eu odeio computação…

Lendo mais um pouco vi que eu poderia deletar o arquivo postmaster.pid que poderia resolver.

# rm /opt/PostgresSQL/8.4/data/postmaster.pid

# /etc/init.d/postgres-8.4 start

Pronto, SGBD rodando, e essa é mais uma besteirinha que me economizou 2h de removes e installs

Enjoy!