1 Introducci[oacute]n a este art[iacute]culo#$+
KEn el art[iacute]culo anterior de la serie de bases de datos v[iacute]a la World Wide Web vimos los componentes de los que iba a formar parte nuestro sistema de acceso a la base de datos y las ventajas de utilizar GNU/Linux como sistema de desarrollo para nuestro proyecto. En este art[iacute]culo vamos a seguir en la l[iacute]nea dictada por el anterior determinando el componente que nos falta para desarrollar el sistema, en particular, el lenguaje a trav[eacute]s del cual vamos a programar el acceso la base de datos; veremos varias alternativas y nos decantaremos (por varias razones) por una de ellas.
Tambi[eacute]n vamos a hacer una breve introducci[oacute]n a la aplicaci[oacute]n que vamos a realizar, definiremos el esquema entidad-relaci[oacute]n y la conversi[oacute]n a tablas de la misma.
Quedar[aacute] para el siguiente art[iacute]culo el dise[ntilde]o del interfaz en s[iacute] y su implementaci[oacute]n con herramientas de generaci[oacute]n autom[aacute]tica.

2 Acceso a bases de datos mediante WWW#$+
KEl uso de Apache y PostgreSQL nos da la arquitectura necesaria para instalar un sistema de acceso a base de datos v[iacute]a WWW, pero como se puede dar cuenta el lector, a[uacute]n falta un componente intermedio ¿qui[eacute]n act[uacute]a de uni[oacute]n entre el servidor de WWW y el servidor de la Base de Datos? (ver Figura 1). 
****************** FIGURA 1*****************************
Es el dise[ntilde]ador el que ha de tomar la decisi[oacute]n de qu[eacute] se puede implementar entre la base de datos, y el servidor, aunque en realidad puede no ser en absoluto necesario que estos se comuniquen, como ahora veremos. Hay dos posibles soluciones a este problema, por un lado se puede mantener la arquitectura cliente/servidor a trav[eacute]s del protocolo HTTP, y por otro se puede romper esta arquitectura y separar los dos servidores de forma que el cliente utilice un m[eacute]todo de acceso distinto para cada uno. 
En este segundo caso (presentado en la Figura 3) el papel del servidor de WWW ser[iacute]a el de ofrecer la aplicaci[oacute]n que permite al cliente se comunicarse con la base de datos. Esta aplicaci[oacute]n estar[iacute]a necesariamente programada en Java y se distribuir[iacute]a como un applet dentro de una p[aacute]gina HTML. Esta posibilidad no va a ser tratada dentro de esta serie ya que rompe el esquema que hemos pretendido introducir, el dise[ntilde]o de esta aplicaci[oacute]n no ser[iacute]a con tecnolog[iacute]as est[aacute]ndar de la WWW (formularios, p[aacute]ginas, etc..) sino que ser[iacute]a realizada ad hoc para el problema particular al que nos enfrentamos. El interfaz gr[aacute]fico se realizar[iacute]a con los elementos proporcionados por el lenguaje Java (ya sea AWT o Swing), y la comunicaci[oacute]n con la base de datos se har[iacute]a a trav[eacute]s del est[aacute]ndar JDBC.
******************** FIGURA 3 **************************
Para el primer caso (mostrado en la figura 2) tenemos varias posibilidades de comunicaci[oacute]n entre el servidor y el sistema de base de datos, todas tienen en com[uacute]n el hecho de que nos van a permitir "introducir" la aplicaci[oacute]n como elemento dentro de p[aacute]ginas HTML normales. Utilizando tags especiales podremos incorporar los elementos de programaci[oacute]n de dichos lenguajes,  que ser[aacute]n preprocesados antes de enviar la p[aacute]gina al cliente. El cliente, por tanto, no ser[aacute] consciente de la existencia de una base de datos por debajo por que, por lo que a [eacute]l respecta, los datos se devuelven de la misma forma de lo que est[aacute] acostumbrada a ver cualquier persona que navega por la WWW. Para realizar la entrada de datos se utilizar[aacute]n, pues, formularios como se definen en el est[aacute]ndar HTML, cuyos datos ser[aacute]n procesados dentro de la programaci[oacute]n de las otras p[aacute]ginas. 
******************** FIGURA 2 *************************
Tenemos varios m[eacute]todos para hacer esto:
· mod[lowbar]perl. Se trata de un m[oacute]dulo para Apache que permite introducir c[oacute]digo Perl (Practical Extraction and Report Language) en las p[aacute]ginas, de forma que se pueda obtener un comportamiento din[aacute]mico. As[iacute]mismo, permite acelerar la ejecuci[oacute]n de CGI's ya escritos en Perl entre un 400[percnt] y un 2000[percnt], ya que, al introducirlo el Apache, desaparece la sobrecarga de inicializaci[oacute]n del int[eacute]rprete (que siempre estar[aacute] cargado). Usando Perl, junto con el m[oacute]dulo DBI, podemos acceder, de forma transparente, a cualquier base de datos. Este mecanismo se usa en m[uacute]ltiples servidores "activos" como urlnam. 
· PHP/FI (Hypertext Preprocessor, antes Personal HomePage). Se trata de un lenguaje de programaci[oacute]n que puede introducirse dentro de p[aacute]ginas HTML, con una sintaxis parecida a C, y funciones similares a las que realiza el lenguaje ASP para el Servidor de Informaci[oacute]n de Microsoft, pero se trata de una implementaci[oacute]n libre y, por tanto, mucho m[aacute]s abierta. PHP/FI pas[oacute] de ser una aplicaci[oacute]n para construir p[aacute]ginas personales (con contadores y elementos parecidos) a utilizarse en gran n[uacute]mero de servidores profesionales. Este lenguaje soporta la comunicaci[oacute]n con bases de datos, y est[aacute] disponible tanto como CGI independiente como m[oacute]dulo en Apache. Soporta las bases PostgreSQL, MySQL y msql. 
· www-sql. Es un sencillo lenguaje para introducir consultas SQL en p[aacute]ginas HTML, de forma que [eacute]stas sean preprocesadas por un programa antes de enviar la p[aacute]gina al cliente. Actualmente s[oacute]lo tiene soporte para las bases de datos PostgreSQL y MySQL.
Como se puede ver, las alternativas a la hora de hacer el dise[ntilde]o son abundantes y dependen, en gran medida, de la versatilidad que se quiera tener a la hora de implementar la aplicaci[oacute]n. La alternativa de introducir Perl en las p[aacute]ginas es quiz[aacute]s la m[aacute]s vers[aacute]til, ya que, una vez hecho se puede hacer uso de cualquiera de los m[oacute]dulos de Perl para casi cualquier funci[oacute]n conocida (como por ejemplo conectarse a tel[eacute]fonos m[oacute]viles con WAP). El lenguaje PHP es tambi[eacute]n muy vers[aacute]til, aunque no tanto como Perl, y se encuentra m[aacute]s limitado en el acceso a base de datos. Finalmente, www-sql es una librer[iacute]a mucho m[aacute]s espec[iacute]fica, con un pseudo-lenguaje de programaci[oacute]n mucho menos expresivo que los anteriores (tiene pocos sistemas de bucles y pocas funciones para manipular los datos).
Como quiera que en el proyecto que vamos a abordar no va a ser en exceso complicado, vamos a elegir la alternativa que m[aacute]s sencilla va a resultar de implementar, que ser[aacute] www-sql (en su versi[oacute]n para PostgreSQL, es decir www-pgsql).

