2012-04-05 59 views
0

我使用MySQL作爲我的主數據庫,用於一個簡單的「社交網絡」,我花了幾周的時間。MySQL - 明智嗎?

與所有社交網絡一樣,用戶需要與他們的朋友建立聯繫才能使其社交。

我的理論是要將另一列添加到我的user數據庫並將其命名爲連接。在那裏,我會存儲用逗號分隔的一串用戶ID,然後在需要時將其拆分。

我的另一個理論是創建一個全新的表connections並使用兩列「user_1」和「user_2」。然後,數據庫在搜索朋友時會執行一個選擇查找他們的ID等等。

問題是:什麼是最有效的?如果我要支持大量的用戶,使用選項2會帶來風險嗎?

一些建議將不勝感激,

謝謝!

+3

使用選項1會帶來風險,更不用說更多的代碼,並且每當需要獲取「連接」時解析字符串的速度都會更慢。選項2是要走的路。這就是關係數據庫的工作原理。 – Brian 2012-04-05 19:12:08

+3

也許你應該閱讀[數據庫規範化](http://en.wikipedia.org/wiki/Database_normalisation)。 – 2012-04-05 19:12:29

+2

[在mysql的列中保存多個項目](http:// stackoverflow。com/questions/9947436 /控股多個項目在列上的MySQL) – 2012-04-05 19:13:24

回答

8

規範化結構(選項#2)非常適用於構建您描述的數據類型。使用兩個整數列查詢一個窄表比查詢不斷增長的ID列表要快得多。

我建議閱讀不同的標準化形式:http://en.wikipedia.org/wiki/Database_normalization(見「範式」)

+0

+1提及規範化 - OP應該學會這 – 2012-04-05 19:15:38

+1

也值得看看錶[索引](http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html)以及它們如何使連接表閃電般快速。 – DampeS8N 2012-04-05 19:20:32

+0

好吧,它看起來似乎更明顯的選擇,但我對數據庫的知識是相當小的。現在檢出維基百科頁面,謝謝。 – 2012-04-05 19:23:27

2

選項1不會結束。去一個單獨的表。

+0

-----謝謝:) – 2012-04-05 19:24:48

1

毫無疑問,名爲connections的單獨表格將更容易。在一列中有多個值會破壞數據庫的目的,你能想象用選項1搜索user1的所有朋友嗎?

3

第二種方法要好得多。您正在通過使用表'連接'在用戶之間創建關係。這樣你可以創建'n:m'關係。如果你想添加某種連接類型('愛好興趣','朋友'),你可以很容易地將它添加到表中,但不能用字符串。

還有一個好處:你不必考慮用戶擁有的連接數量。你會用什麼連接? A varchar? A text?你真的想每次都解析這個爛攤子嗎?你如何確保你不添加連接兩次?

tldr;:使用表格顯示關係。

0

MySQL當然可以通過選項2提供良好的性能。更容易選擇朋友並進行計算。有很多你可以做的緩存,多臺服務器,負載平衡等等。

從實際的角度來說:當你接觸到大量的用戶時,你將會改寫系統來整合你所學過的所有課程。