2012-08-06 68 views
2

我想進入一些更高級的Web開發技術,並有幾個項目需要對象關係。我正在使用PHP進行開發,並正在計劃使網站完全面向對象。像Facebook這樣的網站如何處理對象關係?

像Facebook等網站有用戶,朋友,團體,事件,喜歡,帖子,評論等之間的關係。用戶可以屬於一個組或多個組,並且一個組可以擁有多個用戶。對於事件,喜歡,帖子,評論等,這種相同的關係也是如此。所以我的問題是這些關係如何處理和保存?

顯然有一個非常複雜的數據庫,它包含實際的內容,但是當定義關係如「哪個用戶屬於哪個組?」時,這是如何處理的?所有的團體都有獨特的身份證明,例如散列號或身份證號碼嗎?然後,用戶擁有一個「mygroups」數組或等等,可以繼續添加/刪除使用戶成爲組的一部分的組ID。

我可能會偏離軌道,但我的問題上的任何光線都會很好。謝謝!

回答

1

讓我們舉個例子。用戶和組。

這是一個很多很多關係的船。這意味着一個用戶可以在0或多個基團和一個基可以具有一個或多個用戶

所以會有3個表

USER表

USER_ID (INT) Primary Key 
USER_NAME V(VARCHAR) 

GROUP表

GROUP_ID (INT) Primary Key 
GROUP_NAME (INT) 

USER_GROUP

USER_GROUP_ID (INT) Primary Key 
GROUP_ID (INT) Foriegn Key (to GROUP Table, GROUP_ID Column) 
USER_ID (INT) Foriegn Key (to USERTable, USER_ID Column) 

某些樣本數據就會像

USER

USER_ID    USER_NAME 
-------------------------------- 
1     Scott 
2     Jon 
3     Mike 

GROUP

GROUP_ID    GROUP_NAME 
-------------------------------- 
161     Bloggers 
162     Geeks 

USER_GROUP

USER_GROUP_ID USER_ID    GROUP_ID 
---------------------------------------------- 
    1    1     161 
    2    2     161 
    3    2     162 
    4    3     161 

這意味着

1)斯科特,喬恩&麥克存在於博主組。

2)斯科特是本INT誒極客組。

+0

所以基本上所有的關係都在數據庫中處理。這些數據只是解析服務器端,並通過客戶端使用javascript或在Facebook的情況下顯示,可能是一些自定義框架 – 2012-08-06 21:39:01

+0

@MattHintzke:Facebook使用大量來自客戶端的異步調用來加載頁面的部分(他們調用的頁面?) ,一旦你從表格獲得數據,你就可以決定如何在UI中展示它 – Shyju 2012-08-06 21:57:24

1

對這個問題更熟悉的人可能會對此有更多的瞭解,但是,您是正確的:每個組,用戶等都有一個唯一的ID。用戶和組之間的關係以及朋友關係都存在於關係數據庫的表中。

我想說,數據庫可能不像您想象的那麼複雜。如果用戶擁有一個用戶ID,然後友誼,可以在友誼表來表示,如:

Friendship table 
---------------- 
    UserID | FriendID 
    User_A | Friend_1 
    User_A | Friend_2 
    etc... 

組成員:

Groupmembership table 
    GroupID | UserID 
    GroupA | User1 
    GroupA | User2 
    etc... 

我不是說你應該像這樣做,但這是一個可能的解決方案:使用常規的關係數據庫。

對於Facebook來說,真正的複雜性可能在於優化海量數據庫的性能。

+0

這是有道理的。我知道如何構建一個關係數據庫,我只是確定實際插入數據的方法,以保持所有關係。 – 2012-08-06 21:31:53

相關問題