
                   BASES DE DATOS EN INTERNET BAJO GNU/LINUX
                                       
   En este artculo se va a presentar un sistema completo de publicacin
   de datos en Internet, utilizando el navegador de Internet como
   cliente, y como servidor de bases de datos actuar el servidor de web
   Apache con una extensin llamada PHP.
   
   El sistema estar compuesto por cinco elementos principales:
   
   - GNU/Linux como sistema operativo abierto
   - Apache como servidor de web
   - PHP como mdulo de ampliacin de Apache para acceder a la base de
   datos
   - MySQL como base de datos
   - Una interfaz web a MySQL
   
   Todos los elementos del sistema se pueden obtener sin ningn tipo de
   coste por lo que el montaje inicial del sistema y su uso no conllevan
   ninguna inversin. Es ms, a excepcin de MySQL, de la que hay que
   comprar licencias en el caso de que se quiera vender sistemas que la
   incluyan, todos los dems elementos tienen licencia GPL [1]
   
   Durante el desarrollo del artculo se describirn cada una de las
   piezas del sistema que acompaan a GNU/Linux, hacindose especial
   hincapi en como se relacionan. Es conveniente para el lector tener
   unas nociones bsicas de bases de datos ya que al ser un tema muy
   amplio no se podr tratar con detalle en el artculo, aunque se
   intentarn aclarar los conceptos principales a medida que vayan
   apareciendo.
   
   Y quizs la parte fundamental del artculo sea el ltimo apartado
   donde se intentar llevar al lector paso por paso en la instalacin de
   todo el sistema, hasta llegar a tener el sistema completo funcionando.
   Con ello y junto con un software desarrollado por la empresa
   Desarrollo y Recursos [9] y bajo licencia GPL, se tendr un sistema de
   creacin, gestin y uso de bases de datos utilizando Internet que
   puede aportar una gran utilidad en cualquier tipo de proyectos.
   
INTRODUCCIN AL SISTEMA

   [INLINE]
   Como una motivacin previa y para que el lector pueda tener una visin
   global desde el principio, se presenta en este apartado una visin
   global del sistema. En el siguiente grfico se destacan las partes
   fundamentales.
   
   Los pasos que describen la interaccin entre el cliente y la base de
   datos son:
   
   1. El cliente carga una pgina HTML con un formulario, rellena los
   datos y los enva al servidor
   2. A travs de la red TCP/IP (Internet normalmente) los datos llegan
   al servidor, y son enviados a un programa, en este caso un programa
   PHP.
   3. El servidor detecta que los datos se envan a una pgina PHP por lo
   que informa al mdulo de PHP del programa a ejecutar y le pasa los
   datos del cliente
   4. El mdulo de PHP ejecuta el programa, el cual acceder a MySQL
   utilizando de nuevo una comunicacin TCP/IP (en nuestro caso local)
   5. MySQL procesa la peticin del programa PHP y le enva de vuelta los
   resultados.
   6. El mdulo PHP recibe los resultados y a travs del servidor Apache,
   enva una pgina HTML con los resultados al cliente
   7. El cliente recibe la pgina HTML resultado de sus peticin, a
   travs de la red TCP/IP
   
   En este primer esquema se puede ya ver que toda la interaccin con la
   base de datos se hace a travs de PHP, y como PHP tiene soporte para
   una amplia gama de bases de datos, el sistema descrito en este
   artculo es fcilmente adaptable a diferentes bases de datos con
   cambios mnimos en el cdigo que se encarga de acceder a la base de
   datos.
   
APACHE

   [INLINE]
   
   Apache es el servidor de web por excelencia. Ha sido uno de los
   mayores xitos del software libre y su supremaca entre los servidores
   de web no se ve amenazada (ni si quiera por el servidor de web de
   Microsoft).
   
   Su desarrollo en continuo y su portabilidad le han llevado plataformas
   como Windows NT y Windows 95, a parte de casi todos los sistemas Unix.
   
   Una de las principales caractersticas de Apache es su extensibilidad
   basada en una gran modularidad de su cdigo fuente,  lo que han
   facilitado la aparicin de mdulos de extensin como PHP el cual
   evitar el uso de cgi-bins por completo, facilitando enormemente la
   programacin de aplicaciones en el lado del servidor, especialmente en
   el campo de acceso a bases de datos.
   
   En el primer nmero de Linux Actual se dedic un artculo completo a
   este servidor de web por lo que recomendamos al lector interesado su
   lectura. En las referencias [2], [3], [4] y [5] el lector podr
   ampliar tambin informacin sobre este servidor de web.
   
