miércoles, 6 de junio de 2012

BASE DE DATOS


Base de Datos

Las Bases de Datos son programas que administran información y hacen más ordenada la información, aparte de hacerla fácil de buscar.

     Sus características pueden ser ventajosas o desventajosas: pueden ayudarnos para almacenar, organizar, recuperar, comunicar y manejar información en formas que serían imposibles sin los computadores, pero también nos afecta de alguna manera ya que existen enormes cantidades de información en bases de datos de las que no se tiene control del acceso

Las bases de Datos tienen muchos usos: nos facilitan el almacenamiento de grandes cantidades de información; permiten la recuperación rápida y flexible de información, con ellas se puede organizar y reorganizar la información, así como imprimirla o distribuirla en formas diversas.

Algunos paquetes comerciales manejadores de Bases de Datos son: El file Marker Pro, ProQuest Periodical Abstracts, Organizer de Lotus y Far Side Calendar de Amaze.

Dato: Información que una computadora registra y almacena.

Campo: es cada trozo discreto de información en un registro.

Registro: es la información relacionada con una persona, un producto o suceso. En una BdeD un simple archivo es un conjunto de registros.

Archivo: es una colección de información relacionada. En él la información se guarda como si fuera un archivero.

Consulta: puede ser una búsqueda simple de un registro específico o una solicitud para seleccionar todos los registros que satisfagan un conjunto de criterios.

Reporte o informe: es una lista ordena de los campos y registros seleccionados en un formato fácil de leer.

Los tipos de datos que se pueden introducir a una base de datos son:

Menciones los tipos de datos que pueden introducirse en una Base de Datos, se dividen en:
*numéricos: se pueden introducir números para identificar partes del archivo, esto identifica la parte que numera al archivo o lo distingue de alguna manera.

*texto: el texto es un nombre que identifica al campo, ya sea el nombre del autor o

*etiquetas: son los títulos con los que cada campo es designado.

*fórmulas: son datos que aparecen como numéricos pero fueron hechos por medio de fórmulas

Un paquete manejador de bases de datos es más conveniente cuando se esta trabajando con bases de datos, y un administrador de archivos se usa más cuando sólo se esta buscando un archivo desde un procesador de textos.


El diseño de base de datos no es algo que podamos tomar a la ligera, el principal problema es que casi siempre la base de datos responderá como nosotros queremos pero no utilizando los recursos mínimos e indispensables. La mayoría de los problemas de performance de un sitio web se debe a malas estructuras de datos, que utilizan tipos de datos incorrectos que terminan “castigando” al servidor de manera innecesaria, como también a consultas mal diseñadas.

      La utilización más importante de Php se da en las preguntas que plantean las bases de datos que están en el servidor.

      Php permite al programador tanto relacionarse con algunas de las bases de datos más importantes del mundo de la programación:

PostgreSQL
MySql
Oracle
Adabas
filePro
ODBC
como con otros menos conocidos.

       En particular, la conexión ODBC permite relacionarse con bases de datos tipo Access.

       La utilización de las instrucciones para la conexión a las bases de datos no tiene nada que ver con el conocimiento de los mismos. El lenguaje SQL sirve para formualr las preguntas y para saber el significado de índices, claves, relaciones, etc.

       En resumidas cuentas, un webmaster que quiere organizar un sistema que prevea la consultación de una base de datos a través del web, en la mayoría de los casos tiene que conocer muy bien la estructura misma de la base de datos, incluso el significado de los datos que hay en la misma.

      Por lo que se refiere a SQL, el lenguaje estándar para hacer preguntas en las bases de datos, hay muchos seminarios y manuales en la red. Lo único que diré es que con la palabra pregunta o query nos referimos a una serie de instrucciones que cualquier base de datos pone en marcha devolviendo una serie de tuple (en general, líneas o partes de líneas de una o más tablas de una base de datos).


       De modo práctico las operaciones Php en las bases de datos podrían dividirse en tres niveles:

abrir/cerrar conexiones
enviar preguntas SQL
leer los resultados de una query

       Las operaciones abrir/cerrar una conexión a una base de datos sirven para abrir/cerrar una conexión con la base de datos elegida con el fin de hacer operaciones como leer/escribir y transmitir los datos en formato html.
Para abrir/cerrar una conexión en MySql tenemos las instrucciones:

mysql_connect(host,login,password)
mysql_close()
Para mandar preguntas se puede utilizar la instrucción:

mysql_db_query(database,query,ID_database)
Para leer los resultados se usan unas instrucciones que veremos suvcesivamente

        Para llevar a cabo nuestra primera búsqueda en la base de datos hágamoslo mediante el ejemplo: saber la existencia, la configuración y el significado del contenido de una tabla llamada Anuncios.
La tabla Anuncios incluye los campos:

ID [clave primaria]
Nombre [nombre del autor del anuncio]
Email [email]
Texto [texto del anuncio]

      Una búsqueda dentro de la tabla podría hacerse con el siguiente código:

