Mostrando entradas con la etiqueta 02.- Recuperación en MySQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta 02.- Recuperación en MySQL. Mostrar todas las entradas

lunes, 17 de octubre de 2011

06.- Recuperación avanzada con SQL

La base de datos MySQL dispone de una serie de funciones de recuperación de información para aquellos campos definidos como de tipo FULLTEXT. Esto significa que MySQL es capaz de indexar el texto completo de los campos que el administrador le especifique. Este proceso implica la creación de un fichero inverso, el cálculo de frecuencias o la eliminación de palabras vacías del texto. Todo ello se lleva a cabo de manera automática en el momento en que se almacena información en los campos definidos para este fin.

Particularidades del método FULLTEXT
Las opciones de búsqueda e indexación FULLTEXT, tienen múltiples características y aspectos que deben ser considerados. Por un lado efectúa un proceso automático de eliminación de palabras vacías y por otro lado consta de una serie de limitaciones que no aconsejan su uso para pequeñas colecciones de documentos.
  • Eliminación de palabras vacías
    http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html
    Cuando se efectúan búsquedas FULLTEXT, el fichero inverso de los textos indexados es tratado para eliminar las palabras vacías de la recuperación. También los términos de la consulta son tratados. Por defecto MySQL incluye tales palabras vacías en inglés en el archivo ft_static.c, por lo que la inclusión de un nuevo listado de palabras vacías conlleva su edición o la modificación de la ruta de la variable de configuración de MySQL ft_stopword_file.
  • Limitaciones
    http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html
    No todo son ventajas, ya que FULLTEXT también tiene limitaciones. En primer lugar la extensión de las palabras susceptibles de recuperación o consulta, tienen un límite de 3 caracteres, por lo tanto se deberán utilizar términos a partir de 4 o más caracteres. Esta propiedad puede ser editada desde la variable de configuración de MySQL ft_min_word_len. En segundo lugar las búsquedas en lenguaje natural se efectúan con un umbral de corte en torno al 50% de los términos indexados. Dicho de otro modo, elimina la mitad de los términos o palabras a partir del análisis de frecuencias aplicando la técnica de cortes de Luhn, eliminando los términos más comunes y HAPAX.
Algoritmo de recuperación FULLTEXT en MySQL
MySQL utiliza un algoritmo de recuperación muy parecido al de ponderación de los términos mediante TF-IDF, es decir, frecuencia de aparición de los términos y frecuencia inversa del documento. TF-IDF es una medida de tipo estadístico utilizada para determinar la importancia de una palabra dentro de un documento en una colección o corpus documental. La importancia o peso del término se incrementa proporcionalmente al número de veces que una palabra aparece en el documento, compensándose con la frecuencia de la palabra en el corpus. Por ejemplo si un término aparece recurrentemente en el documento y a lo largo de toda la colección se obtiene una puntuación más baja. De hecho para evitar ese tipo de casos, MySQL procede a la eliminación de palabras vacías previamente al proceso de indexado.

Preparar la tabla en MySQL para FULLTEXT
La preparación de la tabla que almacena los registros y contenidos es clave para un buen funcionamiento del método FULLTEXT. Cuando se crea una tabla, el código para reseñar los campos que serán indexados a texto completo es FULLTEXT(campo1, campo2, campo3,...), véase tabla1.

CREATE TABLE comments (
id        INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id),
title     TEXT CHARACTER SET utf8 COLLATE utf8_general_ci,
user
     VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
date      VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
comments  LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,
responses LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,
indexer   LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,
FULLTEXT(indexer)
) CHARACTER SET utf8 COLLATE utf8_general_ci
 Tabla1. Código para crear una tabla de comentarios en el que existe un campo indexer que almacenará todos los datos del comentario para su indexación.

