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

Relaciones entre tablas en phpmyadmin

Estas en el tema de Relaciones entre tablas en phpmyadmin en el foro de Bases de Datos General en Foros del Web. Me he puesto con php y bases de datos después de mucho tiempo. Estoy usando wampserver y mientras he usado una sola tabla todo bien. ...
  #1 (permalink)  
Antiguo 25/12/2012, 13:06
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 17 años
Puntos: 3
Relaciones entre tablas en phpmyadmin

Me he puesto con php y bases de datos después de mucho tiempo. Estoy usando wampserver y mientras he usado una sola tabla todo bien. Ha llegado el momento de meter otra tabla en la base de datos y relacionarla y ahi encuentro el problema: no tenia ni idea de como relacionarla en phpmyadmin.

Os pondre un ejemplo de como es con lo que estoy trabajando: tengo dos tablas donde una de ellas es una lista de personas (id_persona, nombre) y otra de parentescos (id_parentesco, persona, padre, madre).
En la tabla de personas id_personas es un entero. En la otra tabla todos los campos son enteros ya que establecen relaciones entre las personas de la primera tabla, asi que básicamente persona, padre o madre contendrán un entero que hace referencia a id_persona en personas.

Pues bien lo que hice es irme a la tabla parentescos, establecer indices en persona, padre y madre y luego editar las relaciones poniendoles a todas ellas en el desplegable que me sale la referencia a id_personas en la tabla personas. Solo me ha conectado persona de la tabla parentescos mientras que padre y madre me da un error.

Alguien puede echarme un cable? Gracias.
  #2 (permalink)  
Antiguo 27/12/2012, 15:28
 
Fecha de Ingreso: diciembre-2012
Ubicación: Medellín
Mensajes: 10
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Relaciones entre tablas en phpmyadmin

Bueno, de mi parte pienso que podría ser el varchar, ya que por casualidad has puesto una variable número en una de letras, así que debiste haber puesto una que sea para todas, como en mi caso pongo varchar y si el parentesco madre y padre solo son de 5 cifras podría poner la regla:
varchar_5 donde Varchar es madre o padre (únicamente esto)

Aunque pienso que serían mas datos porque madre, padre y si es adoptivo, padrastro o cosas así.

Bueno espero de pronto haber sido claro y que entiendas mi información hay intenté echarte una mano :)

Suerte
  #3 (permalink)  
Antiguo 28/12/2012, 02:39
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 17 años
Puntos: 3
Respuesta: Relaciones entre tablas en phpmyadmin

Disculpame pero no acabo de entender lo que dices de varchar. Vamos a ver.

La tabla de personas tiene la siguien estructura:

id_persona (entero, primary key)
nombre (texto varchar)

La tabla de parentescos tiene la siguientre estructura:

id_parentesco (entero, primary key)
persona (clave foranea ìd_persona)
padre (clave foranea ìd_persona)
madre (clave foranea ìd_persona)

Intenté establecer esas conexiones entre tablas como he explicado en el post anterior pero por alguna razón solo me establecio la primera (persona) y pienso que es por mi desconocimiento del funcionamiento de phpmyadmin. Esa es la ayuda que necesito, que alguien me indique como establecer esas conexiones.

En cuanto a lo de mas campos esta considerado pero por el momento me bastan esos entre otras cosas porque ahi establezco lineas sanguineas y lo mires como lo mires cada persona solo tiene un padre y una madre.

Gracias de todas formas.

Actualizo:El problema era que no podia crear dichas relaciones porque la tabla relaciones ya tenía datos dentro. Los borré y pude establecer las relaciones. El problema ahora es que cuando intento importar los datos desde un archivo no me lo permite. He descubierto que si tengo las claves primarias ya introducidas si me deja importar desde el archivo pero no me deja importarlos datos si la tabla esta completamente vacia. ¿Que puedo hacer ahora?

Última edición por harvey; 28/12/2012 a las 03:34
  #4 (permalink)  
Antiguo 28/12/2012, 03:49
Avatar de 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, 5 meses
Puntos: 2658
Respuesta: Relaciones entre tablas en phpmyadmin

Cita:
He descubierto que si tengo las claves primarias ya introducidas si me deja importar desde el archivo pero no me deja importarlos datos si la tabla esta completamente vacia. ¿Que puedo hacer ahora?
Más allá de que tu diseño presenta defectos (la solucion correcta es algo distinta), el problema puntual es que en tu archivo de texto puedes tener datos incorrectos en las FK que quieres cargar, o bien no las cargas en el orden debido.
Toda tabla que contenga FK referidas a otra, debe ser cargada sólo luego de cargar la referida. Esto significa que si las tablas A y B son las que tienen los datos primarios y la C los secundarios, se deben cargar en ese orden. Intentar cargar una tabla con FK antes de la referida genera error de integridad referencial porque cada insercion verifica la tabla origen y esa está aún vacía.
Otro error de diseño muy habitual en los principiantes es generar relaciones circulares: La tabla A tiene una FK apuntando a la B, y la tabla B una FK apuntando a la A.
Esa es una relación de cumplimiento imposible, no te dejará insertar nada en ninguna.