PHP: Hypertext Preprocessor (Preprocesador de Hypertexto)

   [INLINE]
   
   En el manual de PHP se describe a PHP como: << PHP Version 3.0  es un
   lenguaje de programacin que se introduce dentro de las pginas HTML.
   La mayora de sus sintaxis est basada en C, Java y Perl. El principal
   objetivo del lenguaje es permitir a los desarrolladores de
   aplicaciones basadas en el web escribir pginas que se generan de
   forma dinmica de una forma sencilla y rpida. >>
   
   PHP [7] es un lenguaje de programacin del lado del servidor. Esto es,
   es un lenguaje que nos permite programar aplicaciones asociadas al
   servidor de web, aumentando la funcionalidad de dicho servidor y
   convirtindolo en un sistema de desarrollo de aplicaciones
   cliente/servidor mucho ms completo.
   
   Ha sido un evolucin de un lenguaje conocido como PHP/FI (Personal
   Home Page/ Form Input), el cual debido a su gran xito, fue totalmente
   remodelado tras la versin 2.0 lo que oblig a ciertas
   incompatibilidades bastante molestas a la hora de actualizar el
   antiguo cdigo.
   
   El nuevo PHP, cuya versin es la 3.0 para mantener una cierta
   asociacin con su progenitor, ha sido ampliado con aspectos tan
   importantes como conceptos de programacin orientada a objetos, y su
   sintaxis es ahora mucho ms cercana a la de C, por lo que cualquier
   programador que haya programado en C no tardar mucho tiempo en
   aprender a utilizar el lenguaje.
   
   Las construcciones sintcticas de PHP son ms cercanas a Perl que a C
   ya que en su diseo se busc un lenguaje til con el que se programara
   muy rpido, es decir, que fuera un lenguaje muy productivo al ms puro
   estilo de Perl.
   
   PHP est en continuo desarrollo y como detalle curioso citar que se ha
   votado por Internet el significado del acrnimo durante Abril de 1998,
   publicndose el resultado del 19 de Abril: PHP significa PHP Hypertext
   Preprocessor (acrnimo recursivo al estilo GNU significa GNU is Not
   Unix).
   
   Lo ms espectacular de PHP es su facilidad para acceder a la siguiente
   lista de bases de datos:
   
   Oracle PostgreSQL
   Sybase Adabas D
   mSQL 1.x and 2.x FilePro
   MySQL Velocis
   Solid dBase
   Generic ODBC Unix dbm
   
   De hecho es bastante sencillo portar la aplicacin que se describir
   al final de este artculo de MySQL a cualquiera de ellas ya que las
   funciones de acceso que ofrece PHP son en muchos casos de sintaxis
   compartida.
   
   Quizas MySQL es la que mejor soporte tiene por parte de PHP junto con
   PostgreSQL, debido a que ambas bases de datos son de libre
   distribucin, con el cdigo fuente, y con un acceso muy sencillo a
   travs del lenguaje C.
   
   MYSQL
   
   [INLINE]
   MySQL es un sistema de gestin de bases de datos (SGBD) SQL que
   inicialmente busc una compatibilidad con la API de mSQL. Sus
   principales objetivos han sido la velocidad y la robustez.
   
   Es un SGBD sencillo y rpido que se adapta perfectamente a entornos en
   donde el volumen de datos sea del orden de megabytes (en la
   documentacin se habla de su uso con bases de datos de 50 millones de
   registros). Evita complejidades como el sistema de transacciones, lo
   que la limita para su uso en grandes sistemas (gran volumen de datos,
   muchos accesos simultneos y alta distribucin de los datos).
   
   En el mundo de GNU/Linux es MySQL junto a PostgresSQL [10] los
   principales SGBD de uso libre y con cdigo fuente. Las grandes
   compaas de bases de datos como Software AG [11] estn comenzando a
   ver en GNU/Linux un nuevo mercado y estn portando sus grandes
   sistemas a GNU/Linux. ADABAS es un SGBD del nivel de Oracle o Illustra
   de Informix y est portado a Linux, lo que constituye una opcin muy
   importante a grandes empresas donde el acceso a los datos sea crtico
   y donde se necesite un soporte comercial. Incluso el servidor de bases
   de datos de Oracle se puede ejecutar en Linux utilizando el binario de
   SCO Unix y el mdulo de compatibilidad de binarios iBCS.
   
   MySQL est al igual que PHP en fase de pleno desarrollo. Se estn
   publicando de forma regular nuevas versiones del sistemas, as como
   herramientas que son bsicas en cualquier SGBD actual:
   
   - Dispositivo JDBC para acceder desde Java
   - Dispositivo ODBC para acceder utilizando la API ODBC
   - APIs de programacin para C, Perl, C++, Python y TCL
   - Acceso desde PHP
   - Entornos visuales de gestin de la base de datos
   - Control de acceso basado en una base de datos de administracin
   
   En el servidor de MySQL [12] podemos encontrar una comparacin
   exhaustiva entre diferentes SGBD: MySQL, mSQL, PostgreSQL 6.3, Oracle,
   Solid y Empress.
   
   Quizs una de las cosas que ms se agradecen de MySQL es que las bases
   de datos las almacena creando un directorio por cada una de ellas, y
   dentro de dicho directorio, crea tres ficheros por tabla donde se
   almacenan los registros de la tabla y la definicin de la tabla. El
   copiar una base de datos es tan fcil como copiar un directorio por lo
   que hacer copias de seguridad de las mismas es algo de lo ms
   sencillo.
   
   EL SISTEMA COMPLETO
   
   En este apartado se quiere facilitar al lector la tarea de instalar el
   sistema completo desde el principio. Para ello se detallan los pasos a
   seguir para la compilacin e instalacin de los diferentes paquetes
   aunque la ltima palabra siempre la tendrn la documentacin de cada
   paquete en particular. En algn caso la descripcin que aqu se hace
   pudiera no ser completa y el lector tendr que recurrir a las
   instrucciones de instalacin de cada uno de los paquetes. Para
   cualquier duda se puede consultar con el escritor del presente
   artculo en: alvaro_del_castillo@mailcity.com.
   
   El sistema donde ha sido probado el sistema completo es Debian 1.3.1,
   que se entreg con el primer nmero de Linux Actual. Con cualquiera
   otra distribucin de Linux los cambios sern mnimos y perfectamente
   documentados dentro de la documentacin de cada paquete.
   
   La compilacin del cdigo fuente puede plantear problemas para
   usuarios inexpertos pero desde aqu se recomienda encarecidamente al
   lector que intent compilar el sistema. En un mundo tan evolutivo como
   Linux el saber compilar aplicaciones llega a ser vital ya que, los
   programas cambian muy rpidamente y no siempre se disponen de binarios
   ya compilados, y los binarios ya compilados puede que no se adapten a
   nuestras necesidades. Y desde el punto de vista didctico, se aprende
   mucho enfrentndose a este tipo de problemas.
   
