Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Creo que es imposible pero...m:n

Estas en el tema de Creo que es imposible pero...m:n en el foro de Bases de Datos General en Foros del Web. Hola a todos , creo que el modelo relacional no soporta las relaciones m:n seguramente solo con sql no conseguiré hacer lo que me propongo. ...
  #1 (permalink)  
Antiguo 16/04/2007, 16:07
 
Fecha de Ingreso: diciembre-2002
Mensajes: 14
Antigüedad: 21 años, 10 meses
Puntos: 0
Creo que es imposible pero...m:n

Hola a todos ,
creo que el modelo relacional no soporta las relaciones m:n seguramente solo con sql no conseguiré hacer lo que me propongo.

Si tengo una relación m:n por ejemplo:
tabla1:LIBRO
tabla2:CATEGORIA
tabla3:mm_LIBRO_CATEGORIA

El propósito es que los diferentes LIBROS puedan pertenercer a diferentes categorias. Para ello en la tercera tabla tendríamos en una columna la clave principal de LIBRO y la clave principal de CATEGORIA.

PERO...
¿Y si yo quiero hacer una consulta donde obtener todos los libros que pertenezcan a n categorias diferentes a la vez? (sin saber a priori el valor de n)
Si lo que me propongo es obtener todos los libros que pertenecen a una categoria de n posibles es muy sencillo --> mediante inner joins y luego clausulas 'where' unidas por 'or's. Pero no podemos hacer lo mismo mediante 'and' lógicos.

Alguien sabría hacerlo sin utilizar procedimientos almacenados? O indicarme algún lugar donde se debata la problemática?

Muchas gracias a todos.
  #2 (permalink)  
Antiguo 17/04/2007, 04:06
Avatar de MACGREGOR  
Fecha de Ingreso: enero-2005
Mensajes: 89
Antigüedad: 19 años, 10 meses
Puntos: 0
Re: Creo que es imposible pero...m:n

Hola,
El modelo relacional sí, SÍ soporta relaciones N:M.
Lo que sucede es que para implementarlas debes NORMALIZAR las entidades que representan esas "Tablas" N y M.
El resultado aplicar las reglas de normalización (Formas normales) te dará las directrices necesarias para obtener un esquema Entidad/Relación implementable.
En este caso deberás crear una tabla intermedia (segunda Forma Normal si no recuerdo mal) que tendrá dos relaciones del tipo 1:N con cada una de las entidades originales que tenías.

Veo que la idea la tienes mas o menos clara, ya que has creado la tabla "intermedia". Lo que no entiendo es el problema que planteas.
Qué significa que no se puede hacer con "ands" y sí con "ors"?
Eso me indica que harías una select con un where que contendría t.id_categoria=1 or t.id_categoria=2 or ... así hasta las N categorías...

lo más sencillo sería:

select l.nombre_libro, c.descripcion_categoria
from Tabla_Libro l,
Tabla_Categoria c,
Tabla_Libro_Categoria lc
where l.id_libro=lc.id_libro
and lc.id_categoria=c.id_categoria
and c.id_categoria in (1,2,3,4,5,....n)

(En función del sistema gestor de BBDD que utilices la nomenglatura será un tanto diferente en algunos casos.)

Espero que te ayude en tu duda.

Un saludo
  #3 (permalink)  
Antiguo 17/04/2007, 05:03
 
Fecha de Ingreso: diciembre-2002
Mensajes: 14
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Creo que es imposible pero...m:n

Primero de todo gracias por contestar...
Fíjate que la consulta que comentas es equivalente a -->

select l.nombre_libro, c.descripcion_categoria
from Tabla_Libro l,
Tabla_Categoria c,
Tabla_Libro_Categoria lc
where l.id_libro=lc.id_libro
and lc.id_categoria=c.id_categoria
and (c.id_categoria=1 or c.id_categoria=2 or c.id_categoria=..n)

es decir podemos obtener los registros que pertenezcan como mínimo a una de esas categorias, pero ¿si quisieramos que pertenecieran a 'todas' las galerias?
Lo primero que pensé fué...pues cambio el or por un and , pero no, si se analiza como se obtienen los resultados no tiene ningún sentido hacer eso y nunca se cumple la condición, ya que las distintas categorias están en registros diferentes.

Por eso creo que no se puede realizar en sql y habría que utilizar un procedimiento almacenado para recorrer los resultados y comprobar que Libro.id ha obtenido un registro para cada una de las categorias a comprobar.

Un saludo.
  #4 (permalink)  
Antiguo 17/04/2007, 15:59
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Creo que es imposible pero...m:n

Cita:
Editado por nicolaspar, quién no volvera a postear en este foro por consecuencias de la mala moderación de BrujoNic
__________________
Mi punto de partida es Que Bueno Lo Nuevo

Última edición por nicolaspar; 26/08/2007 a las 11:05
  #5 (permalink)  
Antiguo 18/04/2007, 10:12
 
Fecha de Ingreso: diciembre-2002
Mensajes: 14
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Creo que es imposible pero...m:n

Hola,
parece interesante el nuevo enfoque que le das, realmente era lo que necesitaba, mirar en otro sentido. De todas formas aun no lo he testeasdo pero ya tengo otra dirección donde esforzarme.

Muchas gracias y un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:08.