2011-01-09 2 views
3

Мне было интересно, какой самый простой способ для меня в будущем сделать запросы эффективными и менее сложными.SQL-таблица для друзей, общих друзей, друзей друзей и т. Д.

Должен ли я сохранить двухстороннюю связь как

from_id = 1, to_id = 2 from_id = 2, to_id = 1

или просто создать один уникальный строки в

from_id = 1, to_id = 2

любые мысли?

+3

Можете ли вы опубликовать всю структуру таблицы и некоторые примеры запросов? Вы знаете, чтобы иметь представление о том, как оптимизировать вашу базу данных, нам нужна дополнительная информация, чем общее описание, которое вы нам дали. –

ответ

7

Я предлагаю пойти на двусторонние отношения. Это гибкость и только дополнительная работа, а insert ing и delete записи.

Преимущества, которые я вижу:

  • Чтобы получить все друг человека все, что вам нужно сделать, это where from_id=userid вместо where from_id=userid or to_id=userid что позже дорого.
  • вы можете сохранить дополнительные метаданные в прямом и обратном отношении. Допустим, у вас есть такой случай, как userA is friend of userB while userB does not approves the relationship. Для этого у вас может быть дополнительно isApproved и установить его true для from_id=userA, to_id=userB и false для from_id=userB, to_id=userA - это позволит более дешево sort и select.

    Эффект в одном ряду будет немного сложнее.
+2

http://explainextended.com/2009/03/07/selecting-friends/ содержит подробное обсуждение этой темы. Вывод, как вы говорите, состоит в том, что две строки для каждого отношения намного проще запрашивать только небольшой штраф за сохранение. – araqnid

+0

спасибо большое, это мне очень помогло :) – Alexander

+0

@ Александр, вы можете отметить этот ответ как правильный, щелкнув по нему знак вверху рядом с ответом и проголосовав, нажав на стрелку вверх, если вам понравился этот ответ. – Nishant

Смежные вопросы