2012-02-04 14 views
2

DBを使用してボックスに関する情報を保存するアプリケーションを設計しようとしています。データベース設計:「その他」のオプションを実装する方法は?

これらのボックスは、「Garage」、「Living Room」などの特定の事前定義されたサイトにあります。ドロップダウンボックスで簡単に選択できる場所です。しかし、時には「Joe's」のような別の場所にいることもあります。

私の質問は、これをDBに保存する方法です。 私の最初のアイデアは、箱の場所

LOCATION 
| ID_LOCATION | LOCATION  | 
|  1  | Garage  | 
|  2  | Living Room | 

BOXES 
| ID_BOX | ID_LOCATION | 
| 1  |  1  | 
| 2  |  3  | 

、別のテーブルとテーブルとの単純な関係を作ることだったしかし、どのように私はここで追加オプションを置くことができますか?それらを「一時的に」場所テーブルに追加しますか?または、「その他」のフィールドを作成し、この情報を別の場所に保存しますか?

答えて

1

オブジェクトが移動または削除された後に永続性を必要としない場合は、削除するときにSQL関数を追加して特定の場所にオブジェクトが存在するかどうかを確認できます非である:場所を削除します。

危険な場合や考えにくい場合(ほとんどの場合、悪い考えです)、BOXESに列を追加して、場所が通常の場所にあるのか一時的な場所にあるのかを指定し、テーブルを作成します4番目のテーブルに関係を作ります。この方法では、REGULAR_LOCATIONSのレジスタをドロップメニューに追加し、TEMP_LOCATIONSに書き込むための「その他」オプションを追加するだけです

さらに、場所テーブルに列を追加して、 、そうでない場合は、ドロップダウンメニューに表示されません。そして、あなたは現在の体系を維持します。

+0

Locationsテーブルの通常の位置と固定された位置のアプローチに興味があります。 boxedのバッチが同じ一時的な場所に行くなら、それは助けになるでしょう。 – upsfeup

1

単純にしておくと、OTHER_LOCATIONという名前のBOXESテーブルなどにvarcharを追加します。次に、ID_LOCATIONをNULLにするか、他の行に特定のLocation行を入力して、アプリケーションコードでID_LOCATIONをその値に設定し、使用時にOTHER_LOCATION列に入力する必要があります。ソリューションについての気持ちは、あなたがヌルを使いたいかどうか、そしてどのようにあなたの結合を書くかについての気持ちにかかっています。おそらくID_LOCATION '1'として、おそらく "他の"行を持つことをお勧めします。次に、2つのテーブル間の内部結合について心配する必要はありません。

2

私は単にBOXES内の位置コードがLOCATION内の場所を参照し、あなたの現在のスキームを持っていますが、これらの場所のは、「その他」です。

BOXES に設定されている場合にのみアプリケーションで使用されるOTHER-LOCATIONという別の列があります。

BOXES 
| ID_BOX | ID_LOCATION | OTHER_LOCATION   | 
| 1  |  1  | NULL     | 
| 2  |  2  | NULL     | 
| 3  |  0  | On the 4:10 from Yuma | 

LOCATION 
| ID_LOCATION | LOCATION  | 
|  0  | Other  | 
|  1  | Garage  | 
|  2  | Living Room | 

これは3NFに違反すると主張できますが、私はそうは思わないでしょう。 OTHER_LOCATIONの値は、キー、キー全体、およびキー以外には依然として依存しています(Coddを助けてください)。

この意味で、これは、あなたが「その他」である共通選択肢のリストと、そのオプションを選択した場合にのみ記入するボックスを記入しなければならない記入不要フォームとまったく同じです。

0

場所は、パブリックまたはプライベートである場合、私は(あなたにも、ユーザーIDや公共用NULLを挿入することができます)情報と場所田部に余分なフィールドを追加します。次に、新しい値をの位置テーブルに挿入することができます。

もう1つの方法は、foreginキーを削除し、論理関係をvarcharフィールド値で保持することです。ユーザーインターフェイスではの位置テーブルの値を表示し、ユーザーが直接ボックステーブルに保存した値を保存します。

関連する問題