Aunque es posible utilizar múltiples campos para la recuperación a texto completo, se considera más eficiente crear un solo campo de tipo FULLTEXT expresamente dedicado para la indexación de textos. Esto es lo que ocurre en el ejemplo anterior con el campo indexer, ya que almacenará el título de los comentarios, el nombre del usuario, los comentarios propiamente dichos y las respuestas a los mismos. También es muy recomendable tratar la información textual antes de que esta sea insertada en la tabla de la base de datos. Esto significa que siempre que sea posible se aconseja efectuar un proceso de eliminación de palabras vacías, sustitución de caracteres extraños por equivalentes en código HTML o ASCII, sustitución de caracteres acentuados por caracteres no acentuados, transliteración de caracteres, etc. Todo ello se puede conseguir utilizando junto con MySQL programas de tratamiento y depuración de textos, diseñados en muy diversos lenguajes de programación, por ejemplo PHP.

Búsquedas a texto completo con lenguaje natural
Las búsquedas de tipo FULLTEXT se llevan a cabo utilizando dos cláusulas especiales. La cláusula MATCH() que indica entre paréntesis los campos indexados mediante FULLTEXT y la cláusula AGAINST() que contiene los términos de la consulta. Por defecto este tipo de consultas siempre son mediante lenguaje natural, esto es confrontar las palabras o términos de la consulta con la colección registrada en FULLTEXT. Este proceso se lleva a cabo por similaridad documental. El modelo de construcción de este tipo de consultas es el expresado en la tabla2.

SELECT * FROM catalogo WHERE MATCH(indexer) AGAINST('término/s de consulta')
 Tabla2. Consulta MATCH básica busca en lenguaje natural

Cuando se emplea la fórmula WHERE MATCH() los resultados devueltos se clasifican automáticamente por orden de relevancia. La relevancia se calcula en base al número de palabras del registro, el número de palabras únicas de ese registro, el número total de palabras en la colección, y el número de registros que contengan cada palabra determinada, esto es el modelo clásico de representación de documentos en el espacio vectorial.

Búsquedas booleanas a texto completo
Cuando se especifica en la cláusula AGAINST el atributo IN BOOLEAN MODE, se está indicando que la consulta en lenguaje natural adquiere propiedades booleanas. Esto habilita por ejemplo la posibilidad de decidir qué términos deben aparecer, cuáles no, o determinar qué frases deberán buscarse literalmente. Véase la sintaxis de la consulta en la tabla3.
SELECT * FROM catalogo WHERE MATCH(indexer) AGAINST('+t1 -t1 t3 >t4 <t5 (t6 t7 t8) ~t9 t10* "t11 t12 t13"' IN BOOLEAN MODE)
 Tabla3. Consulta FULLTEXT en modo booleano

El método IN BOOLEAN MODE, admite el empleo de modificadores para indicar operaciones muy precisas con los términos de consulta, a continuación se reseñan los más importantes:
  • ( +término ) el signo más precediendo al término es el equivalente del operador AND e indica que obligatoriamente dicho término debe constar entre los resultados.
  • ( -término ) el signo menos precediendo al término equivale al operador NOT e indica que el término no deberá figurar entre los resultados.
  • ( término1 termino2 ) si los términos no tienen ningún modificador o signo por defecto se emplea el operador OR, por lo que uno u otro término podrán figurar en los resultados.
  • ( >término4 ) un signo mayor que precediendo al término, le otorga un mayor peso en el cálculo de la relevancia, influyendo en un mayor número de resultados que contengan dicho término.
  • ( <término5 ) un signo menor que precediendo al término, le corresponde un menor peso en el cálculo de la relevancia, haciendo que los resultados tengan con menor frecuencia dicho término incluido.
  • ( (término1 término2 término3) ) Cuando los términos están encerrados entre paréntesis, se indica a MySQL que deberán encontrarse lo más próximos posibles. Esto significa que los primeros resultados a mostar serán aquellos que cumplan dicha condición.
  • ( ~término ) una tilde apaisada precediendo al término indica a MySQL que dicho término provoca ruido en la consulta, lo que le llevará a infraponderarlo para mejorar los resultados.
  • ( término* ) un asterisco ulterior al término se emplea a modo de truncamiento y concordará con aquellas palabras que empiecen por el término referido. Su empleo es de gran utilidad cuando se efectúan búsquedas a partir de las raices de un término/s.
  • ( "término1 término2 término3" ) Cuando varios términos estan agrupados en un entrecomillado doble implica una búsqueda por frase exacta. Es muy importante reseñar el aspecto de la comilla doble en este caso en contraposición con la comilla simple que envuelve toda la consulta dentro de la cláusula AGAINST('consulta "subconsulta" ').