3 Instalaci[oacute]n de www-pgsql#$+
KLa instalaci[oacute]n de este lenguaje ser[aacute] bastante sencilla. Es necesario instalar la aplicaci[oacute]n en si, lo cual logramos instalando el paquete www-pgsql en un sistema Debian GNU/Linux (para otras distribuciones mirar el listado 2).
************** LISTADO 2******************************+
Una vez hecho esto, se deber[iacute]a haber instalado un programa (www-pgsql) en la localizaci[oacute]n de los CGI scripts de nuestro sistema, este ser[aacute] generalmente /usr/lib/cgi-bin, aunque puede modificarse por el fichero de configuraci[oacute]n de Apache srm.conf (en la l[iacute]nea ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/). Lo que hace falta ahora es modificar tanto  nuestro servidor de WWW como nuestra base de datos para que sea posible acceder a trav[eacute]s de este sistema.
Para modificar a Apache, lo que vamos a hacer es modificar su fichero de configuraci[oacute]n srm.conf, para que todos los ficheros que terminen en .pgsql sean procesados por el programa que acabamos de instalar. A[ntilde]adiendo lo siguiente: 

# Para www-pgsql 
AddHandler www-pgsql pgsql 
Action www-pgsql /cgi-bin/www-pgsql

 Esto permitir[iacute]a que cuando  a Apache  le sea solicitado un fichero que tenga como extensi[oacute]n pgsql, enviar[aacute], antes de devolverlo al cliente que lo ha pedido, este fichero a un programa (/cgi-bin/www-pgsql) para que lo procese. Lo que ser[aacute] enviado al cliente ser[aacute] el resultado de este programa. Para poder activar esta directiva es necesario que en el fichero htttp.conf est[eacute] definida la carga del m[oacute]dulo mime[lowbar]module.
