• No se han encontrado resultados

Herramientas de gestión de la Base de Datos.

N/A
N/A
Protected

Academic year: 2022

Share "Herramientas de gestión de la Base de Datos."

Copied!
28
0
0

Texto completo

(1)

Capítulo 2

Herramientas de gestión de la Base de Datos.

En este capítulo se presentan las distintas aplicaciones que se han desarrollado para gestionar la información almacenada en la base de datos. Como se expuso en el capítulo 1, una característica muy importante de la base de datos

ieee

es que puede ser gestionada desde cualquier ordenador del mundo que tenga acceso a internet, de modo que todas las herramientas presentadas en el este capítulo se han desarrollado para que cumplan dicho objetivo, siendo, por tanto, accesibles desde cualquier navegador web con interfaz gráfica.

Las herramientas desarrolladas son las siguientes:

- Update DataBase: aplicación que permite añadir nueva información a la base de datos y reemplazar o eliminar tuplas cuyos datos sean incorrectos.

- Download DataBase: aplicación que permite descargar copias de seguridad de la base de datos.

- DataBase Content Query: aplicación que permite consultar la información almacenada en la base de datos.

(2)

- Statistics: conjunto de dos aplicaciones que permite realizar estadísticas de la información contenida en la base de datos.

La parte dinámica o lógica de todas estas aplicaciones se ha desarrollado en lenguaje PHP, mientras que la parte estática o “visual” se ha desarrollado en HTML1.

En los siguientes apartados de este capítulo se explica en profundidad el funcionamiento de cada una de las aplicaciones citadas. Todos los apartados tienen una estructura común: comienzan con una introducción en la que se justifica la funcionalidad de la aplicación, continuan con una explicación detallada de las distintas opciones de ejecución que la misma permite y concluyen con una o varias capturas de pantalla de la propia aplicación en las que se pueden apreciar los diversos elementos con los que interactúa el usuario.

2.1.- Update DataBase2

2.1.1.- Justificación de la funcionalidad

Puesto que una base de datos carecería de utilidad si la información que almacena no fuese actualizada periódicamente, en cualquier sistema de gestión de bases de datos se hace totalmente imprescindible una aplicación que permita al usuario llevar a cabo dicha tarea de actualización. En el conjunto de aplicaciones web desarrolladas en el presente proyecto, la herramienta destinada a facilitar las labores de actualización de la base de datos

ieee

se denomina

Update DataBase

.

1 Para visualizar el listado completo del código fuente desarrollado en lenguaje PHP, véase el apartado A.1.- Herramientas de gestión de la base de datos en el apéndice A, pág. 86.

Para visualizar el listado completo del código fuente desarrollado en lenguaje HTML, véase el apartado A.3.- Plantillas de las herramientas de gestión de la base de datos en el apéndice A, pág. 142.

2 Para visualizar un ejemplo de uso de la herramienta Update DataBase, véase el apartado 4.2.- Acción 2: Agregar a la base de datos la información contenida en ficheros con formato csv en el capítulo 4, pág. 59.

Para visualizar el código fuente completo de la aplicación Update DataBase, véase el apartado A.1.1.- Update DataBase en el Apéndice A, pág. 87.

(3)

2.1.2.- Funcionamiento

Esta aplicación permite realizar cuatro acciones diferentes sobre la base de datos. Estas acciones son las siguientes:

- Acción 1: agregar nuevas filas.

- Acción 2: eliminar todas las filas que contengan una direccón de e-mail determinada.

- Acción 3: reemplazar las direcciones de e-mail de las filas que contengan una dirección de e-mail determinada por otra dirección de e-mail indicada por el usuario.

- Acción 4: eliminar filas que cumplan las condiciones indicadas por el usuario en unas cajas de texto.

Para ejecutar las tres primeras acciones se precisa de la información contenida en un fichero en formato csv, cuyos campos deben estar separados por el carácter

punto y coma

. Por el contrario, dado que al ejecutar la acción número cuatro los datos necesarios se introducen en cajas de texto, no es necesario especificar ningún fichero adicional.

Para hacer uso de la información contenida en el fichero csv con el que se actualiza la base de datos, dicho fichero se lee por líneas. Al leer cada línea, se separan en primer lugar los distintos campos que la componen3, que son los que se utilizan para llevar a cabo el proceso de actualización.

Todos los campos que conforman la línea leída se agrupan en un array, cuyo nombre es

datos

.

El proceso de dividir cada línea en los campos que la constituyen y agrupar estos campos en un array lo lleva a cabo la función

fgetcsv()

de PHP. En el siguiente cuadro se aprecia cómo mediante dicha función se agrupan los distintos campos de cada línea en un array de nombre

datos

:

$datos=fgetcsv($descriptor_fichero, 4096, ";")

Cuadro 2.1. Uso de la función fgetcsv() y agrupación de campos en el array datos.

En caso de que el número de campos que constituyen cada línea del fichero

csv

no coincida con el número de campos requerido por cada una de las tres acciones nombradas anteriormente que hacen uso de dicho fichero, no se actualizará la base de datos y se detendrá la ejecución del programa.

3 Para obtener un listado completo de los campos que componen cada línea, véase el apartado 1.2.1.- Base de datos en el capítulo 1, pág. 4.

(4)

El bloque de código que se encarga de realizar esta tarea se muestra en el cuadro siguiente:

