terça-feira, 23 de dezembro de 2008

DbDesigner Fork: Fraco, mas Gratuito!

Ferramentas para projeto de banco de dados estão entre as mais úteis para o desenvolvimento de sistemas. Infelizmente, também estão entre as mais difíceis de se encontrar dentre os softwares gratuitos. O DbDesigner Fork é uma boa opção livre para a modelagem de bancos de dados, apresentando suporte para Oracle, SQL Server, MySql e Firebird, além do PostgreSQL.

O projeto está disponível para Windows e Linux e sua última versão está datada de julho de 2007. Originou-se do DBDesigner, uma ferramenta mais antiga. Seu desenvolvimento apresenta alguma taxa de atividade e possivelmente será feito algum novo release em breve. Gera arquivos XML com a modelagem realizada em uma boa interface visual.

Apresenta uma série de recursos bastante úteis:
- Engenharia Reversa
- Sincronização
- Modelagem visual de diagramas de Entidade-Relacionamento, com integridade referencial
- Recursos para exportação SQL
- Importação da ferramenta ErWin
- Exportação dos diagramas como figuras (PNG e BMP)

DbDesigner e PostgreSQL

Nesta análise me concentrarei basicamente nas características específicas que o software tem em relação com o o PostgreSQL. A ferramenta apresentou um resultado razoável, pois foram constatados bugs e limitações. O ponto forte, além da gratuidade, foi a interface amigável, apesar de não tão moderna.

A conexão com o banco foi dificultada pelo fato da ferramenta só aceitar conexão ODBC com o PostgreSQL. Tive de baixar e instalar o driver ODBC, além de criar um data source no sistema operacional.


A interface visual é simples e a seleção da visualização em query mode permitiu a realização de consultas ao SGBD sem sair da ferramenta.


A engenharia reversa funcionou muito bem. Puxou os dados do PostgreSQL rapidamente e criou objetos no diagrama corrente. No entanto, não importou as chaves estrangeiras. Quando realizada mais de uma vez, criou mais de uma tabela com o mesmo nome no diagrama.


A sincronização de banco de dados simplesmente não funcionou. Fiquei em dúvida se a mensagem de erro apresentada foi em virtude de bug da ferramenta ou da versão do driver ODBC utilizada. Abaixo, a tela de sincronização:



Na exportação de dados, uma decepção: não há ligação direta para o PostgreSQL. O DbDesigner exporta um script SQL que deve ser submetido ao banco.

Avaliação geral

Creio que houve uma série de avanços em relação às versões anteriores da ferramenta, mas ainda está distante de ser utilizável sem ressalvas, especialmente nas grandes empresas. Abaixo listo algumas das limitações da ferramenta:

- Falta Suporte a trabalho em grupos.
- Ausência de Controle de versões.
- Grande espaçamento de tempo entre as atualizações de versão.
- Número grande de bugs e de requested features por atender.
- Falta de interface WEB

Observações

Aconselho a quem deseja utilizar esta ferramenta para suas aplicações que preserve o modelo gerado, que é criado em formato XML, em uma ferramenta de controle de versões. Em releases anteriores do DbDesigner cheguei a perder algumas horas de trabalho por corrupção do arquivo.

16 comentários:

Pedro disse...

Muito bom o seu post, mas eu estou com uma dúvida, de como fazer essa conexao com o postgree usando o odbc driver, não sei se seria pedir muito... mas seria possivel voce entrar em detalhes sobre a parte para conectar com o banco de dados postgres atraves do dbdesigner, incluindo a parte de instalação do driver odbc e criaçao da dsn?

cbleopoldino disse...

Oi, Pedro! Pretendo colocar um post sobre a configuração de ODBC. Algo simples, mas que espero que contemple sua dúvida.

Cesar disse...

O CA ERwin, um dos mais avançados e utilizados modeladores de entidade relacional, não possui suporte direto ao PostgreSQL, porém, seus recursos flexíveis geram, com pouquíssimas alterações, scripts prontos para o PostgreSQL.
Para que o ERwin gere o modelo físico compatível com o PostgreSQL, deve-se fazer o seguinte:
1. Pela ferramenta de Fonte de dados ODBC:
crie uma fonte de dados de usuário para o PostgreSQL 30, referenciando-se ao database em questão, previamente criado. Deve-se criar uma fonte para cada database:

2. No ERwin, especifique o database target como ODBC/Generic Version 3.0:

3. Crie os datatypes padrões do PostgreSQL. Primeiro defina os datatypes lógicos:
e depois o mapeamento do Logical to ODBC:
Salve essa definição com um nome significativo, por exemplo PostgreSQL_Datatype.dsm. Com esse arquivo separado, pode-se associá-lo a vários outros modelos ERwin.
4. Associe o arquivo de Datatype Padrões a cada modelo no menu Tools►Datatypes►Model Datatype Options:

5. Crie os domínios necessários no menu Model►Domain Dictionary, como por exemplo: UNIQUEID associado ao datatype SERIAL. Assim como outros domínios da organização associados aos respectivos datatypes do PostgreSQL. O ideal é que se crie esses dominíos e sejam salvos num arquivo template, para poder ser utilizado em outros modelos, sem ter que definí-los novamente.
6. O nome das tabelas (lado físico) deve ser minúsculo. Basta especificar no menu Tools►Names►Data Names Options, na aba Physical, especifique o Case para lower:

7. Uma vez o modelo físico pronto, pode-se gerar os scripts de SQL pelo menu Tools►Forward Engineer►Schema Generation. Na janela do Forward Enginner Schema Generation, faça as seguintes seleções de opções nos respectivos checkboxes:
• Schema->Nenhum
• Table->Table CHECK, CREATE TABLE
• Column->Column CHECK, Default Value
• Index->Create Index (Alternate Key, Foreign Key, Inversiont Entry)
• Referential Integrity->Primary Key(CREATE/PK), Foreign Key(ON DELETE, ON UPDATE), Statement Format(CREATE/FK)
• Other Options->Constraint Name

8. Salve essas opções selecionadas, clicando no botão Save As, selecionando no botão de opção o Selected model e atribuindo um nome a esse default, como por exemplo, Default Schema for PostgreSQL-ODBC:

9. Depois disso, clique no botão Preview, para visualizar o código do script sql:

10. Agora clique o botão Generate para aplicar o código do script sql no database. Se não foi feita nenhuma conexão com o database ainda, então irá aparecer a tela de conexão:
Nessa conexão, deve-se especificar além do User Name e Password, também o ODBC Data Source, que foi criado no ítem 1.

11. Uma vez feita a conexão com o database PostgreSQL, são aplicados os comandos sql contidos no script gerado, cujo resultado com sucesso ou com erros irão aparecer:

12. Pelo pgAdmin III, a console do PostgreSQL, pode-se agora visualizar as tabelas criadas no database previamente criado:

13. A questão dos Triggers que serão transformados em Funções de Gatilho, fica faltando, pois eles não são gerados de acordo com o padrão do PostgreSQL. Da mesma forma, as Stored Procedures também não são transformadas.



Curitiba, 22 de abril de 2009
Cesar Alpendre

Anônimo disse...

Ola bom dia! Queria tirar uma duvida que pode ate ser meio simples, mas vou postar assim mesmo, como faço pra puxar colunas entre tabelas de db´s diferentes? como declaro isso no SQL?

Abs,
Anderson!

cbleopoldino disse...

Anderson, para acessar outros bancos de dados você deve instalar componentes como o DB-LINK e o DBI-LINK, que fazem esta ponte.
Após a instalação, vc deve utilizar as APIs que são relatiovamente simples.

Anderson disse...

Olá Cláudio, boa noite! muito obrigado pela dica, aproveitando a postagem aqui, vc descobriu alguma coisa adicional referente as limitações da integração do PostgreSQL com o DbDesigner Fork?

Abs,
Anderson/SP!

Anderson disse...

Não querendo abusar, queria saber se alguem sabe se o PostgreSQL 8.4 esta tendo alguma restrição para conectar com o PHP 5.2.10, eu uso a função pg_connect para estabelecer conexão, na versão PostgreSQL 8.2 vai normal..já na 8.4 dá problema, o script que uso é este:

"//conexão com o PostgreSQL
$db = "postgres";
$usu = "postgres";
$pass = " ";
$host = "localhost";
$getStringConn = ("host=$host port=5432 dbname=$db user=$usu password=$pass");
$con = pg_connect($getStringConn) or die ("Nao Conectado");
"


Abs,
Anderson!

cbleopoldino disse...

Anderson, não utilizei mais esta ferramenta. Uso com frequencia editores de texto simples como o TEXTPAD. Alguém tem alguma infirmação adicional?

Anônimo disse...

Warm to you thanks for your help. [url=http://cgi2.ebay.fr/eBayISAPI.dll?ViewUserPage&userid=acheter_levitra_ici_1euro&achat-levitra]levitra[/url] I can not take part now in discussion - there is no free time. I will be free - I will necessarily write that I think.

Anônimo disse...

a href buy cialis a
order cialis on-line
buy cheap cialis generic
generic cialis uk
how to get cialis no prescription
discount cialis overnight delivery
online cialis sale
buy cialis online say wordpress buy cialis softtabs

Anônimo disse...

We are glad that our attendance Buy Viagra Discount Drugstore is joined of the first in the Internet, commonly, http://ipod-playlist.com/viagra.html get Viagra now specializing on online drugstore Viagra.

Anônimo disse...

hi, how are you? synthroid online [url=http://dotnet.org.za/members/cheap-synthroid-online.aspx]cheap synthroid[/url] http://dotnet.org.za/members/cheap-synthroid-online.aspx online

Anônimo disse...

...please where can I buy a unicorn?

Anônimo disse...

Olá Claudio, boa noite! Eu utilizo o PostGreSQL para rodar as minhas aplicações PHP, recentemente montei uma aplicação e tive que montar algumas triggers para validar o preenchimento antes de ser rodado update no banco de dados, a minha dúvida é quanto a maneira de declarar a function via pg_PLSQL, sei que o argumento new é do tipo record...mas a minha dúvida é como ele pega os valores das variaveis...eu tenho a variavel ID, só que via PHP ela é passada por sessão, quando declaro desta forma dentro da function que será usada pelo trigger criado:

"delete from tb_cidades where id = new.id;" , funciona bem...só queria entender como o PostgreSQL pega o id, mesmo ele sendo passado desta forma no pg_query: '$_SESSION[ID]'

Abs,
Anderson!

sildenafil viagra disse...

Really great post, Thank you for sharing This knowledge.Excellently written article, if only all bloggers offered the same level of content as you, the internet would be a much better place. Please keep it up!

Anônimo disse...

Eu gosto de usar com PostgreSQL - ferramenta gratuita Valentina Estúdio, faz tudo o que eu preciso, e faz isso muito bem http://www.valentina-db.com/en/valentina-studio-overview