Verifica los datos y el orden de carga que usas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/12/2012, 06:17
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 17 años
Puntos: 3
Respuesta: Relaciones entre tablas en phpmyadmin

Acabo de descubrir que no me acepta los campos nulos que hay en algunos registros: en alguno de ellos no hay introducidos códigos de padres o madres porque esos datos no estan disponibles. Sin embargo en las caracteristicas de los campos les indique que podian ser nulos.

No soy exactamente principiante. La tabla referida por supuesto fue introducida antes que esta con las claves foraneas.

Por otro lado ¿A que defectos de diseño te refieres exactamente?
  #6 (permalink)  
Antiguo 28/12/2012, 07:03
Avatar de 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, 5 meses
Puntos: 2658
Respuesta: Relaciones entre tablas en phpmyadmin

Una tabla de parentezcos se diseña para que cada registro vincule una persona con un único pariente.
Es una relación de N:N, con un discriminante de categoría de pariente.
La que pones requiere que cada uno de ellos tenga registrados padre y madre, por lo que en definitiva creas unas relaciones mandatorias, cuando por lo que describes deberían ser opcionales, ya que no siempre se cuenta con esos datos.
Eso es un defecto de diseño.

Es un diseño parecido al de una tabla de empleados donde se define quien es el jefe por medio de una FK hacia si misma, solo que en ese caso requieres una tabla separada porque cada persona puede relacionarse con dos, y a su vez cada padre puede aparecer más de una vez, si hay más de un hijo relacionado con los mismos padres.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 28/12/2012, 21:15
 
Fecha de Ingreso: diciembre-2012
Ubicación: En Venezuela
Mensajes: 9
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Relaciones entre tablas en phpmyadmin

Hola Harvey hay un video en youtube que te enseña a relacionar tablas escribe esto en youtube:

Crear Una Base De Datos mysql En PhpMyAdmin

el video fue subido por radamanthyss17

espero sea de ayuda.
  #8 (permalink)  
Antiguo 28/12/2012, 22:11
Avatar de 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, 5 meses
Puntos: 2658
Respuesta: Relaciones entre tablas en phpmyadmin

¿En serio consideras eso una ayuda?
Este es un foro de desarrolladores. Eso es para niveles por debajo de principiantes...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 29/12/2012, 03:11
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 17 años
Puntos: 3
Respuesta: Relaciones entre tablas en phpmyadmin

Gracias a los dos. Como dije no soy exactamente principiante. He trabajado antes con bases de datos en mysql, en access, y usando access a traves de programacion en visual basic pero he hecho diferentes cosas y con frecuencia he estado apartado de esto durante largas temporadas con lo cual cada vez que vuelvo tengo que ir volviendo a recordar cosas (claro que no es tan dificil ir volviendo a pillarlas.) A lo que voy es que normalmente no cometo este tipo de errores de diseño pero entre eso y que este proyecto es algo diferente al tipo de cosas con las que he trabajado otras veces no tenía muy claro como enfocarlo.

La cosa es que entendí poco despues de poner mi ultimo post a que te referias gnzsoloyo aunque hasta ahora no he podido ponerme con ello. Reformulando las relaciones, asi a priori, se me ocurre que podria crear una tabla del tipo:

id_parentesco (primary key)
persona (clave foranea a id_persona de la tabla personas)
hijo (clave foranea a id_persona de la tabla personas)

Donde cada entrada de registro implica que alguien es hijo de alguien y cuando no existe esa relación (o los datos) el registro simplemente no existe. Esto me obligaría a desde la programación a determinar si persona se trata del padre o de la madre a traves del campo sexo que hay en la tabla personas.

Dime como lo ves gnzsoloyo.

Edito: He estado ausente por una averia en el ordenador. ¿Alguien me dice su opinión sobre el planteamiento de la nueva tabla de relaciones?

Última edición por harvey; 10/01/2013 a las 03:38
  #10 (permalink)  
Antiguo 10/01/2013, 09:32
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 17 años
Puntos: 3
Respuesta: Relaciones entre tablas en phpmyadmin

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.

Última edición por harvey; 15/01/2013 a las 04:24 Razón: Problema solucionado

Etiquetas: campos, phpmyadmin, relaciones, tabla, tablas
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 20:08.