Ver Mensaje Individual
  #11 (permalink)  
Antiguo 12/04/2011, 05:33
Avatar de gnzsoloyo
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, 4 meses
Puntos: 2658
Respuesta: Busqueda en MySQL

En el modelo relacional no existen los campos multivaluados, es decir, columnas donde se almacenan más de un valor correspondientes a algún concepto. En ese sentido no se debe usar un campo para guardar los nombres de diversos amigos de una persona, ya que para eso existen las relaciones de cardinalidad N:N.
Cuando tienes una relación entre dos entidades tal que responda a la frase "X puede tener muchos Y, y cada Y puede tener a su vez muchos X", eso implica que existe una relación N:N (muchos a muchos) y por definición del modelo, esa relación determina la existencia de otra tabla que administre esa relación. Siempre.
En tu caso, lo que existe es una relación de "un usuario tiene muchos amigos y cada amigo a su vez puede tener muchos amigos". Eso implica una relación N:N de la tabla usuarios consigo misma. En esa tabla, la PK de cada usuario se combina, en diferentes registros, con la PK que corresponde al amigo en cuestión, y luego la búsqueda de los amigos de un usuario se hace simplemente con una consulta.
El diagrama básico de Twitter y de diferentes redes sociales es mas o menos (tomado de Database Answers):



En este diagrama puedes ver que los usuarios están en la tabla "My", la relación de amistad está determinada por la tabla "Contacts", El tipo de relación con esa persona está en "Contact_Role", y los mensajes de uno a otro en "My_Messages".

Ese es el esquema, cada red puede tener detalles diferentes, pero la estructura es mas o menos similar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)