2012-11-25 54 views
0

我正在建立一個數據庫,我有這兩個表:用戶配置文件模式 - 如何處理包含多條信息的列?

1)[用戶]與以下列:id,用戶名,密碼,電子郵件(和一些更多)。

2)[user_profile]其中包含有關該用戶的詳細信息,例如:性別,身高,縣,語言等

我的問題是關於第二個表。將信息存儲在可能有多個答案的列中的一種好方法是,如語言或寵物? 如果我有這樣的信息存儲,我的模式仍然是一個好主意嗎?到目前爲止,我唯一的想法是將多個選項一起存儲在一列中,並用「 - 」字符將它們分開。後來,當我從數據庫中獲取信息時,我將從這些列中拆分出可以包含多個選項的信息,即' - '。

這是個好主意嗎?有更好的嗎?

回答

1

只要您希望在從表中獲取一行時執行額外的解析,您建議的解決方案就好了。雖然還有其他一些選項值得思考。兩者都需要創建新表格。我不是專家模式設計師,所以請隨時批評我的選擇。

1)在這裏使用語言作爲示例,創建一個列舉所有語言選項的語言表。然後再創建一個表來指定從配置文件到語言的映射。所以,你的兩個新表是

Language: Language_Id, Language 

User_Profile_Language_Mapping: Profile_Id, Language_Id 

這樣,只要你想通過只增加了User_Profile_Language_Mapping表中的條目配置文件可以關聯到儘可能多的語言。 2)使用Pets作爲這次的例子,是創建另一個表,將用戶配置文件映射到寵物。

User_Profile_Pets: Profile_Id, Pet 

我不知道你想存儲有關的寵物什麼的信息,但它可能只是寵物的名字,寵物的類型,也可能是外鍵到寵物表,您可以指定大量的有關信息那個寵物。

我喜歡數據選項1,你可以列舉所有的可能性(如語言),我喜歡選擇2時,有可能是

+0

我也許應該提到過的可能性無限數量(如寵物的名字)它在我的問題,但我基本上尋找做這種操作最有效的方式。我的建議需要在從數據庫獲取結果並且建議不需要解析後進行解析,但需要2個連接(user_profiles,user_profile_language_mapping和language)。雖然我喜歡你的想法,但我不確定哪一個更有效。或者,也許還有另一種更高效的選項,這兩種選擇都是... – Archer2486

+0

我不能說三個選項中的哪一個最爲有效。我知道無論你使用哪個數據庫應該提供一些工具,通過一些緩存或存儲過程,查詢運行得更快。查詢優化不是我的強大套件。我可以說的最好的事情就是嘗試幾種方法並運行一些測試,以瞭解實現的效率以及基於此的最快速度。 –

+0

感謝您的輸入。我會嘗試一下你的建議,看看他們是如何工作的。 – Archer2486

相關問題