2011-08-16 28 views
2

我正在研究一個應用程序,其中每個用戶都必須爲自己填充廣泛的配置文件。將大量用戶信息存儲到一個MySQL表中?

用戶簡檔的第一部分包括大約25左右的一般信息字段

用戶簡檔的下一部分是他們評價自己的準則的一組列表上的部分。即「評價你在烹飪方面有多好」,然後他們從一個到五個的收音機框中打勾,還有一個複選框,可以檢查他們是否對他們自己評估的活動/主題「額外感興趣」。

大約有40個這些他們自己。

所以我的問題是,我應該如何存儲這些信息,每個字段和項目的用戶表中是否應該有列?這將近70個字段

或者我應該爲user_profile和user_self_evaluation設置一個表,併爲其中的每個列設置並與用戶具有一對一的關係?

回答

2

使用單獨的表格。通過這種方式,只更新自我評估時,不需要更新user_profile表。這裏的想法是將另一個表中經常更新的字段分開,而在另一個位置保留很少更新的字段。如果表格變大,並且用戶名/密碼位於單獨的表格中,則用戶名/用戶名查找的性能不會受到大量更新查詢的影響,如果您更改了self_evaluation表。

但是,如果你正計劃增加新的評價,我建議一個不同的設計: 與25個人場 self_evaluations表user_profile表,通過ID和名稱,以及有關問題的任何元信息;每個評估記錄1條記錄 user_profile_evaluation用戶標識,評估標識,分數,額外 - 每條用戶評估記錄一條記錄。

這樣你的模式將會更靈活,你不需要改變表格來添加另一個評估。

+0

+1三表解決方案 - 與user_profile_evaluation的多對多關係作爲user_profile和self_evaluations之間的鏈接表。 –

0

我認爲後者更好,一個有70列的表格確實很糟糕,如果試圖管理它,情況會變得更糟。

當每個問題都是多項選擇時,您也可以在每個答案的一個字段中添加數字。

比方說,你已經有了四個問題有4種選擇:

你可以將它們保存爲1433的一列稱爲應答者,(第一個問題的答案1,第二個答案4,第三個答案3,和最後但不是最少的問題4是答案3)

只是在這裏給你一些選擇。

但是,如果我不得不在一對一關係和一個表格中進行選擇,我會選擇一種關係,因爲稍後管理起來更容易。

+1

單個表中的70列並不是特別大 - 這裏的問題是每個用戶與他們的評估答案之間存在一對多的關係。此外,您的單個欄目稱爲所有答案值的answerrs違反了第一範式。 –

+1

從5年前回讀我的回答,我幾乎是一個新秀哈哈 –

0

或者我應該設置爲user_profile一個表,user_self_evaluation, 並在那裏每一列,並與用戶一比一的關係 ?

是的,這是你應該怎麼做,如果你知道你將來不會擴大這張桌子。另一種選擇太糟糕了。


如果你認爲你將擴大評估在未來,那麼你可以做這樣的:

user_self_evaluation

user_id | evaluation_type | evaluation_value 
1  | cooking   | 5 
1  | singing   | 3 
2  | cooking   | 2 
2  | singing   | 5 

使合併列(USER_ID,evaluation_type,evaluation_value )獨特或主要。