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

[SOLUCIONADO] duda con relacion recursiva

Estas en el tema de duda con relacion recursiva en el foro de Mysql en Foros del Web. Buenos dias compañeros. He estado mirando algunos ejemplos de relaciones recursivas pero estoy confundido en la forma en que estas deben de plantearse en las ...
  #1 (permalink)  
Antiguo 04/11/2014, 08:04
 
Fecha de Ingreso: enero-2014
Mensajes: 100
Antigüedad: 10 años, 9 meses
Puntos: 0
Información duda con relacion recursiva

Buenos dias compañeros. He estado mirando algunos ejemplos de relaciones recursivas pero estoy confundido en la forma en que estas deben de plantearse en las tablas, por ejemplo:

tengo una tabla llamada persona con estos campos:

Código MySQL:
Ver original
  1. CREATE TABLE persona (
  2. nombre VARCHAR(80) NOT NULL,
  3. edad INT NOT NULL,
  4. PRIMARY KEY(id_persona)
  5. );

y quiero hacer una relacion amigo con esta entidad, entonses, la relacion quedaria asi: "una persona puede ser amigo de una o varias personas" entonses ¿como planteo esta relacion recursiva en la tabla?. Segun entendi yo tendria que agregar a esta tabla otro campo y que este fuera clave foranea de la clave primaria de esta tabla, entonses podria quedar asi:

Código MySQL:
Ver original
  1. CREATE TABLE persona (
  2. nombre VARCHAR(80) NOT NULL,
  3. edad INT NOT NULL,
  4. id_persona INT NOT NULL,
  5. PRIMARY KEY(id_persona)
  6. FOREIGN KEY (id_persona)
  7. REFERENCES persona(id_persona)
  8. );

pero segun yo, esto no funciona ya que, en una misma tabla no puede haber mas de 2 campos con el mismo nombre, por lo tanto tendria que cambiar el nombre del campo que utilizo como clave foranea. Esto es lo que me causa confución, ademas de que, segun se, si quiero colocar una clave foranea en la tabla2, esta debe de tener el mismo nombre y ser del mismo tipo que el campo que se utiliza como clave primaria en la tabla1.

¿podrian ayudarme?
__________________
"Benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y completamente diferente"
  #2 (permalink)  
Antiguo 04/11/2014, 08:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duda con relacion recursiva

Cita:
pero segun yo, esto no funciona ya que, en una misma tabla no puede haber mas de 2 campos con el mismo nombre, por lo tanto tendria que cambiar el nombre del campo que utilizo como clave foranea
Exacto. Eso es lo que se hace...
Le puedes poner "id_persona_depend", por ejemplo, en referencia a que "depende de".
Es un caso normal, estandarizado y universalmente usado.

Cita:
si quiero colocar una clave foranea en la tabla2, esta debe de tener el mismo nombre y ser del mismo tipo que el campo que se utiliza como clave primaria en la tabla1.
Eso es una conveniencia práctica y mnemotécnica, pero no una obligación definida en el motor de BBDD.
Es conveniente mnemotécnicamente porque evitas tener que recordar cuál es el nombre del campo que es FK de otra tabla.
Es práctico, si haces JOIN implícitos y no recordaste definir la relación en el WHERE.
Pero no es obligatorio.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/11/2014, 19:06
 
Fecha de Ingreso: enero-2014
Mensajes: 100
Antigüedad: 10 años, 9 meses
Puntos: 0
Información Respuesta: duda con relacion recursiva

ok, entonses voy mas o menos por buen camino, jejejeje. Es que los ejemplos que encontraba en internet como que no me aclaraban la idea jejjeejje.
__________________
"Benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y completamente diferente"
  #4 (permalink)  
Antiguo 05/11/2014, 04:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: duda con relacion recursiva

Cita:
"una persona puede ser amigo de una o varias personas"
Ojo, que lo que estas planteando solo te permite un amigo por persona.

Lo que planteas permite guardar una relación padre/hijo pero no una relación de amigos.

La relación de amigos es una relación N:M y se soluciona con una tabla auxiliar.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 05/11/2014, 22:06
 
Fecha de Ingreso: enero-2014
Mensajes: 100
Antigüedad: 10 años, 9 meses
Puntos: 0
Información Respuesta: duda con relacion recursiva

ok, ya entiendo, en pocas palabras la tabla auxiliar que me mencionas vendria siendo una tabla (perdon por la redundancia) con el nombre de la relación. Creo recordar que esta tabla tenia un nombre. Creo que era tabla falsa o algo asi. Corriganme por favor si estoy en un error.
__________________
"Benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y completamente diferente"
  #6 (permalink)  
Antiguo 06/11/2014, 02:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duda con relacion recursiva

Exactamente así.
No es lo mismo una relación de jerarquía que una de amistad.
En la primera se necesita una relación de la entidad consigo misma en cardinalidad 1:N, esa requiere solo la FK.
La otra es N:N, y toda cardinalidad así obligatoramente genera una tabla adicional.
__________________
¿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 13/11/2014, 20:54
 
Fecha de Ingreso: enero-2014
Mensajes: 100
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: duda con relacion recursiva

Me han despejado la mente, jejejeje, muchisimas gracias por las explicaciones, en verdad las aprecio mucho. Seguire practicando por que en verdad, me hace falta. :)
__________________
"Benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y completamente diferente"

Etiquetas: campo, recursiva, relacion, tabla
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 15:37.