+1

É possível padronizar o acesso a banco de dados?

criado por Daniel Melo em 25/06/2002 10:06pm
É bastante comum utilizar camadas de abstração de banco de dados (Pear DB, ADODB, PHPLib) para desenvolver aplicações PHP portáveis. Supõe-se que para estas aplicações, mudar o banco de dados não é problema algum. Bom... realmente seria... Se a linguagem SQL fosse realmente um padrão de fato.

O padrão ANSI SQL mais "difundido" é o SQL-92. A versão mais atual do SQL é a versão 99, que adiciona o suporte a bases de dados objeto-relacionais. Entretanto, o padrão ANSI SQL-92 nunca foi implementado puramente (pelo menos, não nos produtos comerciais). Os fabricantes de gerenciadores de banco de dados sempre acrescentam extensões, o que não é o pior dos problemas. A grande falha é que os bancos de dados NÃO implementam o ANSI SQL a risca.

Diante deste fato, como assegurar que as instruções SQL de sua aplicação são suportadas por outros bancos de dados? Ter essa garantia, exige um grande exercício de pesquisa e paciência.

Vamos examinar um estudo de caso real : Uma aplicação PHP desenvolvida sobre alguma biblioteca de abstração de dados, faz a seguinte query a um Microsoft SQL Server

SELECT TOP 10 salario FROM empregados ORDER BY salario DESC

Essa consulta retorna os 10 maiores salarios na tabela empregado. Foi necessário migrar a base de dados para MySQL, e esta foi uma das MUITAS consultas que não funcionaram no MySQL.

Este exemplo de consulta utiliza uma função (TOP) que não está no SQL ANSI. Entretanto, examinando a documentação do MySQL é possível notar que o SQL ANSI não é puramente implementado, assim como nos demais gerenciadores de banco de dados.

Resumo da Opera : Mesmo que eu fosse um grande estudioso do SQL ANSI, nunca ia poder garantir portabilidade na minha aplicação.

Diante deste cenário, levanto o questionamento : O quanto vale a pena utilizar bibliotecas de abstração de banco de dados ?

Saudações,

Daniel Melo

Comentários:

Mostrando 1 - 2 de 2 comentários
Daniel Melo disse:
Ricardo,


Eu ja vi esforços na Internet para criar uma classe de abstração de SQL. Seria uma classe que gera SQL para o banco que voce utiliza. Exemplo :


$dbo = new DataBaseObject('mysql');

$clausula_where = "nome='jonas' and idade>20"

$script = $dbo->select_all('nome_da_tabela', $clasula_where);


O DataBase object geraria entao o script SELECT adequado para o banco escolhido.

Outro exemplo :


$dbo = new DataBaseObject('oracle9i');

$campos["nome"] = "Jonas"
$campos["idade"] = 20

$script = $dbo->insert("nome_da_tabela", $campos);

Neste caso, seria gerado o script de INSERT para o Oracle.


Eu sinceramente nao sei se é viavel. Imagine usar esta biblioteca, mais uma biblioteca de abstração de chamadas de dados. Para fazer uma operação simples, poderia ser necessário interpretar umas 1500 linhas em cada requisição.

Acho que uma classe/biblioteca geradora de scripts SQL seria viavel em linguagens compiladas como Java ou .NET

Sds

Daniel
15/01/2003 3:43pm (~22 anos atrás)

Não um esforço entre as empresas que desenvolve banco de dados para que o SQL ANSI seja implementado se não em todas mas nas principais bases de dados do mundo como Oracle, MS-SQL, Access, MySql e muitas outras ??? se uma padronização fosse feita pouparia tempo para nos programadores e instruções SQL poderiam rodar em multiplas plataformas... acho que esse seria o canal...

so uma ideia...

falows
30/06/2002 11:42am (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)