MySQL

   El primer paso es obtener MySQL, compilarlo e instalarlo. Para ello
   podemos obtener la ltima versin de [8]. En el momento de escribir
   este artculo dicha versin era la 3.21.29-gamma
   
   Como se habitual lo que obtenemos es un archivo .tgz, que deberemos
   descomprimir para poder continuar con la instalacin: tar xvfz
   mysql-3.21.29-gamma.tar.gz.
   
   Entramos en el directorio mysql-3.21.29-gamma desde donde compilaremos
   el programa.
   Antes de compilar hay que ejecutar el programa configure que se
   encarga de adaptar las fuentes a nuestro sistema. A este programa le
   podemos pasar parmetros de donde se encuentran ciertas libreras e
   incluso configurar ciertas opciones del programa. En Debian 1.3.1 la
   versin de Perl instalada es demasiado antigua para el funcionamiento
   de la parte de Perl de MySQL provocando problemas a la hora de
   compilar. Por ello la desactiveramos ya que en nuestro caso es
   innecesaria, algo que pudiera no ser necesario para el lector cuyo
   sistema tuviera una versin de Perl ms actualizada. La orden a
   ejecutar es: 
   configure - -without-perl - -enable-shared. Con la opcin de -
   -enable-shared indicamos que queremos que se creen libreras
   compartidas para el acceso a MySQL.
   
   Si no hay problemas en este paso con un simple make se crear el
   demonio servidor de bases de datos (mysqld), los clientes de acceso y
   programas de gestin junto con las libreras necesarias para poder
   acceder desde nuestros programas en C a la base de datos.
   
   Tras finalizar la compilacin pasamos a instalar MySQL. Para ello
   necesitaremos ponernos en el papel de superusuario y ejecutar: make
   install. Con esta orden se copian bajo /usr/local/  en los
   direcotorios adecuados los binarios y las libreras. En especial cabe
   resaltar que las bases de datos se crean dentro del directorio
   /usr/local/var. Para crear la primera base de datos conocida como
   mysql y que contiene los permisos de acceso a las bases de datos,
   ejecutamos desde el directorio actual la orden:
   scripts/mysql_install_db. Con ello se crear esta primera base de
   datos en /usr/local/var/mysql y se arrancar el demonio de la base de
   datos.
   
   Con esto queda finalizada la compilacin e instalacin de MySQL. Para
   arrancar el demonio servidor de bases de datos hay que ejecutar
   /usr/local/libexec/mysqld, aunque dicho demonio est ya arrancado tras
   el ltimo paso de la instalacin.
   
   Entre las herramientas que acompaan a MySQL cabe destacar mysql que
   se encuentra en /usr/local/bin y que permite ejecutar comandos SQL
   sobre la base de datos.
   
   Ante cualquier problema hasta este momento se recomienda al lector que
   acuda a la documentacin de MySQL y si esta no logra resolver su duda,
   puede contactar con el autor del artculo.
   
