Как хранить двунаправленные отношения в СУБД, такой как MySQL?
Предположим, я хочу хранить отношения между пользователями моего приложения, как и Facebook, как таковые.
Это означает, что еслиA друг (или какое-то отношение)B, затемB также другA, Чтобы сохранить эти отношения, в настоящее время я планирую сохранить их в таблице для отношений следующим образом
UID FriendID
------ --------
user1 user2
user1 user3
user2 user1
Однако здесь я сталкиваюсь с двумя вариантами:
The typical case, where I will store bothuser1 -> 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.
Прежде всего, уместны ли мои рассуждения? Если да, то есть ли какие-то узкие места, которые я забыл (с точки зрения масштабирования / пропускной способности или чего-либо еще)?
В принципе, есть ли какие-то компромиссы между этими двумя, кроме перечисленных здесь. Кроме того, в промышленности один предпочтительнее другого?