Arquivo da categoria ‘Bancos de Dados’

Caro leitor, se você programa em .NET utilizando o Microsoft Visual Studio ou é um fução como eu, se aventurando nesta tecnologia e utiliza o software para desenvolver aplicativos que interajam com Bancos de Dados Relacionais, provavelmente já deve ter ouvido falar ou lido sobre a tecnologia LINQ, criada pela Microsoft para facilitar a nossa vida.

Para quem é iniciante ainda, você pode usar a LINQ praticamente em qualquer coleção de objetos .NET, mas o melhor uso que você pode fazer dele é, sem dúvida, na criação de queries contra SGBDs. Nada de SQL. Mas, toda esta facilidade tem uma desvantagem: a LINQ foi concebida inicialmente para o SQL Server e Access, ambos SGBDs da Microsoft. Portanto, em tese, nada de utilizá-la com PostgreSQL, Oracle, MySQL e outros.

Se você está utilizando o Visual Studio 2008 e assistiu à apresentação sobre a LINQ direto do site da MSDN, ficou eufórico mas depois caiu em tristeza ao saber da notícia no parágrafo acima, ainda tem uma chance de recuperar sua auto-estima:

Um grupo de desenvolvedores está trabalhando num projeto chamado DbLinq Project que disponibiliza a LINQ para os SGBDs Oracle, PostgreSQL, MySQL e recentemente SqlLite. Os Providers estão sendo distribuídos sob a licença MIT, ou LGPL, para ser compatível com o Projeto Mono (em Linux!).

Mas não se entusiasme tanto: como a iniciativa não partiu de dentro da Microsoft, que detém o know-how da linguagem, você poderá enfrentar alguns probleminhas ao utilizar os Providers do DbLinq Project. Para exemplificar, cito alguns:

♦ Queries complexas não funcionam bem;
♦ Suporte a Oracle ainda é deficiente;
♦ Suporte parcial a Stored Procedures e Funções em PostgreSQL e MySQL;
♦ Não há suporte a Sub-Queries e Linq-to-Entities ainda

Mas, quem trabalha com SQL sabe o quão irritante é escrever queries gigantescas para obter algumas linhas de dados. Então, creio que não custa efetuar testes com os Providers citados e se funcionarem relativamente bem, substituir algumas queries SQL por queries LINQ.

Um conselho deixo para os mais afoitos: Teste muito bem seu aplicativo antes de disponibilizar a versão final. Você pode economizar alguns blisteres de Aspirina. 😛

“Saída pela direita!” — Dizia o Leão-da-Montanha, aquele personagem de desenho animado que tanto alegrou as manhãs da garotada no final dos anos 80.

Mas este post não é sobre saudosismo, e sim um desabafo.

Caro leitor(a), pense comigo: Deixar um projeto muito importante, o qual milhares de pessoas dependam dele, nas mãos de uma única pessoa e sem colaboradores é pedir para que o projeto vá para o espaço. Concorda?
Pois bem, este post retrata bem a situação em que anda o .NET Provider para o gerenciador de banco de dados Firebird. Quem trabalha com desenvolvimento de sistemas em .NET utilizando o Visual Studio 2008 e utiliza o Firebird como principal SGBD vai ter de esperar o próximo desenvolvedor do driver lançar uma versão estável, pois o mesmo encontra-se em uma situação terrível. Lamentavelmente.
Alguns desenvolvedores mundo afora reportaram sucesso na utilização do referido Provider com o VS2008, mas em meus testes, não consegui nem mesmo uma conexão ao banco de dados. E, sim, eu baixei o código fonte e tentei compilar em meu computador. Sem sucesso também.

Solução? Apelar para o elefante de uma vez por todas, já que ele é um SGBD bem maduro e compete com outros grandes nomes, tais como, Oracle e SQLServer.

Há um bom tempo venho pensando em postar um comparativo entre os SGBDs (Sistemas de Gerenciamento de Bancos de Dados) Freeware e/ou Open-Source, como o Firebird e PostgreSQL. Confesso que em meus projetos pessoais e em clientes, utilizo o Firebird, que atualmente está em sua versão 2.0.3, mas ando flertando com o PostgreSQL, cujo lançamento da versão 8.3 já está no forno, quase pronta.

