2012-02-24 85 views
4

數據庫設計的新手,我想知道如何有效地設計像Facebook喜歡的東西,考慮到未來的可擴展性。Facebook的數據庫設計「喜歡」

比方說,你有3個表格:用戶,照片和相冊。 假設用戶可以喜歡照片或相冊。

我應該使用1臺兩種類型的喜歡? 這可能意味着它會有一個user_id,like_type(0-照片,1-專輯等),like_value(無論它是什麼內容的id值,無論是photo_id還是album_id)?

或者有兩個不同的表,每個喜歡(例如photos_likes和albums_likes)? 這將只包含user_id說明和照片/ album_id

我想,以確保數據庫的設計是乾淨的,半scaleproof我們是否在未來增加更多的對象(視頻,評論,註釋等)或有噸的喜歡。

謝謝!

回答

3

兩張不同的表格。這樣,如果你有一個你想添加的對象喜歡以後,你可以創建一個新的表「object_likes」並在那裏存儲喜歡的東西。

如果你想他們都儲存在一個表,你會需要一個類型的表,這將存儲所有類型的對象,並在您喜歡的表,你就必須引用TYPE_ID。這會讓你稍後添加類型。

對我來說,第一種方法要好得多。

+0

此外,如果數據量變大,它將節省空間。例如,擁有一個表會導致行對列的無用數據引用設置爲零的類型。 – BenOfTheNorth 2012-02-24 01:35:36

5

你可以嘗試繼承表方法見implementing table inheritence更多深入的細節。

但實際上它的工作原理就像在代碼繼承,你有一個基本表「像」,然後表內,以「繼承」從它CommentLike',「PhotoLike」等

見附圖進行快速小樣。

Example of table design

+0

注意:父表和子的id是相同的,在這種情況下它被用作'外鍵'。 (閱讀SqlTeam的博客文章) – shenku 2012-02-24 01:44:01