2013-05-07 83 views
0

我正在爲我的網站製作好友系統。我正在考慮只創建2行,爲每個行添加一個索引,並將它們設置爲usersid列的外鍵。如果其中一個用戶被刪除,我希望他們被刪除。那麼每個用戶都會有記錄。mysql朋友系統,索引,外鍵,主鍵

user_id 
friend_id 
  1. 問:你認爲有任何理由都包括一個主鍵?

  2. 問題:將外鍵設置爲級聯時,外鍵的功能是否如上所述?

如果您有任何其他建議或列的建議,我想聽到過(:(我不需要知道什麼時候友誼開始)

三江源

回答

1

絕對是你!需要一個主鍵,在這種情況下,最好在兩列上使用複合主鍵,否則,你的查詢將比他們應該慢很多,你不能強制朋友對的唯一性。

你應該考慮的另一件事r是朋友關係是單向關係還是雙向關係。換句話說,你是否需要能夠在任一方向上查找朋友關係(從任一用戶開始)。如果是這樣,您可能需要爲每個朋友關係在該表中插入兩行。

關於級聯刪除,您需要確保在兩個列上設置這樣的級聯,以便在users表中刪除用戶,它將刪除關聯表中的所有行,其中該用戶是用戶還是朋友。

+0

很好的答案。但即時通訊有一些麻煩,看看如果我添加一個名爲id的列是主鍵,什麼時候會使用,當我永遠不會從該ID查找表。那麼它如何提高性能?我在user_id上有一個索引,這是我在select語句的where子句中「引用」的內容。不是說我有添加id的問題,我只想了解爲什麼。 – jah 2013-05-07 16:15:22

+0

@JensAhlstenHerlevsen我不建議你添加一個自動增量主鍵列。我特別提到了使用這兩列的複合主鍵。你可以強制唯一性,並且你總是用'user_id'來查找,這是索引中的第一列,你不需要在user_id上單獨建立一個索引。你應該幾乎每個桌子上都有一些主要的東西。 – 2013-05-07 17:15:35

+0

ALTER TABLE朋友ADD PRIMARY KEY(user_id,friend_id);這是否也意味着2列的組合將是唯一的? – jah 2013-05-07 17:33:14