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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Helena
14/03/2006 - 18:48 | Informe spam
Maravillosa respuesta,

la verdad es que un diseño de Base de Datos bastante mas bueno.
Es lo que tiene estar empezando, que no tienes ni idea... :P
Me pondré a ello..

Muchísimas gracias.

Un saludo...

"Alberto Poblacion"
escribió en el mensaje news:
"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.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida