O usuário Aaron Bertrand fez alguns comentários que se alinham bem com meus pensamentos sobre sua pergunta. Isso é mais um desafio de estrutura do que uma resposta para sua pergunta específica, mas acho que é valioso considerar esse contexto.
Portabilidade é um bom objetivo de livro, mas raramente acontece na prática.
Se você precisar alterar as plataformas em algum momento, serão necessárias alterações no aplicativo, no banco de dados e provavelmente em muitas outras coisas. Se você pode ser um pouco "independente de plataforma" sem muito esforço, tudo bem. Mas é realmente uma péssima decisão comercial usá-la como uma meta de design.
Existem muitos lugares on-line onde as pessoas discutem as desvantagens ou a programação dessa maneira. Aqui está um deles que eu acho bastante atraente:
As camadas de abstração do banco de dados devem morrer!
A falácia da portabilidade
O autor usa um argumento que ouço o tempo todo: se você usar uma boa camada de abstração, será fácil passar de $ this_database para $ other_database mais adiante.
Isso é treta. Isso nunca é fácil.
Em qualquer aplicativo não trivial com suporte a banco de dados, ninguém pensa em trocar de banco de dados como uma questão fácil. Pensar que "a conversão será indolor" é uma fantasia.
Bons engenheiros tentam selecionar as melhores ferramentas para o trabalho e, em seguida, fazem todo o possível para aproveitar os recursos exclusivos e mais poderosos de suas ferramentas. No mundo dos bancos de dados, isso significa dicas específicas, indexação, tipos de dados e até decisões de estrutura de tabela. Se você realmente se limita ao subconjunto de recursos que é comum em todos os principais RDBMSes, está prestando um grande desserviço a si e aos seus clientes.
Isso não é diferente de dizer "Estou fazendo para me limitar ao subconjunto de PHP que é o mesmo em Perl e C, porque talvez eu queira trocar de idioma um dia e portar meu código sem dor".
Isso simplesmente não acontece.
O custo da troca de bancos de dados após o desenvolvimento e a implantação de um aplicativo é bastante alto. Você tem possíveis alterações de esquema e índice, alterações de sintaxe, otimização e ajuste para refazer, dicas para ajustar ou remover e assim por diante. Mudar mysql_foo () para oracle_foo () é realmente o menor dos seus problemas. Você vai tocar a maioria, se não toda, do seu SQL - ou pelo menos precisará verificar isso.
Isso não parece "indolor" para mim.
<>
) e não padrão (!=
), onde não há comprometimento no desempenho ou na manutenção, eu sempre escolho o padrão. Mas, quando se trata de outros custos, ou quando não há um padrão equivalente, eu uso e sou proprietário. As coisas que você desiste apenas pela capacidade de trocar completamente de plataforma por atacado simplesmente não valem a pena.