2013-06-24 70 views
1

所以目前我有一個「發佈」,用戶可以在facebook或twitter上發佈消息。但是到目前爲止,用戶只能查看自己發佈的消息。「Shoutout」區域的數據庫設計

這是當前表設計

ID | username | message | datetime

不過,我在這裏我想不僅從用戶本身,而是從「朋友」,以及顯示信息具有「一般」的區域。

到目前爲止,我還沒有設計如何存儲「友誼」。我正在考慮爲每個用戶創建單獨的表來存儲他們的朋友,儘管我不知道這是否是一個可行的解決方案。否則,我應該如何去設計一個「友誼」關係?

所以我的問題是,

  1. 我應該如何設計一個「朋友」關係數據庫

  2. 我應該如何檢索是朋友與currentuser所有用戶的郵件?

回答

1

如果你沒有特定需要使用關係型數據庫,我建議你考慮使用它設計並優化了處理這類圖形數據庫,其中的數據可以是定向(單向如喜好和意見或雙向的,如友誼)。

我對這些數據庫沒有經驗,但是您的出發點(就研究而言)可能是Neo4j,它是一個似乎很受歡迎的圖形數據庫。

在關係方面,您需要一個Friends表,PK user_id和FK friend_id都與user_id字段上的用戶表相關。每個關係需要兩個條目(因爲友誼是雙向的)。

0

我的建議是不要在帖子表中使用「用戶名」。字符串比較比整數比較慢。改爲存儲'user_id'。

在你的「朋友」表中存儲的下列列:

user_id | friend_id 

然後從用戶那裏獲取你可以做類似的消息和他的朋友們:

SELECT * FROM posts WHERE user_id IN (SELECT friend_id FROM friends WHERE user_id = your_users_id) OR user_id = your_users_id 

這可能是真的簡單取決於您使用的語言和/或框架。

祝你好運!

+0

_「字符串比較比整數比較慢」_你有測量嗎? –

+0

@wolφihttp://venublog.com/2010/04/20/int-and-string-data-comparison-difference-in-performance-because-of-quotes/ – user1376019

+0

@wolφi這是我發現的第一篇文章谷歌。我不是一個數據庫傢伙,但我記得閱讀一篇基準測試的文章。不幸的是我現在找不到它。 – user1376019