Как хранить двунаправленные отношения в СУБД, такой как MySQL?

Предположим, я хочу хранить отношения между пользователями моего приложения, как и Facebook, как таковые.

Это означает, что еслиA друг (или какое-то отношение)B, затемB также другA, Чтобы сохранить эти отношения, в настоящее время я планирую сохранить их в таблице для отношений следующим образом

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

Однако здесь я сталкиваюсь с двумя вариантами:

The typical case, where I will store both user1 -> user2 and user2->user1. This will take more space, but (at least in my head) require just one pass over the rows to display the friends of a particular user. The other option would be to store either user1->user2 OR user2->user1 and whenever I want to find all the friends of user1, I will query on both columns of table to find a user's friends. It will take half the space but (again at least in my head) twice the amount of time.

Прежде всего, уместны ли мои рассуждения? Если да, то есть ли какие-то узкие места, которые я забыл (с точки зрения масштабирования / пропускной способности или чего-либо еще)?

В принципе, есть ли какие-то компромиссы между этими двумя, кроме перечисленных здесь. Кроме того, в промышленности один предпочтительнее другого?

Ответы на вопрос(3)

Ваш ответ на вопрос