Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/04/2014, 07:57
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 7 meses
Puntos: 2658
Respuesta: Buscador de música

Personalmente yo resolveria tu problema analizando tu modelo de datos necesario de otra forma, que facilitaría todas las consultas.
Mirémoslo así:
- Una canción puede tener 1 o N autores.
- Un autor puede serlo de 1 o N canciones.
- Una canción puede haber sido interpretada por 1 o N artistas.
- Una canción puede haber sido editada por 1 o N sellos y en 1 o N volúmenes (CDs, por caso)

¿Qué implica eso?
Que tienes este esquema de tablas:

CANCION(idCancion, nombreCancion)
AUTOR(IdAutor, NombreAutor, ...otros datos)
CANTANTE(IdArtista, NombreArtista, ...otros datos)
CANCION_AUTOR(idcancion, idAutor)
CANCION_INTERPRETE(idCancion, idArtista)

Mas o menos esa es la idea.

El concepto es simple: Primero, si puedes tener al menos una canción que tenga más de un autor, o más de un intérprete, ya no puedes relacionar la canción con ellos dentro de la tabla de la canción porque tienes una relación N:M, que obligatoriamente se debe crear.
Además, si puede ser editada en diferentes sellos, y en cada sello con un artista distinto, requiere un modelado mas preciso, que abarque esas condiciones.

En cualquier caso, relacionar las canciones con sus interpretes y/o sus autores por medio de una tabla relacional te facilita la tarea de realizar una consulta de búsqueda sin complicaciones, porque siempre estarías haciendo la query sobre un único campo de una tabla, o por sólo algunos de ellos.
En el contexto descripto, es posible crear indices útiles, sean o no FULLTEXT.

Finalmente, algunas recomendaciones para que tengas cuentas en los LIKE:
1) No es buena idea hacer búsquedas por palabras de menos de cinco letras, porque las coincidencias (falsas en su mayoría) son demasiadas. MySQL no implementó ese límite para el MATCH() AGAINST() porque si. Es porque es total y absolutamente ineficiente.
Supongamos esto: ¿Cuántas coincidencias inútiles podría darte bsucar nombres que contengan "del", "sit", "abs", "llo" o cosas así?
Lo que se hace normalmente es crear en los formularios una restricción para que no se pueda enviar a hacer la búsqueda a menos que el el textbox contenga por lo menos una cantidad X de caracteres no sin espacios en blanco.
2) Hacer busquedas con LIKE con una palabra entre dos comodines es total y absolutamente ineficiente, porque le pides todo lo que comience con cualquier cosa y termine con cualquier cosa. En esencia, obliga a leer toda la tabla.
¿Esto último te parece bueno?
No, por eso no se recomienda.

Espero que estos detalles te sirvan
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 20/04/2014 a las 08:02