Cargando

por Alfonso Ricaño La creación de un buen software es producto de un buen análisis y diseño, un programador experimentado y el uso de herramientas confiables y eficientes. Por eso la elección de una base de datos es un punto crucial para crear buenos desarrollos de software administrativo.

Para cualquier desarrollador de software, la elección de las herramientas adecuadas es un tema muy delicado e importante, pues para lograr un desarrollo de calidad requerimos de herramientas de gran calidad, eficiencia, facilidad de uso y poder. Desgraciadamente -o afortunadamente- el desarrollo de programas y sistemas de información no se limita al uso de lenguajes de programación de uso general, sino que existen otras herramientas y aplicaciones de software necesarias para esto, que nos ayudan desde la concepción, análisis y diseño de un software hasta la implantación del mismo. Un tema muy importante en este último rubro son las bases de datos. Podemos dividir a las aplicaciones creadas con Delphi/C Builder en dos grandes categorías: Software de aplicación y software de administración. Por lo común en la segunda categoría se utilizan manejadores de base de datos que nos permiten la administración de la información en bases de datos relacionales. éstos nos proveen de las herramientas para agregar, modificar, eliminar y consultar los datos sin necesidad de manipular directamente los archivos. Generalmente cuando empezamos a programar con Delphi/C Builder, utilizamos las características de manejo base de datos que vienen integradas con el producto, en este caso, la Borland Database Engine (BDE). La BDE fue concebida como una interfaz que permite el manejo de bases de datos locales (de archivos) del tipo de dBase y Paradox. También las versiones Enterprise (Client/Server) de Delphi/C Builder permiten conectarse a servidores de bases de datos SQL, como lo es Oracle, DB2, Sybase, MS SQL Server, Informix,y Firebird/InterBase. Y dada sus capacidades de expansión, también puede manipular conexiones por medio de ODBC con prácticamente cualquier base de datos que cuente con un driver (interfase, manejador) de este tipo. Lo cierto es que generalmente empezamos a utilizar bases de datos en Delphi/C Builder utilizando tablas dBase o Paradox. Quiero suponer que empezamos con estos formatos por dos grandes razones: La primera es el costo. Delphi/C Builder en su versión Enterprise tiene un costo elevado, y está -como su nombre lo indica-, enfocado al uso y consumo de parte de empresas. Además, para desarrollar con alguna de las bases de datos SQL, es necesario contar con ese software, lo que implica otro gasto en licencias de uso. La otra gran razón es la sencillez de uso de las tablas dBase y Paradox. Sólo requiere crearlas con alguna utilería -en este caso, el Database Desktop- y no es necesario aprender complicadas instrucciones de SQL ni conceptos relacionados con las bases de datos de peso mayor. Por lo tanto, todos -o casi todos- los que utilizamos Delphi/C Builder para desarrollar software administrativo, hemos empezado utilizando este tipo de archivos de base de datos. Y en un principio las cosas funcionan muy bien. Por ejemplo, Paradox trae características interesantes como lo son las llaves primarias, la integridad referencial, contraseñas integradas, y validación en los campos. Además, se pueden manipular los datos con SQL, y hacer complejas consultas también con este lenguaje, ?Qué más queremos? Pero de vez en cuando suceden cosas que no nos gustan, y lo más común es la corrupción de índices, sobre todo cuando hay varios usuarios compartiendo la misma base de datos. También tenemos que verificar que todos estén utilizando el mismo archivo Pdoxusrs.net, y jamás utilizar una computadora con Windows como servidor de archivos -a menos que desactivemos algunas directivas del sistema operativo e inhabilitemos la escritura en segundo plano-. Como vemos, dBase y Paradox son formatos que en sistemas con muchos usuarios empiezan a tener algunas deficiencias, por lo que en muchos casos nos vemos forzados a buscar otras opciones. En mi experiencia personal, este tipo de problemas los tuve hace ya más de dos años, y busqué alguna plataforma de base de datos que fuera barata y segura. Probé algunas, como DBISAM, de Elevate Software, al mismo tiempo que comencé a utilizar Firebird, que venía incluido en el CD de Delphi. Para ese entonces, InterBase tenía un costo similar a algunos de sus competidores, por lo que era una solución no muy barata, aunque accesible para las empresas. Por eso decidimos en la empresa en que trabajaba la adquisición de 32 licencias de InterBase 5.6 y desarrollar bajo esa plataforma de base de datos. Pero aún necesitaba algo más barato, especialmente si requería desarrollar algún sistema para algún cliente con un negocio pequeño. Mientras mi experiencia en InterBase iba creciendo, también iba descubriendo las bondades de una base de datos grande: los triggers, la integridad referencial, los procedimientos almacenados, y demás características que jamás había utilizado con los formatos de base de datos de archivos. Fue entonces ?en enero de 2000-, cuando la empresa Borland, dueña de InterBase Software Corporation, anunció que la base de datos sería liberada bajo una licencia similar a la MPL de Netscape, bajo el esquema de código abierto, esto debido a problemas financieros en la empresa InterBase, derivados de una mala mercadotecnia del producto. Se crearía una nueva empresa que se encargaría de coordinar los desarrollos del producto y asegurar la calidad de las versiones siguientes de InterBase. Aunque hubo una ruptura entre Borland y los encargados de la nueva compañía, finalmente se liberó la primera versión de código abierto de InterBase -la 6.0- en julio de 2000. Fue entonces cuando decidí ya no seguir buscando una plataforma de base de datos económica, eficiente y segura, pues ya la conocía: InterBase 6.0; y su costo era simplemente irresistible, ya que no cuesta nada el utilizar el producto y redistribuirlo. Además, el que sea un desarrollo de código abierto permite un proceso constante de mejoras. En la actualidad existen dos desarrollos independientes derivados de InterBase 6, debido principalmente a que Borland volvió a su esquema de licencias comerciales, mientras que otros desarrolladores crearon el proyecto Firebird, basado en InterBase 6. Este último se encuentra hospedado en SourceForge, un sitio que provee de herramientas para el desarrollo de aplicaciones de código abierto. Dejando un poco atrás la historia reciente de Firebird/InterBase, veamos cuales son algunas de sus bondades principales: Arquitectura multigeneracional.- Aunque este nombre nos suene un poco raro y complicado, es la forma en que Firebird administra la concurrencia en las actualizaciones en los datos, así como el manejo de las transacciones. Nos asegura que no habrán bloqueos a nivel de página de datos ni de registro, ya que cada vez que se abre una transacción, Firebird genera una copia de los datos para ese usuario. Esto asegura que las transacciones nunca necesitarán bloquear los registros en uso, por lo que los usuarios que están consultando datos no bloquearán a los que están escribiendo datos. Triggers, o disparadores.- Firebird cuenta con una de las implementaciones de triggers más completas comparada con otras bases de datos. Los triggers permiten la realización de acciones cada vez que se agrega, modifica o elimina un registro. De esta manera, podemos implantar reglas de negocio desde el nivel de la base de datos, por ejemplo, actualizar totales en una tabla cuando se modifican datos en otra, o llevar un registro de acciones mediante una bitácora. Todo esto al nivel de base de datos, lo que asegura que los triggers se ejecutarán siempre, no importando desde dónde se acceda a la base de datos. Procedimientos almacenados.- Funcionan de manera similar a los triggers, con la diferencia de que pueden ser ejecutados de manera independiente a las acciones que se ejecuten sobre los registros. También permiten regresar los datos mediante una orden SELECT de SQL, como si fuera una tabla, de tal manera que se pueden realizar complejas consultas y devolverlas como una tabla, simplificando los procedimientos de consultas en los programas clientes hechos con Delphi/C Builder. Integridad referencial.- Permite establecer reglas de integridad entre tablas, para que no violen los principios de las relaciones entre tablas maestro-detalle. Seguridad integrada.- Firebird mantiene su lista de usuarios, y es necesario que se registre el usuario cada vez que se conecta a la base de datos. Además, se pueden asignar permisos independientes de acceso, modificación inserción y eliminación a por tabla a cada usuario. Lenguaje SQL compatible con SQL 92.- La implementación de SQL en Firebird es una de las más completas, incluso mejor que algunos de sus competidores de código abierto, como Postgres y MySQL, lo que asegura que se pueden realizar complejas consultas anidadas, y utilizar funciones de conversión como CAST o extracción de las partes de las fechas, con EXTRACT. Funciones definidas por el usuario (UDF).- Cuando se requiere de funciones no integradas al SQL, o relacionadas con matemáticas, manejo avanzado de fechas, etc., Firebird permite la creación y uso de funciones externas, que al ser registradas pueden utilizarse en combinación con SQL. Esto asegura la extensibilidad de la base de datos. Además, existen algunas bibliotecas de funciones definidas por el usuario (UDF) las cuales pueden ser utilizadas sin costo alguno. Firebird cuenta con muchas más características, como los generadores de números consecutivos, excepciones definidas por el usuario, además de que funciona en varias plataformas (en estos momentos Linux, Solaris, Mac OSX, HP-UX y Windows) y se está portando a otras más, lo que la hacen una ganga dentro de las bases de datos. El único precio que debemos pagar para utilizarla es -obviamente- el tiempo y dedicación que requiere el entender y dominar cada una de sus características.