Esta semana, em minhas andanças pela web, encontrei um artigo publicado originalmente na Revista do Linux, cujo site ainda está no ar e compartilho com vocês caros leitores, as informações que achei mais interessantes. O texto original, compara também o SGBD MySQL, mas resolvi postar somente estes dois, por serem mais robustos e mais confiáveis para o trabalho de armazenamento e manipulação dos dados. Sei que muitos vão discordar, e com razão, pois as funcionalidades dos SGBDs estão evoluindo muito rápidamente e se tornando muito parecidas.

Sem mais delongas, vamos ao que interessa:
A tabelinha que segue, pode dar aos indecisos uma idéia das vantagens e desvantagens dos dois principais SGBDs.

Recurso Firebird PostgreSQL
Transações Sim Sim
Stored Procedures
(incompatíveis com ODBC)
Sim Sim
Triggers Sim Sim
Integridade referencial Sim Sim
Consultas aninhadas (subselects) Sim Sim
Outer Joins Sim Sim
Funções agregadas (count, sum, avg, …) Algumas Muitas
Recursos para OLAP/Data Wareouse Não Não
Extensões Orientadas a Objetos Não Sim
Servidor baseado em múltiplos processos Sim (CS) Sim
Servidor baseado em múltiplas threads Sim (SS) Não
Acesso direto, sem servidor Sim (CS) Não
Um arquivo por tabela Não Sim
Um arquivo por BD Sim Não
BD ocupando vários discos Não Sim (via SQL)
Liberação automática de registros deletados Sim Não
Servidor estável em Windows Sim Não *
Servidor em Netware Não Sim

Créditos: Revista do Linux – Ed. 40 – 2003

* À época em que esta tabela foi montada, o PostgreSQL não tinha um servidor estável em Windows, problemas estes já superados atualmente.

Obviamente, este post não tem a pretensão de explicar o significado dos os recursos oferecidos por cada um dos SGBDs citados. E muita coisa mudou desde que o artigo foi escrito pela revista. Também pudera, o Firebird estava em sua versão 1.0.5 e o PostgreSQL na versão 7.1. Mas dá pra se ter uma boa noção de qual deles utilizar em sua aplicação Desktop ou mesmo Cliente-Servidor.

Um abraço e até o próximo post.

Esse artigo é para aqueles que trabalham com WebDesign ou estão iniciando na programação no Mac e ainda não se aventuraram em projetos com a utilização de softwares gerenciadores de bancos de dados como o MySQL, conhecidíssimo e muito usado pelos linuxers ou o utilizam em seus projetos e gostariam de um SGBD mais robusto, como o PostgreSQL.

Para efeito de copyright estou me baseando no tutorial PostgreSQL on MacOS X, disponível em inglês na página da Apple Inc.. Lembrando que estou usando softwares disponíveis para o Mac OS X na plataforma Intel.

Sem mais delongas, vamos ao que realmente interessa:

Se você ainda não usa o Fink, um gerenciador de downloads de softwares portados de várias plataformas para o Mac (corrijam-me os veteranos se eu estiver errado), vamos instalar ele primeiro para depois prosseguir com a instalação do PostgreSQL.

Instalando o Fink
1. Acesse a página de download do Fink e baixe a última versão disponível. No meu caso foi o Fink 0.8.1 Binary Installer (Intel), que pesa aproximadamente 15 MB.
2. Depois que o download estiver concluído, abra o arquivo Fink-0.8.1-Intel-Installer.dmg e dê um duplo-clique no arquivo de pacote chamado Fink 0.8.1-Intel Installer.pkg.
3. Depois de responder algumas perguntinhas de praxe o Fink estará pronto para instalar.
4. Confirme a instalação e pronto. Finished!
5. Abra o Terminal e na linha de comando digite:

fink scanpackages; fink index

para atualizar a lista de pacotes de programas que o Fink pode instalar automaticamente.
6. Pronto! O Fink está instalado no seu Mac.

