Ir para o conteúdo

Cacic - Configurador Automático e Coletor de Informações Computacionais

 Voltar a Cacic Desenv...
Tela cheia

Estrutura de Unidades Organizacionais

4 de Abril de 2013, 15:34 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 64 vezes

Boa tarde, Senhores,

Analisando a modelagem da estrutura do banco de dados referente a Unidades Organizacionais, imaginei o seguinte:

Como está hoje:

- Há 3 tabelas: Nível1, Nível1a e Nível2. As tabelas Nível1 e b são idênticas, exceto pelo fato desta conter chaves para as tabelas local e Nível1. A tabela Nível1a é basicamente uma "divisora" de unidades de Nível2, dentro do Nível1.

- A tabela patrimônio possui chaves obrigatórias para as tabelas de Nível1 e 1a, e uma chave opcional para a tabela de Nível2

Como imaginei:

- Haverá apenas uma tabela, chamada uorg (unidades organizacional), auto-referenciada; dessa forma poderão existir "n" níveis.

- Haverá uma tabela, chamada tipo_uorg (tipo de unidade organizacional), em que os tipos de unidade organizacional serão definidos - Entidades, Linhas de negócio, Órgãos, Coordenação, Diretoria, etc.

Dúvida:

- Seria melhor deixar a tipificação da unidade organizacional livre, ou pré-definir uma hierarquia, como é feito hoje ( Entidade -> Linha de Negócio -> Órgão)? Deixar livre significaria ter qualquer combinação hierárquica possível.

Peço-lhes que enviem suas opiniões, críticas e idéias, e desde já agradeço a ajuda.

Um abraço. 

Autor: Ecio Virgilio Silva


33 comentários

  • 12cf2da8b1a1753868c7e20816b7dab5?only path=false&size=50&d=404Eduardo Santos(usuário não autenticado)
    4 de Abril de 2013, 16:34

     

    Écio,

    A sua proposta é boa e envolve uma análise mais aprofundada de consultas hierárquicas no modelo relacional. Para a modelagem eu proporia algo próximo da modelagem pai-filho, que seria mais ou menos assim:

    uorg_id     | nome                       | parent_id 

    1           | Ministério do Planejamento |

    2           | SLTI                       | 1

    3           | Coordenação de Inovações   | 2

    O problema aparece quando eu quiser, por exemplo, descobrir quais são todas as unidades organizacionais que pertencem ao Ministério do Planejamento. A consulta básica envolveria percorrer recursivamente a coluna parent_id, agrupando todos aqueles que possuem o mesmo número. Contudo, essa consulta ficaria bastante lenta e teria problemas.

    Dê uma olhada nesse artigo: http://en.wikipedia.org/wiki/Hierarchical_query

    No OpenACS encontramos uma solução criando uma chave binária que serve somente para ordenar os elementos que pertencem ao mesmo contexto, mas funciona somente no PostgreSQL. Dê uma olhada aqui: http://www.openacs.org/rubick/tree_sortkey

    No Oracle existe uma fórmula simples para resolver esse problema utilizando a cláusula CONNECT BY: http://www.devmedia.com.br/uso-do-connect-by-no-oracle/23647

    Nas novas versões do PostgreSQL é possível utilizar CTE (Common Table Expressions): http://wiki.postgresql.org/wiki/CTEReadme

    No MySQL, o mais comum é a utilização de Nested Sets, ou conjuntos aninhados: http://www.fliquidstudios.com/2008/12/23/nested-set-in-mysql/

    A abordagem do MySQL parece ser a mais simples, mas é conceitualmente um gato. A do PostgreSQL funciona da forma que coloquei, mas a consulta é complicada. O Oracle, como bem sabemos, não é uma opção. 

    • 337c1a277f7a32fe2ada68a17c0f435f?only path=false&size=50&d=404Ecio Virgilio Silva(usuário não autenticado)
      4 de Abril de 2013, 23:08

       

      Eduardo,

      A nova versão do CACIC faz uso da Doctrine ORM, o que nos permite abstrair o tratamento dado em cada SGBD.

      As pergunta, enão, são as seguintes:

      1. O Doctrine tem suporte a este recurso (ou seja, trata internamente as queries hierárquicas - conjuntos aninhados)?

      2. Caso não tenha suporte, fica inviabilizada a implementação da estrutura de unidades organizacionais em N níveis?

      Vou pesquisar a respeito, e posto o que encontrar por aqui!

      Obrigado. 

      • 12cf2da8b1a1753868c7e20816b7dab5?only path=false&size=50&d=404Eduardo Santos(usuário não autenticado)
        5 de Abril de 2013, 15:29

         

        Grande Écio,

        Seguem comentários: 

        1. O Doctrine tem suporte a este recurso (ou seja, trata internamente as queries hierárquicas - conjuntos aninhados)?

        O doctrine vai tratar a parte de definição do dado numa estrutura pai-filho. A princípio, seria um relacionamento ManyToOne onde a chave estrangeira aponta para essa mesma tabela. Temos que testar e ver se vai funcionar adequadaamente.

        Contudo, certamente a parte de consulta terá que sere xecutada manualmente e epdenderá do banco de dados. A única forma de evitar isso é utilizar a estrutura de Nested Sets que citei acima para o MySQL. contudo, está conceitualmente errada, ou seja, é um gato.

        2. Caso não tenha suporte, fica inviabilizada a implementação da estrutura de unidades organizacionais em N níveis?

        Mesmo que o Doctrine não tenha suporte, por se tratar de uma alteração específica podemos inserir manualmente no banco de dados através de scripts SQL. Isso é válido porque o Doctrine  implementa somente 80% do modelo relacional, e podemos estar dentro dos outros 20%. Se estivermos, não podemos limitar o Cacic pelo ORM, e vale a pena intervir manualmente se for pra ter o modelo mais correto.

        Dê uma lida aí e volte ao fórum se tiver outras dúvidas.

CONVITE EVENTO: Comemoração 10 anos da comunidade CACIC

18 de Junho de 2015, 16:52, por Desconhecido

No dia 24 de junho de 2014 às 15:00 horas, próxima quarta-feira, o CISL-Comitê Técnico de Implementação do Software Livre no Governo Federal vai organizar o evento de comemoração de 10 anos da comunidade CACIC, que alcançou no mês de junho mais de 40 mil pessoas interessadas na comunidade. Durante o evento será apresentado o estágio atual da solução e serão debatidas as demandas para as futuras versões. A atual versão é resultado do apoio no desenvolvimento dado pela Dataprev, Ministério do Planejamento, Procuradoria Geral da Fazenda e membros da comunidade.



AJUDA (Executando comandos do Symfony)

23 de Abril de 2015, 14:32, por Desconhecido

Na parte de eu usar comando "php composer.phar install"



Suporte

19 de Fevereiro de 2015, 14:11, por Desconhecido

Autor: Anderson Porto



Em construção

8 de Dezembro de 2014, 9:07, por Marisa Souza dos Santos

Em construção.



COCAR vai se integrar ao CACIC

22 de Novembro de 2013, 13:53, por Desconhecido

O COCAR passa por um processo de reformulação completa para ser integrado ao Sistema de Inventário CACIC, bem como às mais recentes tecnologias e padrões de desenvolvimento em Software Livre.