Búsquedas a texto completo con expansión de consulta
http://dev.mysql.com/doc/refman/5.0/en/fulltext-query-expansion.html
Las consultas basadas en FULLTEXT también soportan el método expansión de consulta, para recuperar la información. Esto es el empleo del algoritmo de retroalimentación automática por relevancia. Este funciona ejecutando dos consultas, por un lado la búsqueda con los términos de la consulta original y una segunda búsqueda en la concatena los términos de los documentos más representativos encontrados en la primera consulta. Para efectuar este tipo de consultas se añade el atributo WITH QUERY EXPANSION en la cláusula AGAINST(), véase tabla4.

SELECT * FROM catalogo WHERE MATCH(indexer) AGAINST('término/s de consulta' WITH QUERY EXPANSION)
 Tabla4. Consulta FULLTEXT con expansión de consulta

Búsquedas FULLTEXT con ranking de tipo SCORE
Para ordenar los resultados de las consultas en función del valor de relevancia obtenido en los procesos de recuperación, se necesita incorporar un campo temporal que almacene dicho valor. Esto se conoce como ranking de tipo score. Obsérvese la sintáxis de la consulta de la tabla5, se seleccionan los campos id, title, content y MATCH(campos) AGAINST('consulta') AS score. Esto significa que el coeficiente del ranking de la consulta expresada se almacenará en un campo que se ha resuelto llamar score (podría llamarse de cualquier otra forma, pero esta es la forma más común de denominarlo). A continuación el resto de la consulta es similar a las anteriormente expresadas, con la salvedad de que el ordenamiento puede realizarse por orden decreciente de relevancia e importancia desde el campo temporal score.

SELECT id, title, content, MATCH(indexer) AGAINST('término/s de consulta') AS score FROM catalogo WHERE MATCH(indexer) AGAINST('término/s de consulta') ORDER BY score DESC
 Tabla5. Consulta utilizando ordenación por ranking

lunes, 10 de octubre de 2011

04bis - Cláusulas SQL para ordenar resultados y mostrar valores únicos: ORDER BY y SELECT DISTINCT


Cláusula ORDER BY
La cláusula ORDER BY se utiliza para ordenar el resultado de la consulta conforme a una o más columnas o campos. La cláusula ORDER BY permite ordenar mediante orden ascendente, descendente y orden natural. 


SELECT nombre-de-campo1, nombre-de-campo2 FROM nombre-de-tabla ORDER BY nombre-de-campo3 ASC, nombre-de-campo4 DESC


SELECT titulo, autor FROM catalogo ORDER BY fecha ASC, titulo DESC

Tabla 1. Resultados según orden ascendente del campo3 y descendente del campo4


SELECT * FROM nombre-de-tabla ORDER BY nombre-de-campo1 + 0 DESC


SELECT * FROM catalogo ORDER BY titulo +0 DESC


Tabla 2. Resultados según orden natural descendente por el campo1


SELECT * FROM nombre-de-tabla ORDER BY nombre-de-campo1 +0 ASC, nombre-de-campo2 +0 DESC


SELECT * FROM catalogo ORDER BY titulo +0 ASC, fecha +0 DESC

Tabla 3. Resultados según orden natural ascendente del campo1 y orden natural descendente del campo2


Cláusula SELECT DISTINCT
La cláusula SELECT DISTINCT permite seleccionar resultados de la consulta cuyos datos no sean duplicados en las columnas que se indican. 


