Consulta SQL

14/03/2006 - 13:43 por Helena | Informe spam
Hola a todos,

tengo una base de datos de articulos, en el que cada artículo puedo tener
hasta 6 autores.

Cual es la manera mas elegante de hacer busquedas por articulo?

Asi de pronto se me ocurre:

autor1 = Str1 or autor1 = Str2 or autor2 = Str1 . autor6 = Str2.

Pero esto puede provocar cadenas muy largas si tengo tres o cuatro autores
que buscar...
la siguiente que pense fue:

autor1 in (Str1,Str2) or autor2 in(Str1,Str2) . or autro6 in (Str1,
Str2).

Esta al menos me parece un poco mas eficiente.

Alguien conoce metodos mas eficientes?
Incluso alguno en el que pueda definir relaciones logicas entre autores
tales como AND, OR, NOT???

Muchas gracias a todos

Un saludo.

Helena.
 

Leer las respuestas

#1 Alberto Poblacion
14/03/2006 - 16:46 | Informe spam
"Helena" wrote in message
news:
tengo una base de datos de articulos, en el que cada artículo puedo tener
hasta 6 autores.

Cual es la manera mas elegante de hacer busquedas por articulo?

Asi de pronto se me ocurre:

autor1 = Str1 or autor1 = Str2 or autor2 = Str1 . autor6 = Str2.

Pero esto puede provocar cadenas muy largas si tengo tres o cuatro autores
que buscar...
la siguiente que pense fue:

autor1 in (Str1,Str2) or autor2 in(Str1,Str2) . or autro6 in (Str1,
Str2).

Esta al menos me parece un poco mas eficiente.

Alguien conoce metodos mas eficientes?
Incluso alguno en el que pueda definir relaciones logicas entre autores
tales como AND, OR, NOT???




Sería bastante fácil de resolver si la base de datos estuviera
correctamente normalizada. En un caso como este, lo adecuado es tener una
tabla de artículos con un campo clave, por ejemplo, IdArticulo, una tabla de
autores con un campo clave, p.ej., IdAutor, y una tabla de enlace
"AutoresArticulos", que lleve un registro por cada pareja de artículo y
autor (IdArticulo, IdAutor). Esto tiene varias ventajas: Cada artículo puede
tener un número cualquiera de autores, no necesariamente limitado a 6, y no
se consume espacio para los campos de autor vacíos cuando un artículo tiene
menos autores.
Con ese diseño de base de datos, la búsqueda es muy sencilla:

Select Articulos.* from Articulos ar
Inner Join AutoresArticulos aa On ar.IdArticulo=aa.IdArticulo
Inner Join Autores au On aa.IdAutor=au.IdAutor
Where au.Nombre In (Str1, Str2, Str3)

Esta consulta funciona con cualquier número de nombres de autor y
cualquier número de autores por atículo.

Preguntas similares