2016-12-29 43 views
0

我在構思數據庫時遇到困難。對於一個問題,我有兩種解決方案,我想知道哪一個最好。SQL在一個字段中創建多個信息或創建表

問題:

讓我們用圖片2個字段的表特產:speciality_id和speciality_name。 因此,例如:

1 - Mage 
2 - Warrior 
3 - Priest 

現在,我有一個字段,如USER_ID,名稱,姓名等表用戶... 在這個表中,有一個叫做專業領域。該專業存儲一個整數,對應於表專業的speciality_id。

這對於只有一個專業的用戶是可以接受的。我想改進模型,以便能夠爲用戶提供多種特色。

這裏是我的兩個解決方案:

創建表「解決方法1」,這與speciality_id鏈接USER_ID和刪除用戶表的專業領域。因此,對於有2個專業的用戶,將在表'solution1'中創建2行。

更改用戶表中字段專業的類型,以便能夠寫下以逗號分隔的專業。 例如2; 3

我得到的第二個解決方案的問題是使我的表用戶和我的表專業之間的外鍵,以鏈接它們。在將來我也可能會遇到更多的PHP困難,同時希望獲得用戶的功能(需要使用我認爲的解析器)。

您發現哪種解決方案最好?

謝謝。

+2

解決方案1是邁向恕我直言,因爲它可以讓你保持一個整潔和規範化的數據庫。解決方案2不好,因爲它需要存儲查詢時難以處理的CSV。 –

回答

1

你的第一個解決方案絕對去。

創建第三個「多對多」表格,允許您將用戶與多個專業相關聯。這是你遇到的唯一方法。

在設計表格時,您總是希望每列都包含一個且只有一個數據元素。想想看看你的第二個解決方案是什麼樣的。當你想看到所有具有特定專業的用戶時,你會做什麼?

您可以嘗試這樣的事:

select * from user where specialty like '%2%' 

那麼,當你有去12的特色,會發生什麼?現在「2」匹配多個實體。你可能會進一步下去,並試圖變得棘手,但是......你應該儘可能使數據設計儘可能正常,以避免所有的混亂,頭痛和錯誤。去解決方案1.

1

我認爲最好的辦法是遵循解決方法1事業溶液2後最終會意志大量的複雜性上