2011-01-09 249 views
3

我想知道什麼最簡單的方法將在未來使我的查詢既有效又不太複雜。SQL表爲朋友,共同朋友,朋友朋友等

我應該保存像

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

或只是創建一個唯一的行雙向關係

from_id = 1,to_id = 2

有什麼想法?

+3

你可以發佈你的表的整個結構,以及一些查詢的例子嗎?你知道,爲了解如何優化你的數據庫,我們需要一些比你給我們的一般描述更多的信息。 – 2011-01-09 19:30:33

回答

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,並將其設置爲truefrom_id=userA, to_id=userB,假設爲from_id=userB, to_id=userA - 這將允許進一​​步便宜sortselect

    單行的效果會有點棘手。
+2

http://explainextended.com/2009/03/07/selecting-friends/包含對此主題的深入討論。結論就像你說的那樣 - 每個關係兩行更容易查詢,只需要一小筆維護費用。 – araqnid 2011-01-09 19:55:35