2011-12-19 5 views
0

私はストア旅行のためのデータベースを作成しようとしています。旅行はLocationModeおよびPreferencesです。 (それらのすべてがエンティティまたはクラスです)。 TripのそれぞれがPreferencesPreferencesの1つだけを持つことができると仮定してみましょう。"Trip preferences"、データベースデザイン

今、私はこの方法でそれをモデル化しています

'環境設定' はFK(およびPREF1、PREF2とpref3がブール型である)である
Trips(id, attr1, attr2, ..., prefs); 
Preferences(id, pref1, pref2, pref3); 

私がtrueにPREF1、PREF2とpref3で(ID = 1)旅行を保存したら、[OK]を、と同じ好みの値を持つ(ID = 2で)別の旅行、私はこのような何かを持っています

+------+----+-------+-----+---------------+ 
| Trip | id | attr1 | ... | prefs   | 
+------+----+-------+-----+---------------+ 
|  | 1 | X | ... | 10   | 
+------+----+-------+-----+---------------+ 
|  | 2 | X | ... | 20   | 
+------+----+-------+-----+---------------+ 


+-------------+------+-------+-------+---------+ 
| Preferences | id | pref1 | pref2 | pref3 | 
+-------------+------+---------------+---------+ 
|    | 10 | True | True | True | 
+-------------+------+---------------+---------+ 
|    | 20 | True | True | True | 
+-------------+------+---------------+---------+ 

質問は次のとおりです。冗長性はあまりありませんか?同じ設定値で100回の旅行を保存すると、同じ値を持つPreferencesテーブルに100行あります。

おそらく私のアプリケーションに関係する問題であり、私のデータベース設計ではありませんか?

ありがとうございました。

(私の基本的な英語には申し訳ありません)

答えて

0

デザインが適切に正規化されていないように見えないため、非効率的であるか、データ保守の頭痛を引き起こす可能性があります。

ご質問から少し難解ですが、pref1pref2pref3は、それぞれの旅行に適用される場合と適用されない場合があります。もしあなたが有限個のものがあれば、それぞれの旅行のためにそこにあるかしないのでしょうか?自分のテーブルの行として物事(嗜好)を扱う方が良いでしょう。このような

何か:それは冗長性を排除し、あなたが旅行に適用できる設定の数を拡大することを決定しなければならないことは、将来のために、より柔軟性があるとして

Trips 
(id 
, attr1 
, attr2 
) 

Preferences 
(id 
, description 
) 

Trip_Preferences 
(trip_id 
, preference_id 
, value -- If the value is true/false, then you have the option of leaving this out 
     -- and just using the presence or absense of a record in this table as the 
     -- indication of the value. 
) 

このような設計は、より良いオプションです。

+0

ありがとうございます!あなたのデザインは大丈夫だと思います。 –

関連する問題