2012-05-09 13 views
0

私はそうのようなユーザ・テーブルでデータベースを持っている:この情報を保存する最良の方法は何ですか?

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

このユーザーは同じような要件のカップルを埋めることができるようになります:

  • 最小給与(int型)
  • は、運転免許証を持っています(ブール値)
  • 私の他の要求(テキスト)戻り値

データベースでこれを保管するための最良の方法だろう何

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

User->get(user_id);のこのようなものでなければなりませんか?

私はあなたが1対1の関係を使用できることを知っています。 (これにはジョインまたは別のクエリが必要です) すべてを1つのテーブルに格納できます。 (コードでいくつか調整する必要があります) これを、要件テーブルのタイプ(int/bool/text)との多対多リレーションに正規化することができます。

EDIT

注:私はすでにuserテーブルの25列を持っているので、私は需要の3〜6までの列を追加する場合、それはどんな違いを生むでしょうか?目には、1つのテーブルで多くの情報が得られます。

答えて

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:(1つのテーブルのみを使用)

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

オプション2:parametersuser requirementsの場合は、two tablesusers、その他の場合はrequirementsとし、他の表にuser_id as foriegn idとすることができます。 use a joinでレコードを取得できます。

これが役に立ちます。

関連する問題