  Artculo para la revista Linux Actual nmero 13: Interfaces
  WWW a bases de datos.
  Javier Fernndez-Sanguino Pea  <jfs@computer.org>
  18 Marzo 2000

  Con este artculo vamos a dar comienzo a una serie que va a estudiar
  las herramientas, diseo y programacin para unir dos importantes tec
  nologas entre s: Internet y las bases de datos.

  11..  IInnttrroodduucccciinn aa llaa sseerriiee

  Este artculo es el primero de una serie que pretende ensear al
  lector como, con herramientas sobre GNU/Linux se pueden unir dos
  tecnologas tan importante entre s hoy en da como son las bases de
  datos y el fenmeno de Internet, en particular la _W_o_r_l_d _W_i_d_e _W_e_b.

  En el primer artculo de esta serie se va a realizar una introduccin
  breve a estas tecnologas y a explicar la razn de usar como
  herramienta de desarrollo e integracin a GNU/Linux, posteriormente
  vamos a analizar las herramientas que pueden servirnos para gestionar
  la base de datos, y se aplicarn todos los conceptos en el diseo de
  una aplicacin real. Se vern los mtodos de programacin, y las
  alternativas existentes actualmente para integrar ambos sistemas,
  detenindonos en una de ellas para solucionar la implementacin de la
  aplicacin.


  22..  IInnttrroodduucccciinn bbrreevvee aa llaass bbaasseess ddee ddaattooss

  La tecnologa de bases de datos es  una de las ms antiguas dentro de
  la ciencia de la informtica, esencialmente es una tecnologa que se
  basa en la capacidad para almacenar y recuperar informacin
  relacionada entre s. Una base de datos puede ser desde un fichero de
  texto (estilo _/_e_t_c_/_p_a_s_s_w_d) hasta un conjunto de tablas repartidas en
  ficheros binarios y que acumulen millones de registros. En cualquier
  caso es necesario un programa capaz de gestionar estos datos y
  permitir acceder a esta informacin de la manera ms rpida posible.

  Existe ms de un esquema a la hora del desarrollo y definicin de las
  bases de datos: bases de datos orientadas a objetos, bases de datos
  relacionales, bases de datos jerrquicas, etc... Hoy en da, a pesar
  del crecimiento de la programacin orientada a objetos y, por tanto,
  de las bases de datos diseadas con la misma filosofa (que
  actualmente permiten el desarrollo de las bases de datos multimedia),
  el tipo de bases de datos ms utilizada sigue siendo las bases de
  datos relacionales.

  Es necesario distinguir en una base de datos su diseo de su
  implementacin, como veremos ms adelante, para el mismo diseo se
  pueden escoger implementaciones distintas que se ajusten ms o menos a
  ste. Evidentemante, si se escoge una implementacin inadecuada se
  perdern algunas de las ventajas del modelo realizado en la etapa de
  diseo.

  Las bases de datos constituyen una importante herramienta a la hora de
  almacenar y recuperar la informacin. Sin embargo para utilizar esta
  herramienta es necesario ofrecer un interfaz al usuario para abstraer
  toda la complejidad de sta. Sin ste interfaz la base de datos puede
  seguir utilizndose pero el usuario ha de conocer el "lenguaje" de la
  base de datos para acceder a ella (actualmente el ms utilizado es
  SQL, _S_t_a_n_d_a_r_d _Q_u_e_r_y _L_a_n_g_u_a_g_e).





  33..  EEll iinntteerrffaazz WWWWWW aa uunnaa bbaassee ddee ddaattooss..

  As pues, el interfaz es un elemento fundamental a la hora de hacer
  uso de una base de datos, aq es donde entra la World Wide Web.

  La World Wide Web se puede considerar como el elemento de Internet que
  integra el cliente universal, y por tanto, puede usarse como el
  interfaz universal a todo tipo de aplicaiones.

  Muchos fabricantes de equipos y desarrolladores han empezado a mover
  sus aplicaciones e interfaces para que puedan ser operados desde con
  clientes basados en sta. As, por ejemplo, nos encontramos con
  fabricantes de elementos de interconexin de redes (_s_w_i_t_c_h_e_s,
  conmutadores, o _r_o_u_t_e_r_s) o impresoras de red que incluyen en su
  hardware un servidor de WWW para que sus herramientas puedan ser
  manejadas, configuradas, en fn, gestionadas, desde un navegador de
  WWW.

  La ventaja para el fabricante es clara ya que le evita tener que crear
  una herramienta para el cliente, ahorrando en el desarrollo; no
  olvidemos que para un fabricante de hardware un cliente puede ser,
  potencialmente, cualquie combinacin posible de uso de hardware,
  sistema operativo y software. As pues en lugar de tener que realizar
  un interfaz para, por ejemplo, Solaris, otro para Linux y otro para
  Windows NT, el fabricante indica al usuario que slo necesita un
  navegador de WWW como interfaz a la gestin de su equipo. No ser
  necesario que programa un interfaz para cada plataforma en la que
  quiera ser gestionado sino que, al incorporar tecnologas estndar en
  la WWW tanto de presentacin (HTML) como de interaccin cliente
  servidor (protocolo HTTP) su herramienta puede ser utilizada desde
  cualquier lugar y con cualquier plataforma que tenga un cliente de
  WWW.

  El movimiento del acceso de bases de datos de sistemas propietarios a
  un sistema abierto como es la WWW, empez ya hace aos, y su arquetipo
  un sistema por y para la WWW, es el conocido _y_a_h_o_o, en realidad
  cualquier buscador en la WWW. Este buscador no es ms que una base de
  datos de documentos al que se accede mediante un interfaz WWW. La
  ventaja, al margen de la que ofrezca la aplicacin en s, es que por
  un lado cualquiera puede "preguntar" a la base de datos sin conocer el
  funcionamiento de la base de datos detrs, por otro los "clientes"
  potenciales son todos aquellos con acceso a la WWW porque los
  estndares usados son los mismos que para acceder a cualquier otro
  servidor.


  44..  GGNNUU//LLiinnuuxx ccoommoo ssiisstteemmaa ddee ddeessaarrrroolllloo

  GNU/Linux es un sistema ideal para instalar una base de datos que se
  va a operar desde Internet, no slo por su demostrada velocidad en el
  acceso a una base de datos, sino por la multitud de bases de datos y
  herramientas para gestionarlas existentes.

  En GNU/Linux se disponen actualmente de un buen nmero de sistemas de
  bases de datos, por un lado sistemas libres como PostgreSQL o
  BeagleSQL, por otro sistemas "semi-libres" como mSQL o mySQL, y,
  finalmente, sistemas propietarios: Oracle, Informix o Sybase.

  Tambin dispone de una multitud de servidores de WWW, con una especial
  mencin a Apache, el servidor de WWW ms utilizado en Internet.
  Finalmente, al tratarse de un sistema abierto y poderse optimizar "a
  medida" para el desarrollo a realizar lo convierte en la alternativa
  ideal.

  No hay que olvidar tampoco el factor coste. En la actualidad se puede
  montar un sistema profesional utilizando herramientas totalmente
  libres, el coste sera slo el del hardware y el de las personas
  dedicadas a montarlo. El coste en licencias ser nulo y puede creer el
  lector que el coste de un sistema de base de datos propietario y un
  sistema operativo propietario que de las mismas prestaciones (sino
  menos) es ciertamente elevado (estamos hablando de millones de
  pesetas). Si se monta el sistema con herramientas libres se podrn
  adaptar al 100% para lo que se precisa ya que el desarrollador tendr
  a su disposicin el cdigo fuente de todas ellas para adaptarlas a
  medida.



  55..  EElleecccciinn ddee llooss ccoommppoonneenntteess

  Para montar un sistema de interfaz de bases de datos via WWW se han
  elegido como componentes bsicos:

    sistema operativo: Debian GNU/Linux 2.1. Actualmente Debian es la
     distribucin que ms herramientas ofrece para un desarrollador y
     para el usuario, con ms de 5000 paquetes (4 cds de binarios en
     Debian 2.2) de cdigo libre en la distribucin principal. Si el
     lector es un desarrollador _d_e_b_e usar Debian GNU/Linux. Como ncleo
     del sistema utilizaremos un nucleo Linux 2.2 ajustado a las
     necesidades.

    servidor de web: Apache 1.3.3. El servidor de web ms utilizado en
     Internet, extensible, seguro y rpido, y portado a multitud de
     sistemas.

    gestor de base de datos: PostgreSQL 6.3.2. Se ha elegido PostgreSQL
     en lugar de otros sistemas de base de datos semi-libres debido a su
     amplia licencia. Quizs otros sistemas de base de datos (como
     mySQL) puedan ser ms rpidos pero PostgreSQL ofrece todas las
     capacidades necesarios para un desarrollo e implementacin inicial.
     El cambio posterior de la base de datos a otro sistema de base de
     datos no ser si en las herramientas desarrolladas se utilizan el
     estndares para comunicarse con la base de datos (JDBC, SQL..)


  66..  IInnssttaallaacciinn ddee llooss ccoommppoonneenntteess

  Gracias al sistema de paquetes usado por las distribuciones de
  GNU/Linux hoy en da permiten instalar los componentes comentados
  previamente sin mayor esfuerzo por parte del administrador.
  Simplemente seleccionando el componente e instalandolo, restando slo
  hacer la configuracin (que en la mayor parte de los casos vendr
  hecha pero ser necesaria adaptar a las necesidades especficas del
  usuario). En el caso de Debian GNU/Linux instalaremos los paquetes
  apache y postgresql.

  Podramos comentar cmo hacer la instalacin a partir de cero desde el
  cdigo fuente distribuido por los proyectos de desarrollo, pero no se
  va a comentar aqu como hacerlo ya que ha sido previamente comentado
  para ambos componentes en esta misma revista.

  Dado que an no hemos especificado la aplicacin que vamos a realizar
  no entraremos an en la configuracin de estos componentes, sino que
  la dejaremos para ms adelante. Nos bastar con ver que los
  componentes han sido correctamente instalados y funcionan.


  77..  CCoommpprroobbaacciinn ddee llaa iinnssttaallaacciinn:: AAppaacchhee

  Para ver que efectivamente tenemos el servidor de web instalado y
  lanzado haremos lo siguiente:

    Comprobaremos que existe el demonio que atiende a las peticiones y
     est actualmente ejecutndose. Para ello ejecutamos ps aux | grep
     apache. Que nos deber mostrar el proceso ejecutndose. Si no
     aparece una lista de procesos lo deberamos reiniciar con
     /etc/init.d/apache start (esto es para Debian GNU/Linux, otras
     distribuciones ponen los guiones para lanzar los demonios de otra
     forma.

    Probaremos al servidor para comprobar que funciona conectndonos al
     puerto en que por defecto se instala el demonio, el puerto 80.
     Bastar con hacer un telnet localhost 80 y ver que efectivamente
     hay una conexin. Para cerrarla sin enviar pulsaremos Ctrl+5 lo que
     enviar el cdigo de escape a la aplicacin telnet y podremos
     cerrarla escribiendo close (ms informacin man telnet)

    Para ver que sirve adecuadamente pginas lanzaremos un navegador
     contra el servidor, escribiendo como direccin http://localhost/.
     Si el servidor ha sido adecuadamente lanzado veremos una pgina de
     muestra.

  En cualquier caso si vemos cualquier problema es recomendable acudir a
  la documentacin. En el caso de Debian viene dentro del paquete
  apache-doc, y que, tras instalar, incluir la documentacin en
  /usr/doc/apache-doc. Tambin es recomendable acudir a los registros
  del programa que se encuentran (en Debian) en /var/log/apache.



  88..  CCoommpprroobbaacciinn ddee llaa iinnssttaallaacciinn ddee PPoossttggrreeSSQQLL

  Para probar la configuraci de PostgreSQL vamos a utilizar uno de los
  interfaces de gestin que ms adelante se comentarn, ya que se trata
  del ms sencillo viene incluido con la distribucin normal de
  PostgreSQL.

  Conviene comentar que Debian GNU/Linux viene con un usuario de gestin
  de la base de datos que es que el debe usarse para realizar la gestin
  de la misma: creacin de usuarios de la base de datos y bases de
  datos. Mientras no se haya creado ningn usuario de base de datos que
  sea un DBA (_D_a_t_a_b_a_s_e _A_d_m_i_n_i_s_t_r_a_t_o_r) ser necesario usar siempre ste.

  Por ello para probar la base de datos lo primero que haremos ser
  "convertirnos" en este usuario haciendo, como superurusario, _s_u _-
  _p_o_s_t_g_r_e_s. Este usuario tiene como directorio _h_o_m_e el /var/postgres que
  es donde se van a encontrar todos los ficheros que utilice la base de
  datos. Tras esto haremos algunas pruebas:


    De igual manera que para el servidor de web, la base de datos se
     lanza como un servicio llamado _p_o_s_t_m_a_s_t_e_r en un puerto determinado.
     Para ver si el servidor est lanzado haremos ps aux |grep postgres
     que nos deber listar un proceso lanzado como usuario postgres. Si
     no es as quizs no est lanzado (aunque el gestor de paquetes lo
     lanza al instalarlo) pero se puede lanzar con /etc/init.d/postgres
     start.

    Ahora mismo no probaremos que nos podemos conectar al servidor ya
     que, posiblemente, an no est configurado para aceptar conexiones
     a travs de TCP/IP. Si estuviera configurado se lanzara en el
     puerto 5432 (ver /etc/services), y podramos probarlo conectndonos
     mediante un telnet como antes.

    Dado que posiblemente acepte slo conexiones de usuarios de la
     misma mquina, probaremos a conectarnos con el interfaz de texto.
     Para ello ejecutaremos pgsql sin argumentos. Si nos da un _p_r_o_m_p_t
     del estilo de template1=> estar funcionando correctamente
     (saldremos con Ctrl+D o con "\q"). Si da un error posiblemente no
     est funcionando.

  De la misma forma que apache, para cualquier problema debemos
  consultar la documentacin, que en Debian se instala en el paquete
  postgres-doc, y los ficheros de registro que ahora estarn en
  /var/log/postgres.log.


  99..  GGeessttiinn ccoommoo uussuuaarriioo ppoossttggrreess

  Hay ciertas herramientas de gestin de la base de datos que son
  necesarias conocer para utilizarlas como usuario 'postgres'. Veremos
  ms adelante su uso particular para la base de datos que se va a
  crear, pero no est de ms recordarlas aqu. Al instalar la
  distribucin de postgres, quedarn instalados en el directorio
  /usr/lib/postgresql/bin los programas que son necesarios para
  gestionar "desde cero" la base de datos. Estos programas estarn en el
  PATH del usuario postgres.

  Antes de nada es necesario tener clara una cosa del sistema de base de
  datos. Un sistema de base de datos es una coleccin de bases de datos
  administradas por el mismo usuario, fsicamente el sistema as como
  cada base de datos, es una serie de ficheros pertenecientes al usuario
  y que el servicio _p_o_s_t_m_a_s_t_e_r se encarga de gestionar, en el caso de
  Debian estos ficheros se instalan por defecto en
  /var/lib/postgres/data. La ventaja de esta filosofa es que para mover
  la base de datos o hacer una copia de seguridad de sta basta con
  copiar los ficheros de la misma.


    cleardbdir: destruye todas las bases de datos instaladas. Slo se
     utiliza cuando se quiere reinicializara el sistema de base de datos
     y es necesario para el demonio _p_o_s_t_m_a_s_t_e_r.

    initdb: crea un nuevo sistema de base de datos, crea los
     directorios necesarios para el sistema y la base de datos _t_e_m_p_l_a_t_e_1
     que se trata de la plantilla a travs de la cual se generarn el
     resto de las bases de datos. En un sistema en el que se haya
     instalado correctamente la base de datos esto se habr realizado ya
     y el usuario no tendr que hacerlo.

    initlocation: prepara un directorio para albergar el sistema de
     base de datos.

    pg_passwd: permite manipular el fichero de contraseas de la base
     de datos. Se trata de una aplicacin similar al programa passwd
     pero para el sistema de base de datos.

    pg_upgrade: permite actualizar el sistema de base de datos. Cuando
     se cambia de versin del sistema de base de datos es necesario
     actualizar los datos ya que sino sern incompatibles con el nuevo
     sistema. Este programa facilita el movimiento de una versin a
     otra.

    pg_dump y pg_dumpall vuelcan (una base de datos en el caso del
     primero y todas las bases el segundo), las ordenes SQL necesarias
     en un fichero ASCII de forma que la base de datos se pueda
     recuperar a travs de ste. Sin hacer uso de ninguna opcin la base
     de datos ser volcada con todos los datos incluidos. Al tratarse de
     SQL estndar, este mismo fichero puede usarse para crear de nuevo
     la base de datos en otro sistema de bases de datos, facilitando la
     migracin a cualquier otro sistema.

    pg_id: devuelve el identificador de usuario correspondiente al
     usuario administrador de las bases de datos.
    createdb: crea una base de datos en nuestro sistema de base de
     datos. En realidad llama al interfaz pgsql para realizar esto.

    createuser: crea un usuario reconocido en el sistema de bases de
     datos. Los usuarios del sistema de base de datos_n_o tienen por qu
     tener relacin con los usuarios en nuestro sistema operativo,
     pudiendo haber usuarios distintos.

    destroydb: elimina una base de datos.

    destroyuser: elimina un usuario del sistema de bases de datos.


  El administrador de la base de datos necesita conocer estas
  herramientas para usarlas, si surge la necesidad. En particular,
  aquellas funciones que no se pueden hacer a travs del interfaz, ya
  que la creacin y destruccin de bases de datos y usuarios se podr
  hacer con las herramientas de gestin que ahora se analizarn.


  1100..  HHeerrrraammiieennttaass ddee ggeessttiinn ddee llaa bbaassee ddee ddaattooss

  Antes de hacer nada en el sistema de base de datos, ni crear usuarios
  ni otras bases de datos, deberemos conocer primero qu programas
  podremos usar para la gestin de la base de datos:


    pgsql: el interfaz en modo texto para acceder a la base de datos,
     permite realizar todas las funciones de acceso a una base de datos
     mediante rdenes SQL (teclear \h para acceder a la lista de todas
     las rdenes disponibles) y obtener tambin informacin del sistema
     de base de datos, como ver las bases de datos, los tipos de datos
     soportados, etc... para ver las rdenes disponibles teclear \?.

    pgaccess (ltima versin 0.98.4): interfaz en Tcl/Tk que permite
     visualizar las tablas, crearlas mediante un formulario de forma
     rpida, etc.. Es el interfaz ms evolucionado para postgresql
     aparte del interfaz textual. No son necesarios conocimientos de SQL
     para hacer uso de muchas de las funciones y permite administrar
     tanto la base de datos como los datos en s de una manera eficaz.
     En el caso de Debian para instalarlo es necesario instalar el
     paquete libpgtcl.

    gtksql (ltima versin 0.3): interfaz en Gtk a la base de datos.
     Muestra las tablas de la base de datos y permite hacer consultas
     SQL, visualizando el resultado en el mismo interfaz. Se trata de
     una herramienta an en desarrollo pero que le puede resultar til a
     un administrador para hacer tareas sencillas.

    gasql: un interfaz en Gtk para PostgreSQL desarrollado para el
     proyecto GNOME, an se encuentra en desarrollo, pero tiene algunas
     funcionalidades tiles.

  Estos programas nos van a ser tiles para poder acceder a la base de
  datos sin tener muchos conocimientos del funcionamiento de sta,
  aunque nos va a ser imprescindible el conocimiento del lenguaje SQL,
  podemos utilizarlas en muchas situaciones. Existen otras herramientas
  como wisql y owd que el autor an no ha probado, y sern comentadas en
  posteriores artculos.


  1111..  SSiigguuiieenntteess aarrttccuullooss

  En los siguientes artculos de esta serie vamos a analizar el
  desarrollo de una aplicacin especfica y a ver las herramientas
  necesarias para ofrecer un interfaz de acceso a nuestra base de datos
  mediante la WWW.

  Llevaremos a cabo el anlisis de la aplicacin as como su desarrollo
  y empezaremos a ver la ventaja de tener herramientas grficas de
  gestin de la base de datos para detectar errores y depurar la
  aplicacin.


  1122..  SSuummaarriiooss



  1133..  LLiissttaaddooss

  LISTADO 1-


  Para el lector interesado se recomienda buscar ms informacin en
  diversos servidores de web. Estos son:


    PostgreSQL: http://www.postgresql.org y su FAQ en
     http://www.postgresql.org/docs/.

    Apache: http://www.apache.org

    El HOWTO de PostgreSQL para Linux:
     http://metalab.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html

    PGaccess: http://www.flex.ro/pgaccess

    gtksql: http://www.mygale.org/ bbrox/GtkSQL

    gasql: http://www.gnome.org/applist

  Tambin para seguir esta serie puede ser conveniente algn
  conocimiento de bases de datos generales. Se recomienda el libro de
  Silberschatz, Korth y Sudarsan: "Database Systems Concepts, III ed, Mc
  Graw-Hill, 1996." (http://www.bell-labs.com/topic/books/db-
  book/index.html) que tambin ha sido traducido al castellano, otro
  libro tambin recomendado es el de Ullman y Widom: "A First Course in
  Database Systems" de 1997 editado por Prentice-Hall
  (http://www-db.stanford.edu/ ullman/fcdb.html).


  Para el lector que quiera profundizar en SQL podr encontrar muchos
  enlaces en la parte bibliogrfica del HOWTO de PostgreSQL para Linux
  aunque tambin es recomendable el tutorial disponible en
  http://w3.one.net/ jhoffman/sqltut.htm


  PIE LISTADO 1:Servidores donde encontrar ms informacin





  1144..  CCaappttuurraass


    postgresl.jpg: PostgreSQL es el sistema de base de datos libre ms
     potente del mundo.

    pgaccess.gif. PgAccess es un interfaz tremendamente til para la
     gestin de nuestro sistema de base de datos.

    gtksql.gif. Para los que quieran una simple "hoja SQL" gtksql es la
     herramienta a utilizar.


  1155..  NNoottaass ddee mmaaqquueettaacciinn



  1166..  NNoottaass ddee ccoooorrddiinnaacciinn

























