Instalando o PostgreSQL
1. Antes de instalar o PostgreSQL você vai precisar instalar um pacote chamado readline e o modo mais fácil de instalar é como? Usando o Fink, certo?!
Abra o Terminal e digite a seguinte linha:

zehrique@producao:~> sudo /sw/bin/fink install readline

2. Você pode instalar um port do PostgreSQL usando o Fink, mas a Apple não recomenda esse método, porém eles deixaram uma pequena dica de como instalar o SGDB “na mão”.
Mais uma vez você vai ter de abrir o Terminal e seguir o procedimento abaixo:

zehrique@producao:~> cd /usr/local/src
zehrique@producao:src> sudo sh
Password:
root@producao:src> mkdir postgres
root@producao:src> cd postgres
root@producao:postgres> curl -O ftp://ftp2.br.postgresql.org/postgresql/source/v8.2.3/postgresql-8.2.3.tar.gz
root@producao:postgres> tar -xzvf postgresql-8.2.3.tar.gz
root@producao:postgres> cd postgresql-8.2.3

3. Agora que você tem o código fonte, você pode executar os scripts de configuração, compilação e instalação. Mas já que instalamos o readline pelo Fink, vamos adicionar os diretórios dele como argumentos para o script de configuração:

root@producao:postgresql-8.2.3> ./configure --with-includes=/sw/include/ --with-libraries=/sw/lib
root@producao:postgresql-8.2.3> make
root@producao:postgresql-8.2.3> make install

4. Depois desses passos, você deve criar um usuário comum chamado postgres que é quem terá domínio completo sobre o banco de dados. Após criá-lo, mais uma vez abra o Terminal e faça o seguinte:

root@producao:~> mkdir /usr/local/pgsql/data
root@producao:~> chown postgres /usr/local/pgsql/data

5. Faça o login com o usuário postgres e inicialize o banco de dados, como a seguir:

root@producao:~> su -l postgres
postgres@producao:~> /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

6. Para simplificar a execução de programas do PostgreSQL, você pode setar a variável de ambiente PATH para o caminho onde eles se encontram:

postgres@producao:~> export PATH=$PATH:/usr/local/pgsql/bin

7. Se você quiser que a alteração à variável PATH seja permanente, crie um arquivo chamado .tcsh no diretório de início de qualquer usuário (se você estiver usando o shell default do Mac OS X, que é o tcsh), e adicione as seguintes linhas:

setenv PGDATA /usr/local/pgsql/data
setenv PATH ${PATH}:/usr/local/pgsql/bin

Lembrando que a variável PGDATA servirá para indicar ao servidor do PostgreSQL em qual diretório residem os dados.
8. Pronto! Agora você pode iniciar o servidor do PostgreSQL:

postgres@producao> /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

Uma vez que o servidor está ativo, crie um banco de dados chamado teste para brincarmos um pouco:

postgres@producao> createdb teste

Você pode usar o programa psql para abrir o banco de dados recém criado e executar comandos SQL diretamente:

postgres@mail> psql teste

Crie uma tabela chamada amigos e insira alguns nomes nela, como a seguir:

teste=# create table amigos (nome varchar primary key, amigos_id serial);
NOTICE: CREATE TABLE will create implicit sequence 'amigos_amigos_id_seq' for
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "amigos_pkey" for table "amigos"
CREATE TABLE


test=# insert into amigos (nome) values ('Julia');
INSERT 0 1
test=# insert into amigos (nome) values ('Marcelo');
INSERT 0 1


teste=# select * from amigos;
nome | amigos_id
---------+-----------
Julia | 1
Marcelo | 2
(2 rows)

Para esta primeira parte do artigo já fizemos bastante coisa. Tente você mesmo criar outras tabelas com mais dados utilizando o programa psql ou baixe o programa pgAdmin III, um front-end para o PostgreSQL que pode ajudá-lo na criação de novos bancos de dados, tabelas, índices, etc… e na manutenção do dia-a-dia.

Um abraço e até a parte 2.