SELECT DISTINCT nombre-de-campo1 FROM nombre-de-tabla


SELECT DISTINCT autor FROM catalogo

 Tabla 4. Seleccionar registros de la tabla cuyos valores en el campo1 sean diferentes o distintos


SELECT DISTINCT nombre-de-campo1, nombre-de-campo2, nombre-de-campo3 FROM nombre-de-tabla WHERE condición-de-consulta


SELECT DISTINCT materia, autor, titulo FROM catalogo WHERE fecha LIKE '%2010%'

Tabla 5. Seleccionar registros de la tabla que cumpla las condiciones de consulta establecidas y cuyos valores en los campos 1, 2 y 3 sean diferentes o distintos


04.- Operaciones de consulta SQL esenciales

Hasta el momento se han advertido los mecanismos más sencillos de interactuación en lenguaje SQL. En este apartado se comenzará a explorar las posibilidades de consulta esenciales de SQL, concretamente el uso del operador LIKE, REGEXP (de comparación de cadenas) y los operadores AND, OR, XOR y NOT ( booleanos ).

Consulta con operador LIKE
El operador LIKE al igual que REGEXP, son operadores cuya misión es la comparación de cadenas o patrones dados en la consulta. La principal diferencia es que LIKE efectúa un reconocimiento de la cadena de consulta de forma absoluta a no ser que se especifiquen los caracteres precedentes y antecedentes con:
  • ( % ) Establece coincidencia con cualquier extensión y tipo de caracter delante o detrás de la cadena de consulta, según se ubique el porcentaje.
  • ( _ ) Establece coincidencia con 1 caracter de cualquier tipo delante o detrás de la cadena de consulta, según se ubique el guión bajo.

SELECT * FROM catalogo WHERE titulo LIKE '%cupe%'
 Tabla1. Buscar cualquier registro de la tabla catálogo cuyo título contenga la cadena cupe. Esta consulta obtendría como resultado registros con la palabra recuperación, irrecuperable, ocupe, desocupen, etc.
 
SELECT * FROM catalogo WHERE isbn LIKE '978-84-____-___-5'
 Tabla2. Buscar cualquier registro de la tabla catálogo cuyo isbn contenga cualquier caracter entre 978-84- y -5. Por ejemplo se obtendría como resultado 978-84-1234-123-5.

Consulta con operador AND ( && )
Recupera registros siempre y cuando se cumplan todas las condiciones establecidas. Si alguna no se cumple, no se incluye como resultando, saltando a los siguientes registros de la tabla. Por ejemplo la consulta de la tabla3, establece que los registros deberán cumplir la condición de contener en su título, subtítulo, resumen, descripción y autor la palabra texto. Obsérvese la sintaxis empleada (SELECT + campos + FROM + tabla afectada + WHERE + condición1(campo + LIKE + 'texto de consulta') AND condición2(campo + LIKE + 'texto de consulta') AND condición3(campo + LIKE + 'texto de consulta' ))

SELECT * FROM catalogo WHERE
   titulo LIKE '%texto%' AND    subtitulo LIKE '%texto%' AND
   resumen LIKE '%texto%' AND
   descripcion LIKE '%texto%' AND
   autor LIKE '%texto%'
   LIMIT 0,30
 Tabla3. Consulta utilizando el operador AND

Consulta con operador OR ( || )
Recupera registros siempre que al menos una de las condiciones establecidas se verifique. Por ejemplo, en la tabla4 se establece que los registros deberán cumplir que o bien el título coincida con el patrón, o bien sea el subtítulo, el resumen, descripción o autor. No devolverá ningún registro si no se cumple al menos una de las condiciones.

SELECT * FROM catalogo WHERE
   titulo LIKE '%texto%' OR    subtitulo LIKE '%texto%' OR
   resumen LIKE '%texto%' OR
   descripcion LIKE '%texto%' OR
   autor LIKE '%texto%'
   LIMIT 0,30
 Tabla4. Consulta utilizando el operador OR