while($datos=fgetcsv($descriptor_fichero, 4096, ";")){

$campos=count($datos);

80: $vacio=1;

if($campos>$columns){

for($i=$columns;$i<$campos;$i++){

if($datos[$i]!='') 85: $vacio=0;

} }

//Si el numero de campos por cada fila del 90: //fichero *.csv no es el correcto, se da un //mensaje de error y se detiene la ejecucion //del programa. La variable "vacio" esta a //"1" si en alguna fila hay mas campos de //los necesarios pero estos no contienen 95: //datos. Elmotivo de que se tenga en cuenta //esta variable es que, al guardar tablas //con extension csv, MS-Excel suele agregar //campos vacios al final de cada linea.

if(($campos=count($datos)<$columns)||

($vacio==0)){

100: $warning=1;

$msg1="Wrong structure found in

$uploadfile_aux. Error in line $linea.";

$msg2="&nbsp&nbsp There must be $columns fields per line in the selected csv file.";

$smarty->assign("warning",$warning);

$smarty->assign("msg1",$msg1);

105: $smarty->assign("msg2",$msg2);

$smarty->display("upload.tpl");

fclose($descriptor_fichero);

unlink($uploadfile);

exit;

110: }

$linea++;

}

Cuadro 2.2. Comprobación de la estructura del fichero csv de actualización.

Como se puede ver en el cuadro 2.2, para que no finalice indebidamente la ejecución del programa deberán cumplirse las dos condiciones siguientes:

- que el número de posiciónes del array

datos

, que será igual al número de campos que tiene el fichero de actualización en cada línea, sea igual o superior al necesario para que la acción elegida (de entre las tres posibles, nombradas al comienzo del presente apartado) pueda efectuarse.

- que el valor almacenado en la variable

vacio

sea distinto de cero.

(5)

El programa continuará su ejecución si se cumplen estas dos condiciones simultáneamente; es decir, si en cada línea del fichero de datos csv hay exactamente los campos necesarios para que se ejecute la acción elegida o, caso de que existan campos en exceso, estos campos en exceso están vacíos. En otro caso, la ejecución del programa finalizará.

El motivo de evaluar la condición

if(($campos=count($datos)<$columns)||($vacio==0))

es que el fichero en formato csv con el que se actualiza la base de datos se genera con MS-Excel, y este programa, al guardar la hoja de cálculo en el formato mencionado, suele añadir más campos de los que realmente existen. Estos campos que se añaden en exceso están vacíos. Por tanto, sólo se detendrá la ejecución del programa si el formato del fichero csv es distinto del que exige la acción que se intenta llevar a cabo.

Una vez hechas todas las aclaraciones anteriores, se verá en qué consiste cada una de las cuatro acciones posibles que se pueden llevar a cabo sobre la base de datos. Estas acciones son las siguientes:

Cuadro 2.3. Código fuente encargado de agregar nuevas tuplas a la base de datos.

- Agregar nuevas filas

Cuando se ejecuta la aplicación con esta opción activada, cada una de las líneas del fichero csv se agregará a la base de datos

ieee

como una nueva tupla.

Para añadir las líneas del fichero a la base de datos, cada una de ellas debe estar formada por catorce campos. Al agregar las nuevas tuplas, el primer campo de cada línea del fichero, que es un número de referencia, será ignorado y cada uno de los trece campos restantes se asignará a uno de los trece campos útiles de la tabla

ies_conf

. Como se adelantó en el capítulo 1, actualmente el campo

tema2

contiene la misma información que el campo

key1

, por lo que, al añadir una nueva tupla, se le asigna a ambos campos el mismo valor.

El bloque de código encargado de añadir las nuevas tuplas a la base de datos es el siguiente:

$result=db_query("INSERT INTO ies_conf(nombre, email,paper,confe,anyo,

tema,pais,area,mes,tema2,key1,key2,key3, afili,dummy)

135: VALUES ('$datos[2]','$datos[3]','$datos[1]', '$datos[11]','$datos[12]',

'$datos[7]','$datos[4]','$datos[5]', '$datos[13]','$datos[8]',

'$datos[8]','$datos[9]','$datos[10]', '$datos[6]','')");

(6)

Como se puede comprobar en el fragmento de código fuente del cuadro anterior, el campo en el campo

dummy

no se introduce ningún dato, ya que, según se expuso en el capítulo 1, se trata de un campo que se utiliza para la gestión manual de la base de datos4.

Cuadro 2.4. Código fuente encargado de eliminar tuplas de la base de datos.

- Eliminar filas con una dirección de e-mail determinada

Cuando se ejecuta la aplicación con esta opción activada, se eliminan de la base de datos todas aquellas filas cuyo campo

email

coincida con las direcciones de e-mail contenidas en el fichero csv seleccionado.

Para eliminar las filas de la base de datos, se lee cada línea del fichero, que en este caso debe tener un único campo, y se eliminan todas las tuplas de la base de datos cuyo campo

email

coincida con la dirección de e-mail obtenida de la línea leída.

El bloque de código encargado de eliminar las tuplas de la base de datos es el siguiente:

142: $result=db_query("DELETE FROM ies_conf WHERE `email`='$datos[0]'");

Cuadro 2.5. Código fuente encargado de reemplazar tuplas de la base de datos.

- Reemplazar direcciónes de e-mail determinadas

Cuando se ejecuta la aplicación con esta opción activada, se buscan las tuplas de la base de datos cuyo campo

email

coincide con la dirección de e-mail contenida en el primer campo de la línea que se haya leído del fichero csv y se sustituye la información contenida en el campo

email

de dichas tuplas por la dirección de e-mail contenida en el segundo campo de la línea leída.

En este caso, según se deduce del párrafo anterior, cada línea del fichero csv que se va a procesar debe tener dos campos.

El bloque de código encargado de sustituir las direcciones de e-mail de las tuplas de la base de datos es el mostrado a continuación:

