El usuario Aaron Bertrand hizo algunos comentarios que se alinean bien con mis pensamientos sobre su pregunta. Esto es más un desafío de marco que una respuesta a su pregunta específica, pero creo que es valioso considerarlo en este contexto.
La portabilidad es un buen objetivo de libro de texto, pero rara vez ocurre en la práctica.
Si tiene que cambiar las plataformas en algún momento, no habrá cambios necesarios para la aplicación, la base de datos, y probablemente muchas otras cosas. Si puede ser algo "agnóstico de plataforma" sin demasiado esfuerzo, está bien. Pero es realmente una mala decisión comercial usar eso como un objetivo de diseño.
Hay muchos lugares en línea donde la gente discute las desventajas o la programación de esta manera, aquí hay uno de ellos que me parece bastante convincente:
¡Las capas de abstracción de bases de datos deben morir!
La falacia de la portabilidad
El autor usa un argumento que escucho todo el tiempo: si usa una buena capa de abstracción, será fácil pasar de $ this_database a $ other_database en el futuro.
Eso es una mierda. Nunca es fácil
En cualquier aplicación respaldada por bases de datos no triviales, nadie piensa en cambiar las bases de datos como un asunto fácil. Pensar que "la conversión será indolora" es una fantasía.
Los buenos ingenieros intentan seleccionar las mejores herramientas para el trabajo y luego hacen todo lo posible para aprovechar las características únicas y más potentes de su herramienta. En el mundo de las bases de datos, eso significa sugerencias específicas, indexación, tipos de datos e incluso decisiones de estructura de tabla. Si realmente se limita al subconjunto de características que es común en todos los RDBMS principales, está perjudicando enormemente a usted y a sus clientes.
Eso no es diferente de decir "Estoy haciendo para limitarme al subconjunto de PHP que es lo mismo en Perl y C, porque quizás quiera cambiar idiomas algún día y portar mi código 'sin problemas'".
Eso simplemente no sucede.
El costo de cambiar las bases de datos después de que una aplicación se desarrolle e implemente es bastante alto. Tiene posibles cambios de esquema e índice, cambios de sintaxis, trabajos de optimización y ajuste para rehacer, sugerencias para ajustar o eliminar, etc. Cambiar mysql_foo () a oracle_foo () es realmente el menor de sus problemas. Tocará la mayoría de sus SQL, si no todos, o al menos deberá verificarlo.
Eso no me suena "indoloro".
<>
) y no estándar (!=
), donde no hay compromiso en el rendimiento o la mantenibilidad, siempre elijo estándar. Pero cuando se trata de otros costos, o no hay un equivalente estándar, aprovecho y me dedico. Las cosas que abandonas solo por la posibilidad de cambiar por completo las plataformas al por mayor simplemente no valen la pena.