PHP y Apache

   Una vez instalada MySQL pasamos a compilar PHP. De nuevo hay que
   obtener la ltima versin de [6] que el momento de escribir el
   artculo era la 3.0RC4. Los pasos de instalacin son similares a MySQL
   y estn documentados dentro del fichero INSTALL de la distribucin de
   PHP. Tan solo la salvedad de que debemos tener la ltima versin de
   Apache obtenida de [2], que en el momento de escribir el artculo era
   la 1.2.6, descomprimida ya que a PHP hay que decirle donde puede
   encontrar las fuentes de Apache. En el paso 3 hay que sustituir
   ruta-acceso por el directorio donde el lector haya ejecutado: tar xvfz
   apache-1.2.6.tgz.
   
   1. tar xvfz php-3.0RC4.tgz
   2. cd php-3.0RC3
   3. configure -with-apache=<ruta-acceso/apache-1.2.6/src>
   4. make
   5. make install
   
   Ahora nos debemos ir al directorio apache-1.2.6/src/ y editar el
   fichero Configuration aadiendo como ltima lnea: Module php3_module
   mod_php3.o
   
   Asimismo y dentro de este mismo fichero aadimos a EXTRA_LIBS las
   opciones que aparecen tras LIBS dentro del fichero libphp3.module.
   
   Una vez hecho esto ejecutamos make proceso que finalizar con la
   creacin del ejecutable httpd, que es el servidor de web Apache con el
   soporte para PHP incluido. Ejecutamos strip httpd y copiamos dicho
   servidor a /usr/local/bin, para que no interfiera con el servidor de
   web instalado por Debian, si es que ha sido instalado.
   
   Hay que modificar el fichero de configuracin de Apache srm.conf para
   indicar al servidor que los ficheros con extensin .phtml deben ser
   tratados por el mdulo de PHP. Esto se hace incluyendo en el lugar
   adecuado la lnea: AddType application/x-httpd-php3 .phtml.
   
   Paramos el servidor Apache incluido con Debian (/etc/init.d/apache
   stop), si es que lo hemos instalado y en funcionamiento, y ejecutamos
   /usr/local/bin/httpd como superusuario. En el caso de que no encuentre
   Apache los ficheros de configuracin del demonio, bastar con copiar
   los ficheros de /etc/apache a /usr/local/etc/httpd.
   
   Una vez llegado a este punto ya tenemos el servidor de web Apache con
   soporte para PHP corriendo en nuestra mquina Linux.
   
Probando el sistema

   Para ver que todo est funcionando correctamente basta con crear un
   fichero prueba.phtml con el contenido:
   
   <? phpInfo();?>
   
   Dicho fichero ha de ser visualizado a travs del servidor de Apache
   para que mdulo de PHP lo preprocese antes de enviarlo al usuario.
   Los "<?" indican el comienzo y "?>" fin del cdigo PHP dentro de la
   pgina HTML y la funcin phpInfo() vuelca en HTML un informe completo
   del mdulo PHP con informacin sobre la versin del servidor de
   Apache, la versin de PHP, los soportes de acceso a bases de datos
   incluidos y mucha ms informacin.
   
   LA INTERFAZ WEB A MYSQL
   
   Dentro de mi trabajo para la empresa Desarrollo y Recursos S.L. (DyR)
   [9] tuve el problema de cmo facilitar el uso de MySQL para la gestin
   integral de los datos de la empresa.
   
   Para MySQL no exista ninguna interfaz web, aunque si una para el
   entorno grfico de Linux conocida como xmysql. Asimismo junto con la
   distribucin de MySQL se incluye una interfaz de lnea de comandos
   desde la que gestionar todo el sistema conocida como mysql.
   
   La interfaz web permite el acceso a la base de datos desde cualquier
   punto de la intranet que tenga un navegador de web, por lo que los
   ordenadores con Windows 95, MacOS o OS/2 no tendran ningn problema
   para acceder a las bases de datos, normalmente para la introduccin y
   consulta de datos.
   
   Por ello inici el desarrollo de una interfaz web a la base de datos
   ya que esto permitira el acceso a los datos desde cualquier punto de
   la intranet a travs de un cliente web, as como la gestin de las
   diferentes bases de datos.
   
   Dicho interfaz en la actualidad se encuentra bastante avanzado y se ha
   usado durante ms de un ao. La interfaz se divide en tres
   funcionalidades principales:
   
