Delirando sobre informática, fotografía, programación, móviles y mucho más desde 2003
Hay proyectos en los que es necesario pensar en la portabilidad de la base de datos, permitiendo que funcione perfectamente en diferentes servidores. Por ejemplo, el famoso phpBB soporta 7 sistemas. Esto no es recomendable en proyectos en los que el rendimiento es algo vital como sitios web y sólo debe aplicarse a proyectos donde prima la portabilidad.
A nivel de aplicación, esto requiere el uso de una capa de abstracción que hoy en día integran la mayoría de frameworks o que puede lograrse con con la extensión PDO de PHP o clases como ADOdb. Y para convertir las bases de datos entre sí, ya he hablado de SQL::Translator, un potente script programado en Perl.
En la especificación de SQL-92 se definen los puntos comunes del lenguaje. Tenerlos claros los puntos es primordial como por ejemplo el uso de comillas simples para literales.
Esto debe ser básico en cualquier desarrollo, pero nunca sobra recordarlo. Todos los datos que se almacenen deben estar comprobados, ya que un sistema puede aceptar un valor no válido para un tipo de dato y convertirlo mientras que otro sistema lo rechazará.
Todos los campos que sean omitibles en un INSERT o un UPDATE deben tener un valor por defecto o bien ser NULL. En bases de datos como SQLite, el no especificar un valor por defecto provoca un error, mientras que en MySQL no.
Cuando se realizan varias consultas seguidas de inserción, actualización o borrado, es recomendable el uso de transacciones. Es mejor no realizar ningún cambio a que se realice a medias, perdiendo datos.
Nunca deben omitirse partes de las sentencias de inserción y actualización. Por ejemplo: INSERT INTO tabla (campo1, campo2) VALUES ('a', 'b').
MySQL permite establecer el orden por defecto de una tabla y en otros sistemas el orden puede variar por cada consulta realizada, ya que se puede ordenar por fecha de actualización o inserción del registro. Por eso nunca debe omitirse ORDER BY.
La integridad referencial no está soportada en todos los sistemas (MySQL con tablas InnoDB sí la soporta pero no con tablas MyISAM, SQLite permite asignar claves foráneas pero no hace nada con ellas), por lo que la lógica debe trasladarse a la programación, borrando o actualizando los datos relacionados de ser necesario.
No deben usarse funciones propias de cada sistema, dificultan la portabilidad. Lo que se puede hacer con una función en una consulta puede hacerse con otra función en la programación. Eso sí, ciertas funciones de tratamiento de cadenas y fechas pueden ser comunes o muy similares, por lo que en caso de ser necesario, debe tenerse en cuenta a la hora de programar para usar la adecuada según el sistema. Algunas capas de abastracción como ADOdb integran ayudas para estos casos.
Todo lo que puede incluirse en disparadores y procedimientos almacenables puede incluirse en la lógica de la aplicación. Se pierde comodidad pero evitan problemas, ya que la implementación de estas funciones varía y ciertos sistemas no las implementan.
Las vistas funcionan de diferente forma entre los diferentes RDBMS existentes, sobre todo en la actualización de los datos que consulta, lo que puede provocar resultados inesperados. Hay que recordar que sólo algunos sistemas permiten la actualización de datos en vistas, por lo que es importante no hacer uso de esa funcionalidad.
Del mismo modo que las vistas, las subconsultas funcionan de diferente forma entre los diferentes RDBMS existentes y no todos las implementan. Cada sistema tiene sus restricciones, por lo que una subconsulta que funciona perfectamente en
Los tipos de datos específicos de ciertos motores deben evitarse. Por ejemplo, una fecha timestamp puede almacenarse en un campo INT de 32 bits, pero en MySQL puede almacenarse en un campo tipo TIMESTAMP con el atributo ON UPDATE CURRENT_TIMESTAMP que no es extensible a otros sistemas. Otro ejemplo pueden ser los tipos BOOL, que pueden sustituirse por enteros (0 - 1).
Puedes escribir lo que quieras, pero por favor hazlo respetando a los demás y en relación al tema que se está tratando. Todo comentario insultante o fuera de lugar será eliminado
Está permitido utilizar las siguientes etiquetas HTML para formatear tu comentario: <a> <b> <blockquote> <i> <u>. Además también puedes utilizar estos emoticonos:
Puedes enviar referencias a esta anotación utilizando esta dirección
[...] http://micurl.com/n5n2nf) Cache en otro servidor con Apache (http://micurl.com/2kd3fr) Microsoft financia a Apache Software Foundation (http://micurl.com/1×1gvo) Menuda porquería cuil.com, 120 mil millones de páginas indexadas y mues [...]
Delirios de un Informático :: Gestionado con Bitacorae :: Alojado en Bitacoras.com :: Licenciado bajo Creative Commons