Para modificar el a gestor de la base de datos PostgreSQL y que nuestro script pueda funcionar, es necesario editar los ficheros de configuraci[oacute]n para permitir varias cosas. Por un lado es necesario habilitar la posibilidad de conectarse a la base de datos a trav[eacute]s de TCP/IP, de no estar habilitado s[oacute]lo los clientes en la m[aacute]quina local podr[iacute]an hacerlo. www-pgsql realiza una conexi[oacute]n TCP/IP con el sistema de base de datos (aunque est[eacute] instalado en el mismo servidor) y ser[aacute]  necesario habilitarlo, lo que lanzar[aacute] al demonio de gesti[oacute]n de la misma con la opci[oacute]n -i. Para ello modificamos el fichero de configuraci[oacute]n del gestor de la base de datos (en Debian GNU/Linux /etc/postgres/postmaster.init) para a[ntilde]adir lo siguiente:

# Whether to allow connections through TCP/IP as well as through Unix 
# sockets: yes/no. 
# By default, for greater security, we do not allow TCP/IP access. 
# This means that only users on this machine can access the database. 
PGALLOWTCPIP=yes

A continuaci[oacute]n es necesario modificar la configuraci[oacute]n de la base de datos para que permita acceso, sin clave, desde el ordenador local, por defecto, en el fichero /var/postgres/data/pg[lowbar]hba.conf. Se hace esto s[oacute]lo para conexiones a trav[eacute]s de sockets en dominio UNIX (local) y a trav[eacute]s de localhost (direcci[oacute]n IP: 127.0.0.1), pero es necesario habilitarlos para nuestra direcci[oacute]n IP. Suponiendo que nuestra direcci[oacute]n IP fuera 192.168.1.1, modificar[iacute]amos el fichero para que queda de la siguiente forma: 

# Por defecto, permite cualquier cosa en sockets dominio UNIX y 
localhost 
local        all                                         trust 
host         all         127.0.0.1     255.255.255.255   trust  
# A[ntilde]adido para www-pgsql 
host         all         192.168.1.1   255.255.255.255     trust

Hay que tener cuidado, sin embargo, ya que esta configuraci[oacute]n abre un posible agujero de seguridad en la base de datos. Si un usuario pone ficheros, al margen de la aplicaci[oacute]n que vamos a desarrollar aqu[iacute], con la extensi[oacute]n pgsql y un cliente un cliente a ellos podr[aacute] poner arbitrariamente cualquier c[oacute]digo SQL dentro de p[aacute]ginas WWW que podr[iacute]an descubrir informaci[oacute]n reservada de la base de datos. No vamos a cubrir este aspecto en esta serie de art[iacute]culos, pero el usuario interesado podr[aacute] ver la forma de inhabilitar el acceso a esta directiva (salvo en las zonas del servidor que le interesen) en la documentaci[oacute]n del servidor Apache.
De esta forma tendr[iacute]amos la siguiente configuraci[oacute]n (mostrada en la figura 4): 
· Cuando el servidor de WWW detecte un acceso a una p[aacute]gina terminada en .pgsql la enviar[aacute] al programa www-pgsql para que la procese.
· El programa www-pgsql procesar[aacute] las directivas de conexi[oacute]n a la base de datos (m[aacute]s adelante se ver[aacute] c[oacute]mo) y las enviar[aacute] al gestor de base de datos  de PostgreSQL (postmaster).
· El demonio gestor de la base de datos recibir[aacute] las directivas sql y las procesar[aacute] (gracias a que le hemos habilitado el acceso).
· El programa recoge los resultados y los utiliza para modificar la presentaci[oacute]n de la p[aacute]gina.
· La p[aacute]gina con sus modificaciones es devuelta al cliente de WWW que la mostrar[aacute] al usuario.
En realidad algunos de estos cambios (as[iacute] como la creaci[oacute]n de un usuario para acceder a la base de datos como se ver[aacute] m[aacute]s adelante) son necesarios porque  www-pgsql establece necesariamente conexiones a trav[eacute]s de sockets TCP/IP. Lo hace aunque la conexi[oacute]n se realice con el propio ordenador local (con el que podr[iacute]a establecer conexiones a trav[eacute]s de sockets en el dominio UNIX). Es posible modificar las fuentes del programa para cambiar esto,  pero supondremos que el usuario dispone del programa original sin ning[uacute]n tipo de modificaciones.

