2012-07-23 34 views
1

我想允許我的網站上的用戶關注我的網站上的其他用戶和主題,但我是不確定如何將它們結合起來。想想Quora的是如何讓你可以跟蹤用戶,主題,問題,編輯等。我如何構建我的數據庫表以允許用戶關注多個表(人員,主題,問題等)

要跟隨我要保持它非常簡單的用戶:

user_id: int 
followers_id: int 

但是這僅僅是對用戶這麼好我想過怎樣:我

user_id: int 
date: Date 
following: int(could be topic_id or user_id) 
following_type: text(topic or user) 

現在有點不能確定這是否是要做到這一點,因爲我必須解析查詢無論是主題或用戶表類型的最佳方式(但它的好處是因爲所有的數據都在一張表中,我可以通過一次查詢快速獲得所有以下信息)。

這是最好的方法還是有更好的(更高效,可擴展等可能)方法來實現這一目標?我應該將每個追隨者類型分成不同的表嗎?我真的不確定我應該考慮什麼樣的設計。

回答

2

顯而易見的可能性是擴大鏈接表 - 對於可以連接的各種項目的每種組合都有一個表。

然而,通過繼承避免這種擴散將可能是更容易管理:(未顯示各種followables之間的關係。)

enter image description here

這樣,無論有多少類型的可追蹤項目(用戶,主題,問題,編輯等),FOLLOWER表格涵蓋了所有項目。

通常有3 strategies代表關係數據庫中的繼承。有關更多信息,請參閱ERwin Methods Guide中的「子類型關係」。


阿卡類別,子類型,亞類,泛化層次結構等等

0

有幾種不同的方法可以處理這個問題。如果你想留在一個關係數據庫中,你可以創建一個連接表(或多個連接表)來跟蹤你所有的「跟隨」。

如果您有時間查看一些非關係數據庫(如MongoDB或Redis),您將能夠準確跟蹤所需數據。這些服務允許您使用不同的參數構造自定義數據類型。這可能是值得閱讀關於這種風格的數據庫。

相關問題