Gestin de bases de datos

   En este apartado se puede crear, borrar y listar las bases de datos
   actualmente disponibles en el sistema.
   
Gestin de Tablas

   En este apartado se pueden crear tablas, borrarlas o eliminar todos
   los registros que tuvieran.
   
   La creacin de tablas es sin duda el programa ms complejo del sistema
   ya que tras indicar el nmero de campos y el nombre de la tabla, se ha
   de poder indicar el tipo de campo para cada uno de los que se van a
   crear, la longitud en caso de tipos variables, y si el campo es clave
   nica o no lo es.
   
   Esta parte del sistema necesita mejoras como aumentar el nmero de
   tipos y gestionar de forma correcta el campo de longitud, aunque la
   funcionalidad actual es bastante til.
   
   Desde el momento que se crea una tabla se puede ir a la parte a la
   parte de insercin de datos desde la que se podrn introducir
   registros nuevos para esa tabla.
   
Gestin de Datos

   Este ltimo apartado es el que mayor valor aadido encierra. Desde l
   se pueden acceder a los datos bien volcando todo su contenido o
   realizando una bsqueda.
   
   Tambin se pueden modificar registros siempre que la tabla tenga
   definida una clave nica ya que sino no sera posible localizar a un
   registro en particular.
   
   La insercin de datos nos permite introducir nuevos registros dentro
   de una tabla ya creada dentro de una base de datos.
   
   Por ltimo el borrado de datos nos permite despus de una bsqueda
   eliminar un conjunto de registros.
   
   En conjunto el sistema permite gestionar a travs de un navegador de
   web un conjunto de datos repartidos en diferentes bases de datos, de
   una forma sencilla, cmoda y rpida. Al ser un sistema totalmente
   genrico es aplicable a cualquier proyecto en el que se necesite el
   apoyo de un SGBD para el almacenamiento y gestin de volmenes de
   datos.
   
   Los planes futuros para esta interfaz son su traduccin al ingls y su
   adaptacin a otras bases de datos, principalmente PostgreSQL y Adabas.
   
   El software en su totalidad ha sido puesto bajo licencia GPL
   convirtindose DyR en una de las empresas que comienzan a apoyar la
   filosofa que acompaa a GNU/Linux, alejndose del modelo de empresa
   que explota GNU/Linux pero que no lo apoya ni promociona.
   
   Todo el software puede obtener de: Open Web Database
   
CONCLUSIONES

   GNU/Linux es un sistema operativo ideal para aplicaciones de red que
   requieran un funcionamiento robusto de forma continuada. Este es el
   caso de los servidores de bases datos, programas que permiten el
   acceso a los datos de una empresa, de un proyecto o de cualquier tipo
   de organizacin, datos normalmente vitales.
   
   La robustez y eficiencia de Linux ha hecho que empresas como Software
   AG hayan portado bases de datos del renombre de Adabas a Linux, y a
   precios muy inferiores a otros entornos. As GNU/Linux se afianza en
   otro nuevo campo del mundo software, un campo muy importante y que
   puede ayudarle a multiplicar una confianza que comienza a palparse
   dentro del mundo empresarial.
   
Referencias

   - [1] http://www.gnu.org/copyleft/gpl.html
   - [2] http://www.apache.org: Apache
   - [3] http://www.apache-ssl.org; Apache SSL
   - [4] http://www.netcraft.co.uk/Survey/: Uso de Apache en Internet
   - [5] http://www.apacheweek.com/: Revista de Apache
   - [6] http://www.php.net: PHP
   - [8] http://www.tcx.se: MySQL
   - [9] http://www.dyr.es: Desarrollo y Recursos S.L.
   - [10] http://www.postgreSQL.org: PostgreSQL
   - [11] http://www.sagus.com: Adabas
   - [12] http://www.tcx.se/crash-me.html
   - [13] http://www.dyr.es/~acs/linux-actual/bd.html
   
   Este artculo se encuentra protegido por la licencia GPL. Puedes hacer
   lo que quieras con l siempre que se me refleje como autor original y
   no se modifique la licencia.
     _________________________________________________________________
   
   Document converted from word 8 by MSWordView (mswordview 0.5.1)
   MSWordView written by Caolan McNamara
