Предположим, я хочу сохранить отношения между пользователями моего приложения, как в Facebook, как таковой.
Это означает, что если Aявляется другом (или некоторым родственником) B, то Bтакже является другом A. . Чтобы сохранить эти отношения, я в настоящее время планирую хранить их в таблице для отношений следующим образом
UID FriendID
------ --------
user1 user2
user1 user3
user2 user1
Однако здесь я сталкиваюсь с двумя вариантами:
user1 -> user2
и пользователь2->пользователь1
. Это займет больше места, но (по крайней мере, в моей голове) потребуется всего один проход по строкам, чтобы отобразить друзей конкретного пользователя.user1->user2
ИЛИ user2->user1
, и всякий раз, когда я хочу найти всех друзей user1
, Я буду запрашивать оба столбца таблицы, чтобы найти друзей пользователя. Это займет вдвое меньше места, но (опять же, по крайней мере, в моей голове) в два раза больше времени.Во-первых, уместны ли мои рассуждения? Если да, то есть ли какие-то узкие места, о которых я забываю (с точки зрения масштабирования/пропускной способности или чего-то еще)?
В принципе, есть ли какие-либо компромиссы между ними, кроме перечисленных здесь. Кроме того, в промышленности один предпочтительнее другого?