L'utilisateur Aaron Bertrand a fait quelques commentaires qui correspondent bien à mes réflexions sur votre question. Il s'agit plus d'un défi de cadre que d'une réponse à votre question spécifique, mais je pense qu'il est utile de considérer dans ce contexte.
La portabilité est un bon objectif de manuel, mais cela arrive rarement dans la pratique.
Si vous devez changer de plate-forme à un moment donné, des modifications devront être apportées à l'application, à la base de données et probablement à bien d'autres choses. Si vous pouvez être quelque peu «agnostique à la plate-forme» sans trop d'effort, c'est bien. Mais c'est vraiment une mauvaise décision commerciale de l'utiliser comme objectif de conception.
Il existe de nombreux endroits en ligne où les gens discutent des inconvénients ou de la programmation de cette façon, voici l'un d'eux que je trouve assez convaincant:
Les couches d'abstraction de base de données doivent mourir!
Le sophisme de la portabilité
L'auteur utilise un argument que j'entends tout le temps: si vous utilisez une bonne couche d'abstraction, il sera facile de passer de $ this_database à $ other_database sur la route.
C'est n'importe quoi. Ce n'est jamais facile.
Dans toute application non triviale soutenue par une base de données, personne ne pense à changer de base de données comme une question facile. Penser que "la conversion sera indolore" est un fantasme.
Les bons ingénieurs essaient de sélectionner les meilleurs outils pour le travail, puis font tout ce qu'ils peuvent pour tirer parti des fonctionnalités uniques et les plus puissantes de leur outil. Dans le monde des bases de données, cela signifie des conseils spécifiques, une indexation, des types de données et même des décisions de structure de table. Si vous vous limitez vraiment au sous-ensemble de fonctionnalités qui est commun à tous les principaux SGBDR, vous faites vous-même et vos clients un énorme mauvais service.
Ce n'est pas différent de dire "je fais pour me limiter au sous-ensemble de PHP qui est le même en Perl et C, parce que je pourrais vouloir changer de langue un jour et porter" sans douleur "mon code."
Cela n'arrive tout simplement pas.
Le coût de changement de base de données après le développement et le déploiement d'une application est assez élevé. Vous avez des modifications de schéma et d'index possibles, des changements de syntaxe, des travaux d'optimisation et de réglage à refaire, des conseils pour ajuster ou supprimer, etc. Changer mysql_foo () en oracle_foo () est vraiment le moindre de vos problèmes. Vous allez toucher la plupart, sinon la totalité, de votre SQL - ou vous devrez au moins le vérifier.
Cela ne me semble pas "indolore".
<>
) et non standard (!=
), où il n'y a aucun compromis sur les performances ou la maintenabilité, je choisis toujours standard. Mais quand cela vient à d'autres coûts, ou qu'il n'y a pas d'équivalent standard, je tape et je suis propriétaire. Les choses que vous abandonnez juste pour la possibilité de changer complètement de plate-forme en gros ne valent tout simplement pas la peine à mon humble avis.