Consulta con operador XOR
Variante absoluta del operador OR, recupera registros que cumplan una condición u otra pero nunca recuperará registros en que ambas condiciones se cumplan a la vez. Por ejemplo la consulta de la tabla5 recuperará cualquier libro del catálogo cuya temática sea arquitectura o bibliotecas, pero nunca arquitectura de bibliotecas.

SELECT * FROM catalogo WHERE
   tematica LIKE '%arquitectura%' XOR
   tematica LIKE '%bibliotecas%'
   LIMIT 0,30 
 Tabla5. Consulta utilizando el operador XOR

Consulta con operador NOT ( ! )
Se utiliza como operador de precedencia con los operadores de comparación de cadenas de tipo LIKE, permite establecer una negación en las consultas. Por ejemplo en la tabla6, se recuperará todos los registros del catálogo cuyo autor sea Cervantes y cuyos títulos no contengan la palabra Quijote. El resultado probable sería La Gitanilla, Rinconete y Cortadillo, El Licenciado Vidriera, etc, menos El Quijote.
SELECT * FROM catalogo WHERE 
   autor LIKE '%cervantes%' AND
   title NOT LIKE '%quijote%'
   LIMIT 0,30
 Tabla6. Consulta utilizando el operador NOT

Consulta con operador REGEXP
REGEXP es un operador especializado en la comparación de cadenas de texto mediante expresiones regulares (REGular EXPressions). Las expresiones regulares se utilizan para afinar de forma mucho más precisa la consulta de datos o cadenas de texto. Estas se componen a base de caracteres especiales, los más comunes son:
  • ( . ) Cada punto corresponde a un caracter individual, puede ser un número, letra o cualquier otro caracter.
  • ( ^ ) Indica que el patrón comienza por la instrucción que siga a ^.
  • ( $ ) Indica que el patrón finaliza con la cadena o instrucción que preceda a $.
  • ( ... ) Tantos puntos se indiquen, tantos caracteres tendrá la cadena de texto objetivo.
  • ( ^[Az]{5} ) Indica que el patron a buscar comienza por cualquier letra, con una extensión de 5 caracteres.
  • ( ^.*[0-9]{2}$ ) Establece que la cadena comienza por cualquier caracter repetido n veces y que finaliza con un número de 2 cifras.