147: $result=db_query("UPDATE ies_conf SET `email`='$datos[1]' WHERE

`email`='$datos[0]'");

4 Para obtener más información acerca del uso del campo dummy, véase apartado 1.2.1.- Base de datos del capítulo 1, pág. 4.

(7)

- Eliminar filas que cumplan determinadas condiciones especificadas por el usuario

Cuando se ejecuta la aplicación con esta opción activada, se buscan en la base de datos todas las tuplas que cumplan las condiciones especificadas por el usuario en varias cajas de texto y se eliminan dichas tuplas.

El usuario puede especificar hasta cuatro condiciones, que son las siguientes:

- nombre de un investigador

- dirección de e-mail de un investigador - nombre de una conferencia

- un año

Para especificar estas condiciones, se muestran cuatro cajas de texto, cada una de ellas destinada a almacenar una de las cuatro condiciones nombradas. En este caso, puesto que las condiciones se especifican directamente en cajas de texto, no hay que indicar ningún fichero adicional del que extraer información.

El código fuente encargado de eliminar de la base de datos las tuplas que cumplan las condiciones especificadas por el usuario es el siguiente:

180: $query1='';

$query2='';

$query3='';

$query4='';

if(isset($_POST["Name"])){

185: $var1=$_POST["Name_value"];

$query1="AND `nombre`='$var1'";

}

if(isset($_POST["email"])){

$var2=$_POST["email_value"];

190: $query2="AND `email`='$var2'";

}

if(isset($_POST["Confe"])){

$var3=$_POST["Confe_value"];

$query3="AND `confe`='$var3'";

195: }

if(isset($_POST["Year"])){

$var4=$_POST["Year_value"];

$query4="AND `anyo`='$var4'";

}

200:

if(($query1!='')||($query2!='')||($query3!='')||

($query4!='')){

//Se escriben en un fichero csv las filas que //se va a eliminar

write_file($file_path_deleted_rows,

$file_name_deleted_rows,$query1,$query2, $query3,$query4);

205:

(8)

Cuadro 2.6. Código fuente encargado de eliminar tuplas de la base de datos.

Como puede verse en el cuadro anterior, si el usuario especifica alguna condición para la eliminación de tuplas, se llama a la función

write_file()

, que escribe en un fichero en formato csv las filas que se van a eliminar para que, posteriormente, el usuario pueda proceder a la descarga de este fichero si lo considera oportuno. De este modo, en el supuesto de que descargue el fichero, puede comprobar si realmente eliminó las tuplas que deseaba y, en caso de haber eliminado otras, puede volver a introducirlas en la base de datos.

Para que las cajas de texto puedan ser accesibles, es decir, para que sea posible escribir en ellas, debe marcarse el

checkbox

correspondiente a la caja o cajas en las que se desea escribir; por tanto, se pueden activar hasta cuatro

checkbox

, uno por cada caja de texto. De igual modo, para que los cuatro

checkbox

sean accesibles, es decir, para que puedan ser activados, hay que marcar la opción correspondiente a

eliminar filas que cumplan determinadas condiciones especificadas por el usuario

. Para controlar que los

checkbox

y que las cajas de texto sólo sean accesibles en los casos expuestos, se ha utilizado código JavaScript, ya que este control se hace en la máquina local y no en la remota (el código JavaScript no lo ejecuta el servidor

woody

, sino el navegador en la máquina en la que está funcionando).

$result=db_query("DELETE FROM ies_conf WHERE 1".

"$query1"." $query2".

" $query3"." $query4");

2.1.3.- Capturas de pantalla

En la siguiente figura, se muestra el aspecto visual que presenta la aplicación:

(9)

Figura 2.1. Captura de pantalla de la aplicación Update DataBase.

Figura 2.2. Captura de pantalla de la aplicación Update DataBase mostrando una ventana emergente de ayuda.

Cuando se presiona el botón

Order?

mostrado en la figura 2.1, se visualiza una ventana que, en función de la acción a ejecutar, indica el orden que deben tener los distintos campos que forman cada línea del fichero csv con el que se actualizará la base de datos. De este modo, se libera al usuario de la necesidad de memorizar el orden de estos campos o de utilizar continuamente notas de ayuda para consultar dicho orden. La figura 2.2 muestra la captura de pantalla de lo que el usuario vería si pulsara el botón

Order?

con la opción

agregar nuevas filas

activada.

(10)

Cuadro 2.7. Función Show_Help().

Estas ventanas emergentes que proporcionan la ayuda se han programado haciendo uso del método

alert()

de JavaScript, tal como puede verse en el cuadro siguiente:

La función

Show_Help()

se dispara cuando se hace click en el botón

Order?

.

.2.- Download DataBase5

.2.1.- Justificación de la funcionalidad

uando una base de datos alberga cientos o miles de tuplas, es muy onveniente realizar copias de seguridad o backup’s de la misma, ya que n caso de que ocurra cualquier incidente en la copia original, la copia de eguridad realizada permite volver a la situación previa a dicho incidente

e manera rápida y sencilla.

a aplicación

Download DataBase

permite realizar copias de seguridad e toda la información contenida en la base de datos

ieee

y descargarlas l ordenador del usuario en un fichero de texto con formato csv.

.2.2.- Funcionamiento

dad en el servidor remoto

woody

y,

function Show_Help(formu){

if(formu.Action[0].checked)

alert("Correct order:\nID Number (It won't be stored); Paper; Name; e-mail; Country;

Geographical Area; Afiliation; Topic; Key1; Key2;

Key3; Conference; Year; Month");

else if(formu.Action[1].checked) 280: alert("Correct order:\ne-mail");

else if(formu.Action[2].checked)

alert("Correct order:\nOriginal e-mail;

Final e-mail");

else if(formu.Action[3].checked)

alert("You don't have to select any csv file.");

285: }

2 2

Cc e s d L d a 2

En el momento en el que el usuario decide descargar una copia de seguridad de la base de datos, lo primero que debe hacer es dar la orden de que se cree una copia de seguri

5 Para visualizar un ejemplo de uso de la herramienta Download DataBase, véase el formación

wnload DataBase, véase e A, pág. 94.

apartado 4.10.- Acción 10: Realizar una copia de seguridad de la in almacenada en la base de datos en el capítulo 4, pág. 79.

Para visualizar el código fuente completo de la aplicación Do el apartado A.1.2.- Download DataBase en el Apéndic

(11)

una vez que esta copia se ha creado, debe proceder a descargar dicha opia a su propia máquina.

uando el usuario inicia la aplicación, se muestran dos columnas con formación de interés acerca del fichero existente en el servidor

woody

ue contiene la última copia de seguridad hecha y también acerca de la ase de datos

ieee

. La columna que muestra los datos sobre el fichero

ados, que son los siguientes:

- Nombre del fichero: muestra el nombre del fichero que contiene a base de datos

ieee

. Este fichero se encuentra alojado en el servidor

woody

y su nombre es

- Número de filas: muestra el número de filas que contiene la tabla datos

ieee

.

dos acciones que la aplicación

Download ataBase

permite realizar sobre la base de datos ieee.

muestran en pantalla, entre otros datos, la fecha de creación de la última copia de seguridad existente en el servidor

woody

y la fecha en la que se ha realizado la última actualización de la base de datos

ieee

. Si la segunda de

de que se cree una nueva copia de seguridad actualizada en el c

C in q b

que contiene la última copia de seguridad efectuada, está formada por tres apart

la copia de seguridad de l

ies_conf.csv

.

- Tamaño del fichero: muestra el tamaño en bytes del fichero

ies_conf.csv

.

- Fecha del fichero: muestra la fecha de creación del fichero

ies_conf.csv

.

Por otra parte, la columna que muestra la información sobre la base de datos

ieee

está formada por dos apartados

ies_conf

de la base de

- Última actualización: muestra la fecha de la última actualización que se ha hecho sobre la base de datos

ieee

.

Una vez hechas las aclaraciones anteriores, se procederá a ver en qué consisten cada una de las

D

Estas dos acciones son las siguientes:

- Crear una copia de seguridad actualizada

Como se expuso anteriormente, en el momento en el que el usuario accede a la aplicación, se

las fechas nombradas es posterior a la primera, ambas se resaltan en rojo y en negrita y la aplicación invita al usuario a dar la orden servidor

woody

antes de proceder a su descarga.

(12)

Cuadro 2.8. Uso de la función stat()y almacenamiento de los datos de interés devueltos.

Cuadro 2.9. Función .

l fichero que se le pase como parámetro. Dichas estadísticas se devuelven en un array en el que cada posición ytes, fecha del último acceso...). De toda la información devuelta por la función

stat()

, la aplicación

Download

tamaño y la fecha de creación del fichero, respectivamente. En el siguiente cuadro se muestra cómo se

los datos de interés en dos variables para usarlos en otro punto del programa:

vez que se usa la aplicación y no de la base de datos, se muestra un ue no existe dicho

nte muestra el El fichero que contiene la copia de seguridad de la base de datos se denomina

ies_conf.csv

. Para consultar la fecha de creación este fichero se utiliza la función

stat()

de PHP, que devuelve las estadísticas de

contiene alguna información relativa al fichero (número de inode, tamaño en b

DataBase

utiliza la almacenada en las posiciones siete y nueve, que son el

obtienen las estadísticas del fichero

ies_conf.csv

mediante la función

stat()

y cómo se almacenan

25: if(file_exists($file)){

$file_exist=1;

H:i:s",$datos_fichero[9]);

$datos_fichero=stat($file);

$file_size=$datos_fichero[7]." bytes";

$file_date=date( "M/d/Y –

30: $file_numeric_date=fecha_numerica($file_date);

}

En caso de que sea la primera exista aún el fichero de backup

mensaje en pantalla avisando al usuario de q fichero.

Por otra parte, para consultar la fecha de la última actualización hecha sobre la base de datos, se utiliza el tipo de consulta

SHOW TABLE STATUS LIKE ‘nombre_tabla’

, que, igual que la función

stat()

de PHP, devuelve un array con información estadística de la base de datos. En este caso, la posición del array que contiene la fecha de la última actualización hecha sobre la base de datos es la identificada por

Update_time

. El cuadro siguie

código que consulta la fecha de la última actualización hecha sobre la tabla

ies_conf

de la base de datos

ieee

y almacena el resultado obtenido en la variable

update_date

:

function consultar_actualizacion_BD(){

//Consulta la ultima vez que se actualizo la BD 125: $idx=db_query("SHOW TABLE STATUS LIKE

'ies_conf';");

$row=mysql_fetch_array($idx);

$update_date=$row['Update_time'];

return $update_date;

130: }

(13)

Cuadro 2.10. Llamada al programa dump_all dentro de la apicación Download DataBase.

e muestra en antalla el contenido de la base de datos

ieee

. Como en este caso

rá al fichero esta variable n el

La aplicaión

dump_all

ya existía con anterioridad al inicio de este

na el botón

Create BackUp

:

nterior, en caso de de la base de datos, éste se elimina antes de crear un Para crear un nuevo fichero de backup, el usuario sólo tiene que pulsar el botón

Create BackUp

. En ese momento, la aplicación

Download DataBase

llama a un segundo programa, denominado

dump_all

y desarrollado en lenguaje

PERL

, qu

p

no interesa que el contenido de la base de datos se muestre en pantalla, sino que se pretende que este contenido se escriba en un fichero, la salida del programa

dump_all

se direcciona

contenido en dicado en la variable

$file

. El valor

in

hará que la salida del programa mencionado se escriba e

es_conf.csv

.

fichero

i

proyecto y, por tanto, no forma parte del contenido de éste.

En el siguiente cuadro se muestra el código que se ejecuta cuando se presio

Como puede verse en la línea 58 del cuadro a

y

un fichero con una copia de que exista en el servidor

wood

seguridad

nuevo fichero. Esto se hace para evitar posibles problemas que pudieran surgir al sobreescribir el fichero existente.

Por otro lado, la finalidad de la línea 62 del cuadro 2.10 es recargar la página web una vez que haya finalizado el proceso de creación del fichero de backup, lo que hace que se actualice la fecha de creación del mismo que se muestra en la citada página.

if(isset($_POST["Create_BackUp"])){

50: //Se crea un nuevo fichero de backup y se recarga la //pagina para que se actualicen las estadisticas del //fichero de backup.

//Si existe un fichero que contenga un BackUp de la 55: //BD antes de crear un nuevo fichero, se elimina el //fichero existente para evitar posibles problemas.

if(file_exists($file)) unlink($file);

60: system("$programa_BackUp > $file");

echo "<META HTTP-EQUIV=\"refresh\"

CONTENT=\"0;URL=backup.php\">";

}

(14)

-

o decide descargar la copia de seguridad de base de datos

ieee

existente en el servidor

woody

, debe elegir

icha descarga y de forma ansparente al usuario, se lleva a cabo un proceso en el que se

almacenándose luego

ue corresponda según la parte del fichero

ies_conf.csv

o o rá desde la línea 1 hasta la línea

onf_part1.csv

, que contendrá desde la que se tienen los o

ies_conf.csv

, se ero cuyo nombre es

f2.tar

. Finalmente, este fichero se comprimirá haciendo

or

oody

el fichero

ies_conf2.tar.gz

, que es el que descarga el

s preciso destacar que, para ahorrar tiempo de CPU del servidor

e que, aún xistiendo dicha copia comprimida en el servidor, la fecha de la ltima copia sin comprimir sea posterior a la fecha de la copia omprimida existente.

Descargar la copia de seguridad existente Una vez que el usuari

la

en primer lugar si desea descargar una versión comprimida de la misma o, por el contrario, una versión sin compresión.

En caso de elegir la descarga de la versión comprimida del fichero

ies_conf.csv

, como paso previo a d

tr

divide el fichero en bloques de 65.536 líneas,

cada uno de estos bloques en un fichero distinto. El nombre de

onf_part$i.csv

, donde $i (0...n) es estos nuevos ficheros es

ies_c

el número q

que almacene el nuevo fichero. Así, si por ejemplo el ficher

ies_conf.csv

contiene 80.000 líneas, se creará el ficher

ies_conf_part0.csv

, que contend

65.536, y el fichero

ies_c

línea 65.537 hasta la línea 80.000. Una vez distintos ficheros en los que se ha dividid

h rocede a

tarearlos

o unirlos en un único fic p

ies_con

so de la aplicación

gzip

, con lo que se genera en el servid u

w

usuario. El motivo de dividir

ies_conf.csv

en varios ficheros de 65.536 líneas como máximo es que estos ficheros se leen con la aplicación MS-Excel, cuyas hojas tienen una capacidad máxima de 65.536 líneas.

E

woody

y, por consiguiente, tiempo de espera del usuario de la aplicación

Download DataBase

, la copia comprimida del fichero

ies_conf.csv

sólo se genera en caso de que no exista ninguna copia comprimida anterior en dicho servidor o en caso d

e úc

El cuadro 2.11 muestra el código que crea la versión comprimida de la copia de seguridad de la base de datos.

if(($existe_BackUp_com=="No")||

($file_com_numeric_date<$file_numeric_date)){

//Antes de llamar al programa de compresion se //divide el fichero a comprimir en ficheros 90: //que tengan 65536 lineas como maximo. Esto se //hace porque el programa con el que se van a //abrir estos ficheros (MS-Excel) lee, como //maximo, 65536 lineas por fichero. Antes de

(15)

Cuadro 2.11. Creación de la versión comprimida de la copia de seguridad de la base de datos.

Cuadro 2.12. Código que muestra el cuadro de diálogo de descarga de ficheros.

formato sin compresión), se procede a pulsar el otón

Download

, que llama a la función

download()

, encargada

la copia de con compresión o en Una vez que se ha seleccionado el formato en el que se va a descargar la copia de seguridad de la base de datos (formato con compresión o

b

de mostrar en pantalla un cuadro de diálogo de descarga para que el usuario indique la carpeta o directorio en el que desea guardar dicha copia de seguridad. Cuando el usuario completa este paso, se inicia la descarga del fichero de backup al destino indicado.

El cuadro 2.12 muestra el código de la función download(), que está contenida en el fichero

ies.php

.

E

//comprimir los ficheros, se agrupan estos en 95: //un unico fichero

$files="";

$num_parts=divide_file($file_aux,$file_path);

for($i=0;$i<=$num_parts;$i++)

$files=$files."ies_conf_part$i.csv ";

100: system("$programa_agrupacion

$programa_agrupacion_parametros –C $file_path $files");

for($i=0;$i<=$num_parts;$i++){

$unlink_file=$file_path."ies_conf_part$i.csv";

unlink("$unlink_file");

}

105: system("$programa_compresion $programa_compresion_parametros $file_agrupado");

}

function download($file_path,$file_name,$file_type){

);

header("Pragma: no-cache");

no-cache");

$file=$file_path.$file_name;

150:

header("Content-Type: $file_type"

header("Cache-Control: no-store, header("Pragma: public");

155: header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0,pre-check=0");

header("Content-Description: File Transfer");

header("Content-Disposition: attachment;

filename=".$file_name."");

header("Content-Length: ".filesize($file));

160: header("Content-Trans e);

fer-Encoding: binary");

readfile($fil }

n función de que el usuario decida descargar seguridad de la base de datos en un formato

(16)

Figura 2.3. Captura de pantalla de la aplicación Download DataBasecuando la fecha

no sin compresión, la variable

$file_type

tomará el valor

pplication/gzip

o el valor

text/x-csv

, respectivamente.

2.2.3.- Capturas de pantalla

En la ón

Down

2.3.-

2.3.1.- Justificación de la funcionalidad Las co

realiza decir, base

desarr ermite al

basadas en direcciones de e-mail o en u

a

figura 2.3 se puede ver la interfaz de usuario de la aplicaci

del fichero de backup existente en el servidor woodyes posterior a la fecha de la última modificación hecha en la base de datos.

load DataBase

.

DataBase Content Query6

nsultas más comunes que se hacen en una base de datos son la ción de informes estadísticos y las basadas en datos concretos; es en valores específicos de alguno de los campos que forman dicha de datos. Para realizar este segundo tipo de consulta se ha

llado la aplicación

DataBase Content Query

, que p o

usuario efectuar consultas directas ombres de investigadores.

n

6 Para visualizar un ejemplo de uso de la herramienta DataBase Content Query, véase el apartado 4.6.- Acción 6: Hacer una consulta a la base de datos a partir de la dirección de e-mail de un investigador en el capítulo 4, pág. 70.

Para visualizar el código fuente completo de la aplicación DataBase Content Query, véase el apartado A.1.3.- DataBase Content Query en el Apéndice A, pág. 99.

(17)

2.3.2.- Funcionamiento

Mediante esta aplicación, el usuario indica en primer lugar, a través de botones de opción de tipo

radio

, si desea realizar una consulta basada en una dirección de e-mail o en el nombre de algún investigador. Una vez elegida la opción, el usuario procede a rellenar un cuadro de texto con la cadena de texto de la consulta y, finalmente, pulsa el botón

Submit

, que envía la consulta vía internet al servidor

woody

, donde está almacenada la base de datos

ieee

.

Los datos que resultan tras realizar la consulta se muestran en pantalla en una tabla, conteniendo cada fila de dicha tabla los datos correspondientes a un investigador. Las columnas que forman cada fila son, por orden de presentación, las siguientes:

- ID#: número de identificación de cada fila de la tabla.

- e-mail: si la consulta se ha hecho indicando una dirección de e- mail, esta columna ocupará la segunda posición de la tabla impresa en pantalla y mostrará todas las direcciones de e-mail existentes en onsulta

El siguiente ejemplo trata de facilitar la compresión de lo expuesto

Si el usuario selecciona una consulta basada en una dirección que se indican los datos de la consulta introduce la cadena

es de e-mail almacenadas en la base de datos cadena

nombre

, ya que

%

es el carácter comodín para las consultas a la base de datos.

posición de la tabla e indicará la dirección de e-mail del la base de datos que cumplan las restricciones de la c

realizada.

en el párrafo anterior:

de e-mail y en el cuadro de texto en el

[email protected]

, la columna

e-mail

de la tabla tendrá tantas filas como tuplas con el e-mail indicado existan en la base de datos.

Por otra parte, si en el cuadro de texto se introduce la cadena

%nombre%

, en la columna

e-mail

de la tabla se mostrarán todas las direccion

que contengan la

Si la consulta a la base de datos se ha hecho a partir del nombre de algún investigador, la columna

e-mail

ocupará la tercera investigador cuyo nombre se indica en la columna

nombre

de la misma fila.

(18)

- Name: esta columna se comporta de modo idéntico a la columna

e-mail

, pero mostrando el nombre del investigador en lugar de la dirección de e-mail del mismo.

- Conference: conferencia en la que ha participado el investigador

a tenido lugar la conferencia mostrada en la columna

Conference

.

Topic: tema dentro del que se clasifica el artículo presentado por

En el cuadro siguiente se muestra el código fuente que hace la consulta a la base de datos en función de la información proporcionada por el usuari

exista al menos una tupla que cumpla la condición indicada, prepara los datos para que sean mostrados en pantalla en una tabla:

cuyo nombre y dirección de e-mail se muestran en las columnas

Name

y

e-mail

de la misma fila, respectivamente.

- Year: año en el que h

-

el autor cuyo nombre y dirección de e-mail se especifican en las columnas

Name

y

e-mail

en la conferencia cuyo nombre y año se muestran en las columnas

Conference

y

Year

de la misma fila.

o a través de la interfaz de la aplicación y que, en caso de que

if(

$ $ 25: $

if($_POST["Criteria"]=="email"){

//Criterio de consulta seleccionado

30:

35:

//Nombre de la segunda fila de la tabla de

40:

$criteria_eng="e-mail address";

else{

45

$table2="e-mail";

50

$_POST["query_data"]!=""){

query_data_empty=0;

data=$_POST["query_data"];

smarty->assign("query_string",$data);

$criteria="email";

//Criterio de consulta no seleccionado $no_criteria="nombre";

$attention="e-mail";

//Nombre de la primera fila de la tabla de //resultados

$table1="e-mail";

//resultados $table2="Name";

//Criterio de consulta para imprimirlo en la //plantilla

}

: $criteria="nombre";

$no_criteria="email";

$attention="name";

$table1="Name";

:

$criteria_eng="author's name";

}

(19)

Cuadro 2.13. Código fuente encargado de realizar la consulta a la base de datos y almacenar los resultados

2

L

taBase

C

desarrollo de este apartado, con los cuales interacciona el usuario para ll

en arrays.

$smarty->assign("table1",$table1);

55

//Se realiza la consulta

$idx=db_query("SELECT $criteria,$no_criteria,confe,

60:

70: $criteria_data[$i]=db_result($idx,$i,$j);

ult($idx,$i,$j);

i,$j);

: $smarty->assign("table2",$table2);

anyo,tema FROM ies_conf

WHERE $criteria like '$data' order by confe, anyo,$criteria;");

$rows=db_numrows($idx);

$smarty->assign("rows",$rows);

if($rows>0){

//Se rellenan las tablas de resultados para 65: //luego imprimirlas en la plantilla

for($i=0;$i<$rows;$i++){

$id[$i]=$i+1;

for($j=0;$j<5;$j++){

if($j==0) elseif($j==1)

data[$i

$no_criteria_ ]=db_res elseif($j==2)

$conference[$i]=db_result($idx,$

lseif($j==3) 75: e

$year[$i]=db_result($idx,$i,$j);

elseif($j==4)

_result($idx,$i,$

$topic[$i]=db }

80: } }

j);

.3.3.- Capturas de pantalla

a figura 2.4 muestra una captura de pantalla de la aplicación

n verse todos los elementos citados en el

Da

ontent Query

en la que puede evar a cabo la consulta.

(20)

Figura 2.4. Captura de pantalla de la aplicación DataBase Content Query.

.4.- Statistics

tienen una importancia primordial en cualquier sistema de base de datos, pues permiten tener diferentes visiones generales del conjunto de los datos almacenados.

Con objetos de permitir la realización de dichos informes, se han desarrollado las aplicaciones

Simple Statistics

y

Cross-conference Statistics

, cada una de ellas orientada a un tipo de informe distinto.

La primera de las aplicaciones desarrolladas,

Simple Statistics

, permite al usuario fijar el tipo de información que quiere representar en los ejes “x”

e “y” de la tabla que contiene el informe estadístico. Los distintos tipos de información se podrán elegir entre algunos de los campos que forman la tabla

ies_conf

de la base de datos

ieee

7. La segunda de las aplicaciones,

Cross-conference Statistics

, permite al usuario realizar un seguimiento de los investigadores que, habiendo presentado artículos en una conferencia concreta, han presentado también articulos en otras conferencias almacenadas en la base de datos

ieee

.

2

2.4.1.- Justificación de la funcionalidad Los informes estadísticos

7 Para obtener más información acerca de los campos que forman la tabla ies_conf, véase el apartado 1.2.1.- Base de datos en el capítulo 1, pág. 4.

(21)

En los apartados que siguen, se procederá a realizar una explicación más detallada de las dos aplicaciones mencionadas.

2.4.2.- Simple Statistics8 2.4.2.1.- Funcionamiento

La aplicación

Simple Statistics

permite realizar estadísticas relativas a los investigadores almacenados en la base de datos

ieee

y presentarlas en una tabla en pantalla.

Para obtener dichas estadísticas, el usuario debe, en primer lugar, indicar en dos menús desplegables el tipo de datos que desea que se representen en los ejes “x” e “y”; después, debe pulsar el botón

View Statistics

, que presentará en pantalla la tabla con las estadísticas deseadas.

A continuación se indican los posibles tipos de información que pueden ser representados en cada uno de los dos ejes, mostrándose entre

aréntesis s

ieee

que

ntiene la información:

(

anyo

), conferencias (

confe

), países (

pais

), temas (

tema

), áreas geográficas (

area

).

- Eje y: conferencias, países, temas, áreas geográficas.

e desee representar en ada uno de los ejes y que introduce el resultado de dicha consulta en un

el campo de la tabla

ies_conf

de la base de dato p

co

- Eje x: años

En el cuadro siguiente se muestra el código que hace la consulta a la base de datos en función del tipo de información que s

c

array para que luego pueda ser presentado en pantalla:

8 Para visualizar un ejemplo de uso de la herramienta Simple Statistics, véase el apartado 4.4.- Acción 4: Realizar un informe estadístico, te

posibles repeticiones en las direcciones de e-mail, de la procedencia, por //Se hacen las consultas a la BD segun los datos

60: //del formulario

$idx=db_query("SELECT distinct $X_axis FROM ies_conf order by $X_axis;");

$num_X_axis=db_numrows($idx);

$num_X_axis_aux=$num_X_axis+1;

$ColSpan=$num_X_axis_aux;

65: for($i=0;$i<$num_X_axis;$i++)

$var X axis[$i]=db result($idx,$i,0);

niendo en cuenta las áreas geográficas, de los investigadores que han presentado artículos en las distintas conferencias en el capítulo 4, pág. 65.

tatistics, véase el apartado A.1.4.- Simple Statistics en el Apéndice A, pág. 101.

Para visualizar el código fuente completo de la aplicación Simple S

(22)

Cuadro 2.14. Código fuente encargado de realizar las estadísticas y almacenar los datos en un array.

$idx=db_query("select distinct $Y_axis from ies_conf order by $Y_axis;");

$num_Y_axis=db_numrows($idx);

is;$i++)

result($idx,$i,0);

ultados de las estadisticas 75: //en tablas para despues imprimirlos en la

$num_X_axis;$j++){

80: $idx2=db_query("select count($Repetitions email)

nf where

70: for($i=0;$i<$num_Y_ax $var_Y_axis[$i]=db_

$dis=array();

//Se almacenan los res //plantilla

for($i=0;$i<$num_Y_axis;$i++){

array_push($dis,array());

for($j=0;$j<

from ies_conf where

$X_axis='".$var_X_axis[$j]."' and $Y_axis='".

$var_Y_axis[$i]."';");

array_push($dis[$i],db_result($idx2,0,0));

}

$idx2=db_query("select count(email) from ies_co 85: $Y_axis='".$var_Y_axis[$i]."';");

array_push($dis[$i],db_result($idx2,0,0));

}

Com

haber os de los artículos expuestos en

misma, la aplicación

Simple Statistics

admite la posibilidad de realizar

las s ones de los

vestigadores en la redacción de los distintos artículos.

la base de datos algunos investigadores con direcciones de e-mail comunes y las e

P ndo en

c ail o sin tener en cuenta estas

r seleccionar cualquiera de ellas

m

dio

presente en la interfaz de la

a

2.4.2.2.- Capturas de pantalla L

p p so

o en una conferencia determinada un mismo investigador puede participado en la redacción de vari

la

e tadísticas teniendo o sin tener en cuenta las repetici in

Si se activa la opción sin repeticiones, se obtiene el número de personas que han presentado sus artículos en cada una de las conferencias. Dicho número podría no ser exacto debido a que existen en

stadísticas se realizan a partir de estas direcciones.

ara distinguir entre las dos posibles opciones (estadísticas tenie uenta la repetición de direcciones de e-m

que epeticiones), el usuario sólo tiene

ediante un botón de opción de tipo

ra

plicación.

a figura siguiente muestra la interfaz de la aplicación, en la que se ueden apreciar tanto los dos menús desplegables, que contienen los osibles tipos de información a representar en los ejes “x” e “y”, como los

s botones de opción, que permiten realizar las estadísticas teniendo o din tener en cuenta las repeticiones de direcciones de e-mail.

(23)

Figura 2.5. Captura de pantalla de la aplicación Simple Statistics.

.4.3.- Cross-conference Statistics9

rtículos en una 2

2.4.3.1.- Funcionamiento

La aplicación Cross-conference Statistics permite realizar un seguimiento e los investigadores que, habiendo presentado a

dconferencia determinada, han presentado también artículos en otras conferencias almacenadas en la base de datos

ieee

.

Antes de obtener en pantalla una tabla que recoja el informe estadístico realizado por la aplicación, el usuario debe suministrar a la misma los

iguientes datos:

s

- Conferencia de la que desea obtener un seguimiento. Mediante un cuadro de selección desplegable, el usuario debe indicar de qué conferencia, de entre todas las disponibles, quiere obtener un estudio de los investigadores que han presentado artículos en esa

9 Para visualizar un ejemplo de uso de la herramienta Cross-conference Statistics, véase el apartado 4.5.- Acción 5: Realizar un informe estadístico de los

ence Statistics, véase el apartado A.1.5.- Cross-conference Statistics en el Apéndice A, pág. 104.

investigadores que, habiendo presentado artículos en la conferencia IECON entre los años 2002 y 2004, han presentado también artículos en otras conferencias almacenadas en la base de datos ieee entre los años 2001 y 2005 en el capítulo 4, pág. 67.

Para visualizar el código fuente completo de la aplicación Cross-confer

(24)

conferencia y en otras de las almacenadas en la base de datos

ieee

.

- Rango de años de la conferencia seleccionada que desea que la aplicación tenga en cuenta para realizar el informe estadístico. Este rango de años se identificará como

rango A

y tendrá M elementos (rango A = m1, m2, ..., mM). El conjunto de investigadores que han presentado artículos en la conferencia seleccionada en alguno de los años que integran el

rango A

se identificará como

conjunto principal

.

- Rango de años que desea que la aplicación tenga en cuenta para comparar el

conjunto principal

con el resto de conferencias organizadas almacenadas en la base de datos

ieee

. Este rango de años se identificará como

rango B

y tendrá N elementos (rango B = n1, n2, ..., nN). Cada uno de los años que componen el

rango B

se representará en una celda de la primera fila de la tabla en la que se presenten las estadísticas realizadas por la aplicación.

ara realizar el informe estadístico, la aplicación forma, por un lado, el

cipal

y, por otro, (

C-1

) x

N

intas a la seleccionada en cada uno de los

. Estos conjuntos se identifican como P

conjunto identificado como

conjunto prin

njuntos con los investigadores que han presentado artículos en cada co

una de las

C-1

conferencias dist años que constituyen el

rango B N

conjuntos secundarios

. Por último, una vez que el usuario presiona el botón

View Statistics

, la aplicación calcula la intersección del

conjunto principal

con cada uno de los

conjuntos secundarios

y presenta los resultados en pantalla mediante una tabla.

Los siguientes esquemas ayudan a comprender el funcionamiento de la aplicación:

(25)

Figura 2.6. Esquema de funcionamiento de la aplicación Cross-conference Statistics. Visualización del conjunto principal y los conjuntos secundarios.

Figura 2.7. Esquema de funcionamiento de la aplicación Cross-conference Statistics. Intersección del conjunto principal con los conjuntos secundarios.

(26)

Cuadro 2.15. Código fuente encargado de realizar las estadísticas y almacenar los resultados en un array.

n el siguiente cuadro se puede ver el código fuente encargado de realizar s consultas a la base de datos y almacenar los resultados en un array ara luego presentarlos por pantalla en una tabla:

2.4.3.2.- Capturas de pantalla

Para concluir, en la figura siguiente se muestra la interfaz de la aplicación, en la que se pueden todos los elementos con los que interactúa el usuario.

E la p

100: for($i=0;$i<$num_conferences;$i++){

$k=0;

array_push($num,array());

if($conferences[$i]!=$confe){

for($j=$from_step3;$j<=$to_step3;$j++){

105: $idx4=db_query("SELECT distinct t1.email FROM ies_conf t1

INNER JOIN ies_conf t2 ON t1.email = t2.email WHERE t1.confe='$confe' 110: AND t1.anyo>='$from_step2' AND t1.anyo<='$to_step2'

AND t2.confe='$conferences[$i]' AND t2.anyo='$j'");

array_push($num[$i],db_numrows($idx4));

115: $k++;

}

$idx4=db_query("SELECT distinct t1.email FROM ies_conf t1

120: ON t1.email = t2.email WHERE t1.confe='$confe' AND t1.anyo>='$from_step2' AND t1.anyo<='$to_step2'

AND t2.confe='$conferences[$i]' 125: AND t2.anyo>='$from_step3' AND t2.anyo<='$to_step3'");

array_push($num[$i],db_numrows($idx4));

} else

130: array_push($num[$i],0);

}

INNER JOIN ies_conf t2

(27)

Figura 2.8. Captura de pantalla de la aplicación Cross-conference Statistics.

(28)

Referencias

Documento similar

•cero que suplo con arreglo á lo que dice el autor en el Prólogo de su obra impresa: «Ya estaba estendida esta Noticia, año de 1750; y pareció forzo- so detener su impresión

En estos últimos años, he tenido el privilegio, durante varias prolongadas visitas al extranjero, de hacer investigaciones sobre el teatro, y muchas veces he tenido la ocasión

que hasta que llegue el tiempo en que su regia planta ; | pise el hispano suelo... que hasta que el

Para ello, trabajaremos con una colección de cartas redactadas desde allí, impresa en Évora en 1598 y otros documentos jesuitas: el Sumario de las cosas de Japón (1583),

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

E Clamades andaua sienpre sobre el caua- 11o de madera, y en poco tienpo fue tan lexos, que el no sabia en donde estaña; pero el tomo muy gran esfuergo en si, y pensó yendo assi

Sanz (Universidad Carlos III-IUNE): &#34;El papel de las fuentes de datos en los ranking nacionales de universidades&#34;.. Reuniones científicas 75 Los días 12 y 13 de noviembre

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de