4 Ejemplo de un proyecto#$+
KVistas ya todas las herramientas que vamos a utilizar, vamos a ver ahora el problema concreto sobre el que se van a aplicar para demostrar su uso.
El proyecto que se va a abordar es la creaci[oacute]n de una Asociaci[oacute]n de Antiguos Alumnos en Internet, el objetivo es que, a trav[eacute]s de un cliente universal (un navegador de la WWW) se pueda acceder a una base de datos de informaci[oacute]n de Antiguos Alumnos de una determinada organizaci[oacute]n (instituto, escuela o universidad). Desde el servidor debe ser posible que las personas den de alta su informaci[oacute]n personal y que puedan consultar la informaci[oacute]n de personas de la asociaci[oacute]n a trav[eacute]s de formularios creados al efecto. 
Para asentar m[aacute]s el problema, vamos a indicar que el objetivo de dicha asociaci[oacute]n va a ser el de poder mantener en contacto a personas independientemente de su situaci[oacute]n personal actual (trabajo), de forma que una persona que est[eacute] buscando a otra que pertenezca a la asociaci[oacute]n, pueda hacerlo de una forma r[aacute]pida. De esta manera se pueden perpetuar los lazos de comunicaci[oacute]n existentes entre las personas antes de abandonar la organizaci[oacute]n, pero traslad[aacute]ndolos a un nuevo medio (correo electr[oacute]nico e Internet). 
En primer lugar vamos a abordar la parte esencial de este proyecto, evidentemente, si se estuviera dise[ntilde]ando este proyecto se deber[iacute]an plantear objetivos posteriores a [eacute]ste, tales ser[iacute]an, por ejemplo, la creaci[oacute]n de un tabl[oacute]n de anuncios para fomentar la comunicaci[oacute]n entre asociados o la generaci[oacute]n de una lista de correo para la comunicaci[oacute]n hacia todos los asociados de una forma directa. Vamos a centrarnos, sin embargo en la primera parte del proyecto.

5 Esquema entidad relaci[oacute]n#$+
KA la hora de concretar la base de datos que va a necesitar nuestro proyecto es necesario hacer uso de una serie de metodolog[iacute]as para poder convertir la idea que tenemos del mismo en tablas que vayan a ser almacenadas en la base de datos.
El paso del concepto abstracto que se tiene del proyecto a la concreci[oacute]n de los elementos f[iacute]sicos (tablas) que maneja una base de datos no es, ni mucho menos, un paso inmediato y ni siquiera lleva siempre a la misma soluci[oacute]n. Perspectivas distintas y distintos objetivos en la aplicaci[oacute]n llevar[aacute]n a desarrollar distintas tablas.
Sin embargo es necesario partir de un diagrama concreto, conocido como de entidad-relaci[oacute]n que nos permite concretar la "idea del mundo" de nuestra aplicaci[oacute]n. El dise[ntilde]o de estos diagramas hace necesario conocer cierta teor[iacute]a de las bases de datos y tener cierta experiencia en su manejo. No se va aqu[iacute] a explicar los pasos dados hasta llegar a [eacute]l sino que se va a explicar el elegido, y que se muestra en la  figura 5:
********************** FIGURA 5 ****************************
· Entidades: 
· Persona. Se trata del objeto principal de la base de datos y almacena la informaci[oacute]n personal caracter[iacute]stica de un individuo. Tiene como atributos la informaci[oacute]n de la direcci[oacute]n de esta persona (calle, ciudad, pa[iacute]s, c[oacute]digo postal) y la personal (nombre, apellido, dni/pasaporte, fecha de nacimiento). Se le a[ntilde]ade un atributo espec[iacute]fico para la base de datos que es la promoci[oacute]n (o a[ntilde]o de salida de la organizaci[oacute]n). Como atributo un[iacute]voco de dicha base de datos, y que servir[aacute] para identificar a los individuos se va a escoger el n[uacute]mero de identidad (o dni), siendo [eacute]ste la clave primaria.
· Tel[eacute]fono. Se trata de un objeto secundario, con un [uacute]nico atributo, el n[uacute]mero de tel[eacute]fono (que en realidad podr[iacute]a partirse en prefijo internacional/prefijo nacional, pero que dejamos as[iacute] por simplicidad).
· Correo electr[oacute]nico. Otro objeto secundario con un [uacute]nico atributo, la direcci[oacute]n de correo.
· Empresa. Se trata de la caracterizaci[oacute]n de los lugares de trabajo de las personas, se compone de los siguientes atributos: nombre, direcci[oacute]n de la empresa (calle, ciudad, pa[iacute]s y c[oacute]digo postal), actividad o sector en el que se desarrolla la empresa, y n[uacute]mero de empleados. Como caracter[iacute]stica [uacute]nica escogeremos el nombre de la misma, de tal forma que no podr[aacute]  haber en la base de datos dos empresas con el mismo nombre.
· Relaciones: 
· Trabaja en. Se trata de una relaci[oacute]n entre personas y empresas, que determina que una determinada persona tiene un determinado puesto en una empresa, por ello como caracter[iacute]stica de dicha relaci[oacute]n tenemos el atributo 'puesto'.
Este dise[ntilde]o lo materializamos en cinco tablas que ser[aacute]n las creadas dentro de la base de datos, como veremos m[aacute]s abajo.

