¿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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta