2011-09-07 32 views
0

我正在創建一個社交網站,需要知道將朋友作爲朋友一起加入用戶的最佳方式。我有一個用戶表,每個用戶都有自己的唯一ID,稱爲user_id。使用mysql數據庫作爲社交網站的朋友加入用戶的最佳方式是什麼?

我做了一個名爲兩個字段的朋友的表; user_id和friend_user_id,但我認爲這可能不是最好的方式來做到這一點,因爲它可以允許重複的條目。

例如,如果我有像這樣在這個表中的條目:USER_ID 1和friend_user_id 3 然後我可以插入反向像這樣:USER_ID 3和friend_user_id 1

這將是重複的條目。

有沒有更好的方法,還是我只需要在我的網站的邏輯編程,以防止能夠添加重複?

感謝

回答

1

你的方法聽起來很合理。爲了防止重複,你可以首先對你的元組進行排序(這樣user_id總是小於friend_user_id),然後插入並添加一個唯一的鍵(user_id,friend_user_id)。

0

只需USER_ID,friend_user_id添加一個唯一索引,一個在friend_user_id,USER_ID。其中之一甚至可能是主要關鍵。

+0

這不會防止重複 - (1,2)和(2,1)仍然是有效的條目。 –

0

您的數據模型沒有問題,我認爲這是在關係數據庫中建模時唯一可行的方法。

如果您想防止重複條目,您可以確保在第一列(user_id)中插入兩個id中較低的一個,並在第二列(friend_user_id)中插入較高的id。 Tthis將確保您的獨特密鑰約束按預期工作。

據我所知,MySQL不支持CHECK CONSTRAINTS來強制第一列包含比第二列低的值,因此您必須在應用程序代碼中執行此操作。

執行查詢時找到的所有特定用戶的朋友,你會不過需要檢查兩列:

SELECT * FROM friends WHERE user_id = :current_user OR friend_user_id = :current_user 
0

我做到這一點的方法是讓USER_ID和friend_id領域,user_id說明是人誰最初要求友誼,顯然friend_id是他們要求的人。然後在加載好友時搜索user_id = friend_id或user_id = user_id。

相關問題