<?
$db=mysql_connect("localhost","","") or die("Error en la conexión a MySql");
$result=mysql_db_query("base de datos_anuncios","SELECT * FROM Anuncios",$db);
mysql_close();
?>

      Estas instrucciones permiten memorizar en la variable $result todos los anuncios que están en la tabla Anuncios.

      Para escribirlos se necesita primero hacer la operación:

$row=mysql_fetch_row($result);

Y después, la primera línea del resultado estará disponible en la variable array $row. Para escribir el resultado será necesaria una línea del tipo:

print($row[1]."/".$row[2]."/".$row[3]."/".$row[4]."/");

      Para saber el número de líneas del resultado de una pregunta basta con usar la instrucción:

$num_rows=mysql_num_rows($result);

       Otra operación muy útil es la que devuelve el número de campos en el grupo de resultados de la pregunta que se acaba de hacer:

$num=mysql_num_fields($result);

       Llegados a este punto estamos listos para formular preguntas más complejas. Por ejemplo, después de haber creado un form que devuelva en la variable $cadena una palabra que hay que buscar, se puede escribir:

$sql="SELECT * FROM Anuncios WHERE Texto LIKE '%".$cadena."%'"
$result=mysql_db_query("db_anuncios",$sql,$db);
$result estará compuesto por todos los anuncios que incluyen la palabra memorizada en $cadena.



Ahora vamos a ver cómo solucionar el problema y cómo construir un sitio que permita tanto la introducción como la búsqueda.

La tabla Anuncios que memoriza los anuncios se ha descrito e incluye los campos:

ID [clave primaria]
Nombre [nombre del autor del anuncio]
Email [email]
Texto [texto del anuncio]

Pasemos a la práctica no olvidando que el instrumento necesario para enviar datos de un archivo html/php3 a otro es el form.

Para que funcione todo vamos a crear unos archivos:

show.php3 [mostrar los anuncios]
insert.php3 [introducir un anuncio]
search.php3 [buscar una o más palabras en la base de datos]                                                                                            


     Supongamos que recibimos unos datos de un form con las variables $nombre,$email,$texto. Para introducir un nuevo anuncio es suficiente con hacer las siguientes operaciones:

<?php
# datos que hay que modificar según la base de datos
$host="localhost";
$user="";
$pass="";

$db=mysql_connect($host,$user,$pass) or die ("Error durante la conexión a la base de datos");
$sql="INSERT INTO Anuncios (Nombre,Email,Texto) VALUES('".$nombre."','".$email."','".$texto."')";
mysql_db_query("db_anuncios",$sql,$db);
mysql_close();
?>

En este caso la base de datos introduce automáticamente una clave única que marca el anuncio en el ID de la tabla Anuncios.

Obviamente también se pueden hacer unas operaciones de control referidas a la validez de la dirección email o para controlar si algunos campos no son nulos.

Para mostrar los anuncios de la base de datos basta introducir el siguiente código:

<?php
# datos que hay que modificar según la base de datos
$host="localhost";
$user="";
$pass="";

$db=mysql_connect($host,$user,$pass) or die ("Error durante la conexión al database");
$sql="SELECT * FROM Anuncios";
$result=mysql_db_query("db_anuncios",$sql,$db);
while ($row=mysql_fetch_array($result) {
print("<B>Nombre</B>: <A HREF="\"".$row["Email"]."\">".$row["Nombre"]."</A><BR>");
print("<B>Texto del anuncio</B>:<BR>");
print(htmlentities($row["Texto"])."<BR>");
print("<HR SIZE=\"1\">");
}
mysql_close();
?>

La función htmlentities() permite "traducir" las letras que llevan acento y los demás caracteres parrticulares con código html, para que los varios browser las visualicen correctamente.

Para la búsqueda de un anuncio particular, pensemos en recibir una cadena $str de un form, que $str contenga una serie de palabras que hay que buscar, separadas por espacios.

El siguiente código permite buscar y visualizar los resultados:

<?php
# datos que hay que modificar según la base de datos
$host="localhost";
$user="";
$pass="";
$db=mysql_connect($host,$user,$pass) or die ("Error durante la conexión al database");
$sql="SELECT * FROM Anuncios ";
$where="";
$words=explode(" ",$str);
$j=0;
while (isset($words[$j])) {
$where=$where."Texto LIKE '%".$words[$j]."%'";
if (isset($words[$j+1])):
$where=$where." OR ";
endif;
$j++;
}

$result=mysql_db_query("db_anuncios",$sql.$where,$db);
while ($row=mysql_fetch_array($result) {
print("<B>Nombre</B>: <A HREF="\"".$row["Email"]."\">".$row["Nombre"]."</A><BR>");
print("<B>Texto del anuncio</B>:<BR>");
print(htmlentities($row["Texto"])."<BR>");
print("<HR SIZE=\"1\">");
}

mysql_close();
?>

Obviamente las variantes son muchas y cada uno puede divertirse a su antojo.
Si sólo queremos dar una pista para crear un sistema de este tipo, creemos que ya hemos escrito bastante. Lo único que queremos subrayar es que para pasar de un código de una base de datos a otro es necesario que el programador realice una traducción muy cuidada, porque es posible que las operaciones necesiten un número diferente de operadores dependiendo de la base de datos.




No hay comentarios:

Publicar un comentario