2012-05-09 51 views
0

我有一個用戶表數據庫就像這樣:什麼是存儲此信息的最佳方式?

table users: 
user_id (int) 
user_name (varchar) 
etc.. 

該用戶將能夠填補幾個類似的要求:

  • 最低工資(INT)
  • 擁有駕照(布爾)
  • 我的其他需求(文本)

返回值在User->get(user_id);必須是這樣的:

user_id: 1, 
user_name: 'John Doe', 
user_requirements: { 
    minimal_salary: 2000, 
    drivers_license: true, 
    demands: 'These are my demands..' 
} 

什麼將是這些信息存儲在數據庫中的最佳方式是什麼?

我知道你可以使用1對1關係。 (它會花費一個加入或單獨查詢) 您可以將它全部存儲在1個表中。 (這將花費一些代碼中的調整) 您可以將它標準化爲與需求表中的類型(int/bool/text)的多對多關係。

編輯

注:我已經在user表中列25,所以它將使任何區別,如果我加3至6訴求列?爲了眼睛,它將在1張桌子上獲得大量信息。

回答

1

由於沒有其他用戶通用的數據,因此可以將它存儲在一個表中。

如果實例需求將從列表中選出,那麼我建議將這些可能的列表條目存儲在一個單獨的表中。

如果你只是不需要每場所有的時間,然後選擇只需要

不做領域

select * from users where user_id = 123 

select minimal_salary, drivers_license from users where user_id = 123 
1

除非你提供讓用戶指定自己的字段的能力,我看不出爲什麼你應該把信息分解成單獨的表格。所有這些信息字段適用於單個不同的用戶。

+0

把它放在一個單獨的表中的原因是,用戶的需求是一個自我的實體。當前端調用user-> get()函數時,我只需要使用這些數據。所有其他時間我需要使用用戶的信息,我不需要有這些需求。 – pascalvgemert

+0

需求是什麼樣的實體?在它上面看起來它被表示爲一個簡單的字符串。 –

+0

如果你劃分的責任,你將有用戶,他的信息,用戶的要求,例如用戶的更新等。 但也許我現在想的困難.. – pascalvgemert

2

僅使用一個表來存儲該數據,作爲我不能查看是否有任何的複雜性:

選項1:(僅使用一個表)

|--------|-----------|----------------|-----------------|------------------------| 
user_id user_name minimal_salary drivers_license   demands 
|--------|-----------|----------------|-----------------|------------------------| 
    1  John Doe   2000    true   These are my demands.. 
|--------|-----------|----------------|-----------------|------------------------| 

選項2:如果parameters更多適用於user requirements那麼您可以使two tables一個用於users和其他用於requirements,您可以在另一個表中有user_id as foriegn id。然後可以use a join來檢索記錄。

希望這會有所幫助。

相關問題