2015-06-27 38 views
1

我目前正在使用PHP和MySQL的Web項目。 我在MySQL面臨一個問題,我需要一個建議。存儲與用戶關聯的類別和子類別

我可以用兩種方法解決我的問題,但我不知道哪一個比另一個更高效和更快。

我需要存儲與特定用戶關聯的多個類別和子類別。用戶可以擁有多少類別和子類別(可以是一個大數目)沒有具體的限制。

  1. 第一方法中,我加入我的用戶(MySQL的)被叫categories柱,其中我保存從PHP序列化陣列與所有這些類別和子類別的表中。 ex:{1:Sports:badminton;2:Sports:baseball;3:Trip:Canada;4:Trip:USA;5:Trip:MEXICO;}

好的一面是我可以放置空間,它更加緊湊。 它的壞處是我不能在我的表類別和子類別之間建立任何關係。

  1. 第二種方法,我創建了一個名爲user_categories的表,其中列(entry_id, user_id, category, sub_category)並添加了每個條目。

例:

╔═════╦═════════╦════════╦═════════════╗ 
║ 1 ║ VM1974 ║ Sport ║ badminton ║ 
║ 2 ║ VM1974 ║ Sport ║ baseball ║ 
║ 3 ║ VM1974 ║ Trip ║ Canada  ║ 
║ 4 ║ VM1974 ║ Trip ║ USA   ║ 
║ 5 ║ VM1974 ║ Trip ║ Mexico  ║ 
║ 6 ║ MC1959 ║ Sport ║ badminton ║ 
║ 7 ║ MC1959 ║ Sport ║ golf  ║ 
║ 8 ║ MC1959 ║ Trip ║ Canada  ║ 
║ 9 ║ MC1959 ║ Trip ║ USA   ║ 
║ 10 ║ MC1959 ║ Trip ║ Mexico  ║ 
╚═════╩═════════╩════════╩═════════════╝ 

好的一面是,我可以做這些表之間的關係完美。 不足之處是,當它開始得到越來越多的用戶時,他們將會在這個user_categories中進入很多...

那麼我該怎麼做? 謝謝

+0

我改變了你的標題以修復語法。我很確定我沒有影響意義,但是如果我這樣做的話,你可以把它推回去。 – Carcigenicate

+0

很好,謝謝 – devvmiller

回答

1

您應該使用第二種方法。如果你使用第一個,那麼有時你會打印錯誤,並且你的數據庫不再一致。 看看database normalization,你總是會知道更好的方法。
如果您的類別對於不同的用戶是相同的,您最好使用類別(entry_id,user_id,category_id)創建具有類別和「user_categories」的「類別」表格。有了這樣的結構,您可以輕鬆計入確定類別的用戶。也看看enum類型和數據庫與內置json類型(如postgresql

+0

非常感謝您的快速解答!它也似乎是第二個選項是最好的。 – devvmiller

+0

還有更好和更有效的方式來表示答案是將答案標記爲正確和/或有用) 不客氣! –

+0

另外我編輯我的答案更好的方法。 –

0

我也喜歡你的第二種方法!

關係對於您的進一步SQL連接和進一步分析非常重要。另一點是,您必須將您的數據始終分配給每個記錄和每個步驟,並且不能使用您的數據庫。

+0

非常感謝! – devvmiller

0

它看起來像你對我有兩個實體這裏,和一個(或者兩個)的關係:

  • user,它可以有0或多個活動
  • activity,其中有且只有一個類別。 (例如。高爾夫,這是一種運動)

所以我有三個表:一個用戶,一個用於活動(其中有一個description列和category列)和一個用於關係user_activities

最後一張表只有user_idactivity_id,其中的一個條目表示「此用戶執行此活動」。您可能需要唯一性約束來確保每個用戶只能「執行」一次每個活動。

根據您的設置,您可能需要一個單獨的表的類別或不。如果我是你,當你覺得自己真的需要的時候,我會試着簡單地開始並重構category,因爲它是自己的桌子。 (如果你在category上查詢很多,並且你的活動表已經變得很大)。