Por ejemplo en la tabla7 se consultan todos los autores cuyo apellido comience por Bal. El resultado podrá ser muy diverso, Balzac, Balz, Balza, etc.
    SELECT * FROM catalogo WHERE
    autor REGEXP '^Bal'
    LIMIT 0,30 
     Tabla7. Consulta utilizando el operador REGEXP

    Algunas referencias de interés para el estudio de expresiones regulares y sus pruebas son las siguientes:

    03.- Principios de SQL y sintaxis básica

    Por lo tanto SQL es un lenguaje de consulta estándar diseñado para operar en bases de datos. Como se ha explicado actúa en MySQL, pero también puede operar en otras bases de datos como Oracle, DB2, SQL server, PostgreSQL, etc. Qué operaciones permite llevar a cabo:
    • Ejecutar consultas y recuperar datos
    • Efectuar procesos de recuperación de información
    • Insertar, actualizar y eliminar registros
    • Crear nuevas bases de datos, tablas y campos
    • Establecer permisos de administración para los usuarios
    • Crear distintas vistas de una base de datos

    Aprendiendo la sintaxis básica
    En este curso nos centraremos en los métodos de recuperación por medio de SQL. Pero para ello es necesario aprender una sintaxis básica con la que se explican los principios de consulta SQL. En la siguiente tabla1 se observan una serie de palabras reservadas o cláusulas (coloreadas en rojo) que corresponden al selector de campos (SELECT), al selector de tablas (FROM) y a la cláusula condicional (WHERE).

    SELECT campos FROM tabla WHERE condición
     Tabla1. Sintáxis de consulta básica

    Siempre que se desea obtener datos o resultados de una consulta SQL se requiere un selector de los campos que son objetivo de la búsqueda, seleccionar la tabla en la que se desea buscar la información y establecer las condiciones oportunas que deben cumplir los resultados. Véase el siguiente ejemplo de la tabla2:

    SELECT isbn FROM catalogo WHERE autor LIKE '%bryson%'
     Tabla2. Ejemplo de consulta de todos los isbn del catálogo de libros cuyo autor sea bryson

    Este ejemplo se puede traducir de la siguiente forma: Selecciona el campo isbn de todos los registros de la tabla catálogo que cumplan la condición de que dentro del campo autor se contenga el término bryson. Obsérvese que el término de consulta esta rodeado de porcentajes. Esos caracteres también denominados truncamientos actúan sobre la consulta para indicar que la cadena bryson puede tener cadenas de texto que le precedan y que le sigan, como por ejemplo bill bryson natural de.

    Crear una base de datos
    Para crear una base de datos solo es necesario recordar la fórmula (CREATE DATABASE + nombre de la base de datos), véase tabla3. El nombre de la base de datos es recomendable que se escriba siempre en minúsculas, sin caracteres extraños, símbolos o acentos. Tampoco debería preceder al nombre ningún número. Por otro lado los espacios en el nombre deben ser sustituidos por guiones bajos (_) o guiones medios (-). Finalmente es recomendable el uso de nombres sencillos que puedan ser fácilmente recordados.

    CREATE DATABASE biblioteca
     Tabla3. Crear una base de datos denominada "biblioteca"

    Crear una tabla con campos
    La creación de una tabla en mysql implica también el diseño de su estructura de campos y con ello definir sus características. Resulta vital la forma en que se diseñan las tablas para así poder efectuar una mejor recuperación y utilizar funciones específicamente diseñadas para tal propósito, es el caso de las consultas de tipo FULLTEXT. Cuando se diseña la tabla, se deben establecer el tipo de campos que la componen en función al tipo de información que albergarán y a su extensión, por otro lado su set de codificación o set de caracteres que se utilizará, véase tabla4.

    CREATE TABLE users (
    id          INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id),
    name        VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
    surname     VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
    allvisits   LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,
    lastvisit   VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
    lastsession VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
    online      VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci,
    level       VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
    username    VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
    password    VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci,
    trash       VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci,
    snumber     VARCHAR(2) CHARACTER SET utf8 COLLATE utf8_general_ci,
    email       VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci
    ) CHARACTER SET utf8 COLLATE utf8_general_ci
     Tabla4. Crear una tabla denominada "users"

    Insertar un nuevo registro en la tabla
    Crear un nuevo registro en la tabla anterior se lleva a cabo con la sentencia de la tabla5. Obsérvese la sintaxis (INSERT INTO + nombre de tabla afectada + SET + nombre del campo = 'datos', nombre del campo = 'datos', nombre del campo = 'datos'...) Esta forma de insertar datos permite al operador de MySQL tener un mayor control sobre la información que inserta en el registro, pues no esta obligado a introducir todos los datos de todos los campos si no lo desea. Es posible introducir sólo la información de los campos que se reseñen.

    INSERT INTO users SET name='nombre', surname='apellidos', allvisits='registro de todas las visitas', lastvisits='última visita', lastsession='última sesión', online='estado', level='nivel de acceso', username='nombre de usuario', password='contraseña', trash='código de encriptación', snumber='código de seguridad', email='correo electrónico'
     Tabla5. Ejemplo de inserción de un registro completo en la tabla

    Modificar y actualizar un registro de la tabla
    Se utiliza la sintaxis (UPDATE + nombre de tabla afectada + SET + nombre del campo = 'nuevo dato', nombre del campo = 'nuevo dato', nombre del campo = 'nuevo dato' + WHERE + condición) Al igual que en el caso anterior de la inserción, no se está obligado a repetir todos los campos de la estructura que conforma la tabla de MySQL. Es suficiente reseñando sólo aquellos campos del registro en el que se van a suceder los cambios con nuevos datos. Finalmente se requiere la condición de la consulta de actualización, es decir, qué registro es el que se desea actualizar. En el caso de la tabla6, es sobre un registro en concreto, por lo que es necesario expresar que el identificador del usuario sea igual al que establezcamos.

    UPDATE users SET name = 'nuevo nombre', surname = 'nuevos apellidos' WHERE id = 'identificador del registro'
     Tabla6. Ejemplo de modificación y actualización de un registro de una tabla

    Eliminar un registro de la tabla
    Para eliminar un registro de una tabla se emplea la sintaxis (DELETE FROM + nombre de tabla afectada + WHERE + condición), véase tabla7. Al igual que en el caso de la modificación y actualización de una tabla es preciso determinar la condición bajo la que se eliminará los registros o registro concreto. Una vez más señalando el número de identificación es suficiente para indicar a MySQL cómo proceder.

    DELETE FROM items WHERE id = 'identificador del registro'
     Tabla7. Borrar un registro de una tabla

    martes, 4 de octubre de 2011

    02.- Recuperación de información en bases de datos

    ¿Qué es una base de conocimiento?
    Es cualquier colección o fondo documental que constituye el corpus de un sistema de recuperación de información. Habitualmente esta base de conocimiento se organiza y estructura en bases de datos para su mejor gestión, tratamiento y recuperación. Esto significa que base de conocimiento puede ser desde un compendio de datos, cifras y cadenas de texto inconexas, hasta documentos, referencias bibliográficas y compendios informativos y semánticos con plena significación.

    ¿Qué es una base de datos?
    La base de datos es el sistema que posibilita la organización y estructuración de los contenidos o bases de conocimiento en tablas y éstas a su vez en campos, de tal forma que cada campo represente una característica o rasgo descriptivo de la información o contenido registrado en la base de datos y cada tabla represente el dominio general que se está almacenando. Por ejemplo una tabla de usuarios contendrá campos lógicos que definan, describan e identifiquen a cada usuario. Por ejemplo el nombre, apellidos, dni, direccion, correo, website, telefono, cp, etc. Dentro de las distintas tablas de una base de datos es posible encontrar relaciones evidentes, ampliando la magnitud de la información. Es el caso de las bases de datos relacionales. Por ejemplo la tabla usuarios puede estar relacionada con la tabla prestamos en la que se relacionan los documentos y materiales librarios que se les presta. Esta operación en todo caso requiere de un campo clave de relación, que puede ser el identificador del usuario, sobre el que se registra los datos del préstamo y el identificador del libro que se le está prestando. Este mecanismo tan sencillo hace posible que distintas tablas queden vinculadas y puedan ser contrastadas y filtradas. Pero una base de datos comporta muchos más aspectos, el tipo de campos, sus características especiales para almacenar determinados contenidos, por ejemplo datos binarios, imágenes, textos de gran extensión, numeración en coma flotante, etc. Todos estos componentes hacen que cualquier base de conocimiento pueda ser recogida sea cual sea su naturaleza y características.

    ¿Qué es un gestor de bases de datos?
    El manejo de las bases de datos habitualmente se lleva a cabo mediante comandos bien definidos en terminales especializados, shell (Linux), cmd (Windows). Estos comandos en la mayoría de los casos responden al lenguaje de consulta normalizado SQL (Structured Query Language) con el que la base de datos entiende qué debe hacer. Mediante este lenguaje es posible dar ordenes al sistema para que inserte un registro, lo borre, lo edite y por supuesto recupere un determinado dato, información o documento. Dado que este método de comunicación requiere un tecleado continuo para interactuar con el sistema, se han desarrollado programas informáticos que llevan a cabo dicha función de manera automática, facilitando al administrador un interfaz gráfico para la edición, tratamiento y recuperación de la información. Estos programas que permiten trabajar con las bases de datos, las tablas, los campos y los datos almacenados en ellas se denominan gestores de bases de datos. Uno de los más conocidos y utilizados en todo el mundo es PhpMyAdmin. Diseñado para trabajar principalmente con bases de datos que emplean el lenguaje SQL.

    ¿Qué es MySQL?
    MySQL es la principal base de datos que alambica la web. Utiliza el lenguaje de consulta SQL y es utilizada conjuntamente con el lenguaje de programación PHP para crear las principales aplicaciones de la red. Normalmente actúa como un componente más que se instala en el paradigma de desarrollo web WAMP (SO. Windows, Servidor http Apache, BD MySQL, intérprete PHP), LAMP (SO. Linux, Servidor http Apache, BD MySQL, intérprete PHP) o MAMP (SO. Mac, Servidor http Apache, BD MySQL, intérprete PHP). Dicho de otra forma es la base de datos que sirve para almacenar la mayoría de los datos y transacciones comunicativas que se producen en internet. Es muy notable su utilización en Sitios Web, CMS (Content Management System) o gestores de contenidos, Sistemas de Gestión Integral de Bibliotecas, Archivos, Museos y un largo etcétera de herramientas y aplicaciones de software libre. Entre sus características más importantes destaca su capacidad para ejecutar múltiples consultas en distintos hilos de ejecución por segundo, gran capacidad de almacenamiento y motor de almacenamiento que efectúa un proceso de indexación automático de los contenidos y en todo caso de la base de conocimiento con que se alimente. Estas últimas características permiten hablar de recuperación de información y no de recuperación de datos, ya que efectúa por si solo los procesos de tratamiento previos a la recuperación de información. 
    • Eliminación de palabras vacías
    • Indexación de contenidos
    • Creación de fichero inverso
    • Análisis de frecuencias de cada término
    • Recuperación booleana
    • Recuperación a texto completo
    • Recuperación con lenguaje natural
    • Recuperación con expansión de consulta

      ¿Cómo funciona?
      Para trabajar con MySQL se necesita previamente instalarlo. Esta tarea se lleva a cabo con la instalación de un servidor http y sus componentes habituales, utilizando uno de los paradigmas de desarrollo web mencionados anteriormente. Por ejemplo mediante la instalación de una distribución WAMP ( AppServ ), LAMP ( Xampp ) o MAMP ( mamp ). Una vez instalado se requieren unos datos de conexión fundamentales para empezar a operar, estos son:
      • Nombre del servidor. Esto es la dirección IP o el nombre de dominio o la máquina en el que está instalado el servicio HTTP, la base de datos MySQL y el intérprete PHP. Por ejemplo si se trata de una instalación local que corresponde a nuestro equipo u ordenador, la dirección IP del servidor siempre será 127.0.0.1 y el nombre de servidor localhost, normalmente.
      • Nombre de la base de datos. Para que MySQL sepa con que base de datos se va a trabajar, es necesario indicar o seleccionar en todo caso su nombre. Se debe pensar que MySQL puede generar tantas bases de datos como requiera el usuario, lo que implica que en todo momento es necesario distinguir sobre cuál se desea operar.
      • Usuario y contraseña MySQL. Es el nombre del usuario y su contraseña de acceso a la base de datos MySQL. Éste puede ser un simple usuario con unos privilegios limitados o el administrador del sistema. En una instalación local de prueba, tanto el usuario como la contraseña siempre será root (Convenido por defecto).   
      Ejemplo de sintaxis de conexión en PHP
      <?php  
      $con = mysql_connect('localhost', 'root', 'root') or die ('error: no se pudo conectar a mysql');
      $database = 'openbiblio';
      ?>

      Especificados los datos de conexión e introducidos en el sistema MySQL, se hace posible su consulta y operación mediante sentencias SQL o bien empleado el interfaz gráfico de un gestor de bases de datos como el mencionado anteriormente.