¿Cómo almacenar relaciones bidireccionales en un RDBMS como MySQL?
Supongamos que quiero almacenar relaciones entre los usuarios de mi aplicación, similar a Facebook, per se.
Eso significa que siA es un amigo (o alguna relación) deB, entoncesB es también un amigo deA. Para almacenar estas relaciones, actualmente estoy planeando almacenarlas en una tabla para las relaciones de la siguiente manera:
UID FriendID
------ --------
user1 user2
user1 user3
user2 user1
Sin embargo me enfrento a dos opciones aquí:
El caso típico, donde almacenaré ambos.user1 -> user2
yuser2->user1
. Esto tomará más espacio, pero (al menos en mi cabeza) requiere solo una pasada sobre las filas para mostrar a los amigos de un usuario en particular.La otra opción sería almacenar ya seauser1->user2
Ouser2->user1
y cuando quiera encontrar a todos los amigos deuser1
, Consultaré en ambas columnas de la tabla para encontrar amigos de un usuario. Tomará la mitad del espacio pero (de nuevo al menos en mi cabeza) el doble de tiempo.En primer lugar, ¿es mi razonamiento apropiado? En caso afirmativo, ¿existen cuellos de botella que estoy olvidando (en términos de escalado / rendimiento o algo así)?
Básicamente, ¿hay alguna compensación entre los dos, aparte de los que se enumeran aquí? Además, en la industria es una preferida sobre la otra?