Что является лучшим способом сохранить пользовательские отношения, например, дружбу, которая должна быть двунаправлена (Вы - мой друг, таким образом я - Ваш друг) в рэле. база данных, например, MySQL?
Я могу думать о двух путях:
Конечно, лучше существует что-то?
У меня была бы таблица ссылок для друзей или чего-то еще, с двумя столбцами, оба являются PK, и оба являются FK для таблицы User.
Оба столбца будут UID, и у вас будет две строки на дружеские отношения (A, B и B, A). Пока оба столбца являются PK, он должен быть в нормальном формате (хотя другие могут меня поправить)
Это немного более сложный запрос, но ничего, что нельзя было бы абстрагировать с помощью сохраненного процедура или некоторая бизнес-логика, и ее в нормальном формате, который обычно неплохо иметь.
Используйте хранилище значений ключей, например, Cassandra.
Использование двойных строк, хотя и создает дополнительные данные, значительно упростит ваши запросы и позволит вам эффективно индексировать. Я также помню, что видел информацию о пользовательском решении MySQL для Twitter, в котором они использовали дополнительное поле (в основном friend #) для автоматического ограничения и разбиения по страницам. Вроде довольно гладко: https://blog.twitter.com/2010/introduction-flockdb