6 Creaci[oacute]n de la base de datos#$+
KUna vez definido el esquema entidad relaci[oacute]n vamos a crear la base de datos en nuestro sistema de bases de datos. Primero, vamos a proceder a crear dos usuarios para poder gestionar la base de datos, en primer lugar el usuario alumni que ser[aacute] el "due[ntilde]o" de la base de datos de nuestro proyecto, y por otro lado un usuarioque ser[aacute] utilizado para acceder a los datos. Para acceder a los datos podr[iacute]amos utilizar el usuario www-data, que es el usado por defecto por  el interfaz www-pgsql, pero es necesario tener en cuenta a la hora de crearlo y otorgar permismos que es necesario encerrarlo entre comillas (debido al uso del car[aacute]cter '-' en el nombre). Tambi[eacute]n podemos utilizar, si nos es m[aacute]s conveniente, el usuario nobody, los ejemplos aqu[iacute] ser[aacute]n con [eacute]ste [uacute]ltimo.
Es necesario crear el usuario 'alumni' dentro de nuestro sistema, ya que, adem[aacute]s de ser el que administre la base de datos ser[aacute] tambi[eacute]n en su directorio de usuario (/home/alumni/public[lowbar]html) donde vamos a alojar sus p[aacute]ginas (para que sean accesibles como http://miservidor/[tilde ]alumni). Lo haremos de la forma habitual (esto es, con adduser) aunque convendr[iacute]a dejarlo, de momento con la contrase[ntilde]a bloqueada.
Para terminar con la asignaci[oacute]n de privilegios , tenemos que dar acceso a estos usuarios a la base de datos.  Para ello tenemos que "convertirnos" en usuario postgres, que es el responsable de dar de alta usuarios dentro del sistema de base de datos: haremos (como superusuario) su - postgres y crearemos tanto los usuarios como la base de datos que van a utilizar, que no ser[aacute] m[aacute]s que un directorio (dentro de /var/postgres/data/base). Un ejemplo de la sesi[oacute]n la tenemos en el listado 1.
Conviene distinguir, llegados a este punto, que los usuarios de la base de datos no han de existir necesariamente como usuarios de nuestro sistema, ya que a la hora de conectar con [eacute]sta utilizaremos un nombre de usuario determinado. Sin  embargo, por simplicidad, aqu[iacute] se van a usar los mismos usuarios en nuestro sistema operativo y en el gestor de bases de datos.
********************** LISTADO 1 ***************************
Una vez creados los usuarios podemos "convertirnos" en usuario alumni (con su - alumni como superusuario) y crear las tablas en la base de datos. Para ello nos conectaremos, bien v[iacute]a el interfaz de l[iacute]nea de comandos psql o mediante el interfaz gr[aacute]fico pgaccess (ver Figura 6). Dado que el interfaz de texto es m[aacute]s ilustrativo para el administrador es el que vamos a tratar aqu[iacute]. Las [oacute]rdenes SQL para crear las tablas las tenemos en el listado 3, para ejecutarlas, s[oacute]lo tendremos que conectarnos a la base de datos con psql alumni y ejecutarlas tal cual est[aacute]n escritas all[iacute] (teniendo en cuenta s[oacute]lo que tras mandar una orden SQL hay que terminarla con el car[aacute]cter ';'). 
********************** FIGURA 6 *******************************
********************* LISTADO 3 ****************************
Lo [uacute]nico que quedar[aacute] tras crear las tablas es dar los permisos al usuario nobody para que pueda acceder a [eacute]stas, lo hacemos con la siguiente orden SQL: grant select on empresa, persona, trabaja[lowbar]en, usa[lowbar]mail, usa[lowbar]tfo to nobody. Una vez hecho esto podr[iacute]amos ver los permisos actuales con .
******************** FIGURA 7 ********************
En general, se pueden ver todas las [oacute]rdenes que podemos enviar desde el interfaz con  y todas las [oacute]rdenes administrativas importantes (listar tablas, permisos, usuarios...) las vemos con . Conviene acudir a la p[aacute]gina de manual (man psql) para conocer m[aacute]s sobre esta herramienta y a la documentaci[oacute]n de PostgreSQL (en Debian GNU/Linux se instala con el paquete postgresql-doc) en /usr/doc/postgresql.

7 Resumen#$+
KEn este art[iacute]culo se ha abordado el concepto de interfaz entre la base de datos y el servidor de WWW que es el que nos va a permitir, m[aacute]s adelante, enlazar, a trav[eacute]s de la programaci[oacute]n en p[aacute]ginas HTML,  el interfaz del usuario con la base de datos.  Ya hemos creado nuestra base de datos de ejemplo con el que trabajaremos en el siguiente art[iacute]culo, lo [uacute]nico que nos falta es crear el interfaz v[iacute]a WWW sobre el que se va a construir la aplicaci[oacute]n final.

8 Sumarios#$+
K¿Qu[eacute] act[uacute]a de uni[oacute]n entre el servidor y la base de datos?.
Por su sencillez, escogemos www-sql como alternativa.
Es necesario modificar Apache y PostgreSQL para preparar el interfaz.
Se va a abordar un ejemplo concreto.
La definici[oacute]n del esquema entidad relaci[oacute]n es necesaria.
Se van a crear tablas en funci[oacute]n del esquema.
Necesitamos crear la base de datos y los usuarios.
Las conexiones a la base de datos la hacemos como el usuario creado.
Psql es la manera m[aacute]s ilustrativa de modificar la base de datos.
S[oacute]lo falta crear el interfaz WWW.

9 Listados#$+
K
#KLISTADO 1-

postgres@fuego:~$ createuser alumni 
Enter user's postgres ID or RETURN to use unix user ID: 1013 ->  
Is user "alumni" allowed to create databases (y/n) y 
Is user "alumni" a superuser? (y/n) n 
createuser: alumno was successfully added 
postgres@fuego:~$ createuser nobody 
Enter user's postgres ID or RETURN to use unix user ID: 65534 ->  
Is user "nobody" allowed to create databases (y/n) n 
Is user "nobody" a superuser? (y/n) n 
createuser: nobody was successfully added 
Shall I create a database for "nobody" (y/n) n 
don't forget to create a database for nobody 
postgres@fuego:~$ createdb alumni

PIE LISTADO 1: Creaci[oacute]n de los usuarios y de la base de datos
#KLISTADO 2
En general los lenguajes de interfaz a los sistemas de base de datos v[iacute]a web podremos encontrarlos incorporados a nuestra distribuci[oacute]n favorita, los paquetes relacionados en Debian GNU/Linux se indican a continuaci[oacute]n, pero si no dispone de ellos en su distribuci[oacute]n puede acudir a lista m[aacute]s abajo para recoger las fuentes e instalarlas en su sistema.
· Paquetes relacionados con www-sql: 
· www-mysql: La interfaz a la base de datos MySQL.
· www-pgsql: La interfaz a la base de datos PostrgreSQL.
· Paquetes relacionados con el m[oacute]dulo de perl de Apache: 
· libapache-mod-perl: El m[oacute]dulo de Perl para Apache, puede ser utilizado para introducir c[oacute]digo en p[aacute]ginas HTML junto con libhtml-embperl-perl [oacute] libhtml-ep-eperl.
· libapache-dbi-perl: M[oacute]dulo que se puede usar junto con un int[eacute]rprete de Perl embebido para acceder transparentemente a bases de datos utilizando Perl::DBI.
· libapache-asp-perl: el sistema ASP (Active Server Pages) migrado a Apache y con soporte de Perl.
· libapache-dbilogger-perl: m[oacute]dulo de Apache para poder seguir las transferencias a trav[eacute]s de los accesos DBI.
· Paquetes relacionados con PHP y conectividad a bases de datos: 
· php3-cgi: ofrece un ejecutable independiente que se puede comportar como un CGI para procesar p[aacute]ginas, y usar conjuntamente con diversas ampliaciones para conectarse a distintas bases de datos:  php3-cgi-msql, php3-cgi-mysql, y php3-cgi-pgsql.
· php3: m[oacute]dulos para Apache de PHP, se puede utilizar conjuntamente con php3-mysql, php3-pgsql y php3-msql.
· www-sql. Se puede leer m[aacute]s informaci[oacute]n en urlnam, y lo podemos descargar de urlnam, si no disponemos de un paquete disponible en nuestra distribuci[oacute]n favorita. 
· Para conocer m[aacute]s sobre la integraci[oacute]n de Perl y Apache, la mejor fuente de informaci[oacute]n es urlnam 
· Para conocer m[aacute]s sobre PHP, debemos acudir a  urlnam, si lo que se desea es descargarlo, ir directamente a urlnam.
PIE LISTADO 2: Informaci[oacute]n de los lenguajes de interfaz WWW-BD
#KLISTADO 3-

create table empresa  
( idempresa             int not null, 
  nombre                text not null, 
  ciudad                text, 
  calle                 text, 
  pais                  text, 
  codigo_postal         int, 
  actividad             text, 
  num_empleados         int, 
  pagina_www            text, 
  primary key (idempresa) 
) 

create table persona 
( dni                   int not null, 
  nombre                text, 
  apellidos             text, 
  calle                 text, 
  ciudad                text, 
  codigo_postal         int, 
  pais                  text, 
  graduacion            int, 
  ingreso               int, 
  fecha_nacimiento      date, 
  pagina_personal       text, 
  primary key (dni) 
) 

create table trabaja_en  
( dni                   int not null, 
  idempresa             int not null, 
  puesto                text, 
  departamento          text, 
  primary key (dni, idempresa) 
) 

create table usa_mail 
( dni                   int not null, 
  e_mail                text not null, 
  primary key (dni, e_mail) 
) 

create table usa_tfo 
( dni                   int not null, 
  telefono              text not null, 
  primary key (dni, telefono) 
)

PIE LISTADO 3: Tablas a crear en la base de datos

10 Capturas#$+
K
· Figura 1 (enlacebd.png) Pie: Falta un componente entre la base de datos y el servidor de WWW. #K
· Figura 2 (enlacebd2.png) Pie: Aplicaci[oacute]n en el lado del servidor. #K
· Figura 3 (enlacebd3.png) Pie: Aplicaci[oacute]n en el lado del cliente. #K
· Figura 4 (acceso.png) Pie: Pasos del m[eacute]todo de acceso a la base de datos #K
· Figura 5 (entidadrel.png) Pie: Esquema entidad relaci[oacute]n del proyecto- #K
· Figura 6 (creagrafico.png) Pie: Creaci[oacute]n de las tablas de forma gr[aacute]fica. #K
· Figura 7 (psql.png) Pie: El interfaz de texto de PostgreSQL #K

11 Notas de maquetaci[oacute]n#$+
KDado que en este art[iacute]culo tiene muchos listados y capturas quiz[aacute]s el texto no llegue, por s[iacute] s[oacute]lo, a las cuatro p[aacute]ginas previstas, pero se considera fundamental incluir todas las gr[aacute]ficas ya que el texto tiene muchas referencias a ellos.
Caso de ser necesario el orden de preferencia es el que sigue: figura 6, figura 3, figura 1, figura 7, figura 2. El resto (capturas y listados) conviene no quitarles porque se perder[iacute]a demasiada informaci[oacute]n.

12 Notas de coordinaci[oacute]n#$+
KEl siguiente art[iacute]culo quiz[aacute]s sea m[aacute]s largo de lo que he planteado pero a[uacute]n no lo tengo decidido as[iacute] que quiz[aacute]s me haga falta un art[iacute]culo m[aacute]s para cerrar la serie. Cuando haya escrito el siguiente ya lo dir[eacute].