Como armazenar relacionamentos bidirecionais em um RDBMS como o MySQL?

Suponha que eu queira armazenar relacionamentos entre os usuários do meu aplicativo, semelhante ao Facebook, por si só.

Isso significa que seA é um amigo (ou alguma relação) deB, entãoB também é amigo deA. Para armazenar essas relações, estou planejando armazená-las em uma tabela para as relações da seguinte forma

  UID      FriendID
 ------    --------
 user1      user2
 user1      user3
 user2      user1

No entanto, estou enfrentando duas opções aqui:

O caso típico, onde vou armazenar os doisuser1 -> user2 euser2->user1. Isso vai levar mais espaço, mas (pelo menos na minha cabeça) exige apenas uma passagem sobre as linhas para exibir os amigos de um usuário em particular.A outra opção seria armazenaruser1->user2 OUuser2->user1 e sempre que eu quero encontrar todos os amigos deuser1, Vou consultar em ambas as colunas da tabela para encontrar amigos de um usuário. Levará metade do espaço, mas (novamente pelo menos na minha cabeça) o dobro do tempo.

Primeiro de tudo, meu raciocínio é apropriado? Em caso afirmativo, há algum gargalo que estou esquecendo (em termos de escala / taxa de transferência ou qualquer outra coisa)?

Basicamente, há algum trade-off entre os dois, além dos listados aqui. Além disso, na indústria é um preferido em detrimento do outro?

questionAnswers(3)

yourAnswerToTheQuestion