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

Problemas con el uso de claves foraneas

Estas en el tema de Problemas con el uso de claves foraneas en el foro de Bases de Datos General en Foros del Web. Estoy encontrando problemas con claves foraneas en un par de bases de datos y agradecería que alguien me echara una mano: PRIMERA DB Uno de ...
  #1 (permalink)  
Antiguo 12/01/2013, 10:16
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 16 años, 11 meses
Puntos: 3
Problemas con el uso de claves foraneas

Estoy encontrando problemas con claves foraneas en un par de bases de datos y agradecería que alguien me echara una mano:

PRIMERA DB
Uno de los problemas lo tengo en Access, en una base de datos para comics donde en un principio tenía tres tablas: comics, originales y relaciones. En la tabla comics meto los datos del comic que poseo (en su mayoria ediciones españolas), en la tabla originales meto los datos de los números originales USA y en la tabla relaciones pues los relaciono de manera que una edición española puede recopilar varios números USA y a su vez un número USA puede estar presente en varias ediciones españolas.

Problema 1: Al crear un informe de los comics en edición española donde se detalle los números USA que comprenden solo me lista los comics a los que efectivamente les he adjudicado una correspondencia. Aquellos cuyos números aún no he indicado o simplemente no tienen correspondencia no aparecen.

Problema 2: Cree un campo en la tabla comics con clave foranea (con el asistente)a las editoriales para evitar escribirlas una y otra vez pero he descubierto que me obliga a rellenarlo siempre so pena de que algunas consultas no me muestren los resultados donde se ha omitido dichos datos.

SEGUNDA DB
La que he mencionado en otros post, que es algo así como un arbol genealógico. Tengo una primera tabla donde estan todos los miembros. Luego tengo una segunda tabla que llevaría las relaciones y ahí esta el problema: el sentido común me dice que la forma de esta tabla deberia ser así como:

id_relación (Primaria)
id_miembro (foranea)
id_padre (foranea)
id_madre (foranea)

Planteado de esta forma haría muy facil la consulta de datos como determinar hermanos en los que ambos progenitores son los mismos o aquellos que solo tienen un progenitor común. Sin embargo, al igual que en el caso anterior, por lo visto las claves foraneas obligan a tener los datos (según me comentaba el forero gnzsoloyo) con lo que si no tengo los datos de uno de los progenitores no puedo hacer el registro. Por otro lado la propia base de datos en phpmyadmin me da problemas para importar los datos (desde un archivo generado con Access).

La otra opción que me queda es que la tabla de relaciones sea así como:
id_relacion (primaria)
id_miembro
id_hijo
Donde si no tienes uno de los dos datos simplemente no existe relacaión y por tanto registro pero complica la cosa para determinar padres, hermanos, hermanastros y demás.
  #2 (permalink)  
Antiguo 15/01/2013, 04:22
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 16 años, 11 meses
Puntos: 3
Respuesta: Problemas con el uso de claves foraneas

He encontrado la solución. El problema que estaba teniendo es porque hace mucho que no trabajaba con bases de datos mysql y ademas mi experiencia reciente con Access me ha obstaculizado para verlo claro. La cosa es que establecia relaciones usando claves foraneas cuando simplemente no debía hacerlo. La relación entre las tablas en estos casos debe hacerse con sentencias SQL del tipo:

Select * from miembros, relaciones where miembros.id_miembro=relaciones.miembro

Si bien esto era algo que ya hacía en las consultas el problema, como digo, es que además tenia establecidas las relaciones en phpmyadmin con foraneas. Pongo esto por si alguien se encuentra con el mismo problema y doy por resuelto el problema.

Etiquetas: access, claves, php, tabla, foreignkey
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 14:29.