DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da SQL Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!

Artigo SQL Magazine 52 - Menus dinâmicos a partir de funções em PostgreSQL 8

Artigo da Revista SQL Magazine edição 52.

Esse artigo faz parte da revista SQL Magazine edição 52. Clique aqui para ler todos os artigos desta edição

PostgreSQL

Menus dinâmicos a partir de funções em PostgreSQL 8

 

 

Uma das mais importantes classes de estruturas de dados em computação são as árvores. Uma árvore é uma estrutura de dados que se caracteriza por uma relação de hierarquia entre os elementos que a compõem. Aproveitando-se desta estrutura, este artigo mostrará a criação de alguns exemplos de menus dinâmicos, montados a partir do resultado de uma consulta SQL. Esta consulta listará os registros obedecendo à hierarquia baseada na relação pai-filho.

Através da implementação de uma função recursiva no PostgreSQL 8 é possível retornar esta estrutura de registros de forma rápida e organizada, tendo em vista que este banco, ainda, não possui em seu código nativo nenhuma solução pronta. O banco de dados Oracle, por exemplo, possui as cláusulas START WITH e CONNECT BY que facilitam o processo de criação de consultas hierárquicas.

Assim, convido-os a compreender a implementação desta função hierárquica e de outras funções que formatarão estes registros para serem utilizados como parâmetro em componentes que criam menus. Mãos à obra!

Árvores

Uma árvore é constituída de elementos chamados nó (node), interligados com outros elementos que estão em níveis diferentes. O nível é a distância que um nó está até chegar ao topo da árvore (nó raiz).

Cada nó possui uma ligação com outro nó de nível superior (nó-pai), com exceção do nó que está no topo, chamado de root ou nó raiz. Os elementos que estão ligados ao mesmo nó-pai são nomeados irmãos (siblings). Já os nós que não possuem nós-filhos, isto é, não estão ligados com outros nós de nível inferior, são chamados de folhas (leaf). 

As árvores dividem-se em dois grupos, como mostra a Figura 1. No grupo de árvores binárias, os nós da árvore podem conter no máximo dois nós-filhos. Já no grupo de árvores genéricas, o número de nós-filhos torna-se ilimitado, sendo este o grupo que mais se enquadra em uma estrutura de menus.

 

Figura 1. Exemplos de grupos de árvores

Iniciando a construção do menu

  Para uma melhor compreensão sobre como proceder para a criação de uma estrutura para geração de menus, montei um escopo das etapas necessárias, conforme Figura 2, mostrando a ordem de criação e a forma como cada etapa interage com a outra.

  A primeira e a segunda etapa consiste na criação da tabela e na inserção de alguns registros que são os itens do menu. Na terceira etapa, definiremos o tipo de dado “tpmenu” para ser utilizado no retorno da função hierárquica “fnc_monta_menu”. Logo em seguida, implementaremos esta função que servirá de base para as funções de formatação vistas na quinta etapa.

A etapa 6 indica que uma linguagem de programação executará as funções de formatação, enviando o resultado produzido para um componente de menu. A última etapa mostrará na tela o respectivo menu.

A Listagem 1 mostra o script das etapas 1 e 2. A tabela possui um auto-relacionamento evidenciado pela coluna IDMENUPAI na linha 6, que está referenciando um outro registro da mesma tabela. Coloquei um número razoável de registros para que possamos visualizar de forma clara o resultado. O primeiro registro será o topo da árvore, identificado por não possuir nenhum registro pai e, portanto, não será mostrado no menu.  A Figura 3 mostra a tabela com os dados inseridos.

 

Figura 2. Etapas para construção do menu

 

 

Listagem 1. Definição do esquema e da tabela

1        CREATE SCHEMA artigo;

2       

3        CREATE TABLE artigo.TBMENU

4        (

5                 IDMENU         SERIAL      NOT NULL,   -- CHAVE PRIMÁRIA

6                 IDMENUPAI    INT4,                       -- CHAVE ESTRANGEIRA

7                 MENU           VARCHAR(50) NOT NULL,   -- NOME DO ITEM DO MENU

8                 href            VARCHAR(50),            -- ARQUIVO DE CHAMADA

9                 ORDEM          INT2        NOT NULL,   -- ORDEM DOS ITENS DE MESMO PAI

10                PRIMARY KEY(IDMENU),

11                FOREIGN KEY(IDMENUPAI) REFERENCES artigo.TBMENU(IDMENU),

12                CHECK  (IDMENUPAI <> IDMENU),              -- UM ITEM FILHO NÃO PODE SER PAI

                                                                               DE SI MESMO"

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da SQL Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Anderson Antunes Oliveira
É formado no curso de Web Design e Programação e cursando Multimídia Digital pela UNISUL/SC. Possui curso Técnico em Contabilidade pelo colégio Getúlio Vargas, Técnico em Sistemas para Web pelo Colégio Técnico Industrial (CTI/RS). Inscrito no curso de Pós-Graduação em Implantação e Gestão de Projeto...
O que você achou deste post?

    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03