2012-02-07 46 views
3
+-----------------------------------+ 
| fID | personA | personB | fStatus | 
|-----------------------------------| 
| 1 | u1ID | u2ID | 1 | 
| 2 | u3ID | u4ID | 0 | 
| 3 | u1ID | u3ID | 1 | 
+-----------------------------------+ 

Status Column Codes: 
0: Pending (personA wants to be friends with personB) 
1: Friends (personA with personB) 

* On removal request by either side > delete the corresponding row 

我想要一個簡單的MySQL表格,我可以通過它在我的網站上實現友誼選項。作爲朋友或不是它需要擁有的一切。朋友桌子的最佳方法

現在我想知道爲此目的的最佳方法,如果有什麼,我失蹤。我想查詢每個用戶的朋友,並且用戶應該能夠從他們的朋友列表中添加或刪除對方。

+0

我沒有看到您的解決方案有任何問題,它看起來不錯。 – Niklas 2012-02-07 12:07:59

+0

@Niklas:謝謝 – BehnUm 2012-02-12 19:38:09

回答

2

由於每個人都可能與另一個人成爲朋友,因此您需要實現NxM(多對多)關係。在一個關係數據庫管理系統中,在另一個表中翻譯,就像你做的那樣,製作「連接」。

http://weblogs.asp.net/zeeshanhirani/archive/2008/08/21/many-to-many-mappings-in-entity-framework.aspx

在你例子,也許你可能要添加一列知道是誰問的友誼,還有誰。

編輯:我可能會刪除fId列並創建列(外鍵)personA和personB的組合主鍵。通過這種方式,數據庫將避免爲同一個人提供多個請求,並且避免個人A向個人B和個人B請求友誼而不是僅僅接受它的情況,向個人A請求友誼,產生兩個記錄!

EDIT2:您可以使用狀態字段存儲的好友請求「所有者」:

0: pending, A asked to B 
1: pending, B asked to A 
2: friends 

EDIT3:不,你需要到期時間(列REQUEST_DATE)?如果友誼請求在3個月內未得到回答,則該請求過期並被刪除。