2011-02-10 7 views
2

私はこの問題を抱えており、私はそれに最適な解決策が何か分かりません。静的データをdb - C#に保​​存するのは良いですか?

は、私はテーブルと呼ばれる従業員を持ち、LastWorkという列があり、この列には、私は、例えば、選択したカスタム値のみが必要です。

value 1 
value 2 

を、私は私が持っているので、ユーザーがComboBoxコントロールから値を選択しますそれのための2つのアイデアが、私はそれのために最善であるか分からない。

A - これらの値をItemsプロパティの文字列としてComboboxに追加し、文字列としてDBに格納します。

B - 'LastWork'、 'LastWorkName'という2つの列を持つ 'LastWork'と呼ばれる別のテーブルを作成し、その値を挿入してバインディングソースコントロールを追加してデータバインドされたアイテムを使用できます私のメインテーブルにIDを整数として格納し、ユーザのLastWorkNameを表示する。

いくつかのフォームでは、編集権限を持つDataGridViewコントロールがあるため、これらのカスタム値から選択するためにTextboxの代わりにComboboxを表示したいので、Bメソッドを使用することをお勧めします。

私の質問を理解していただければ幸いです。

+0

どのように静的ですか?それらは本質的に定数であるか?すなわち、 「平日の英語名」?あるいは、時々*を変えるのだろうか? –

+0

@Lasse、 "平日の英語名"を例にとって、国際化対応してください。突然彼らはもはや定数ではありません。 –

+0

@Michael英語の曜日の名前はまだ変わりません。私はあなたのポイントを参照してください。 –

答えて

5

通常、データの正規化は良いことですので、私はあまりにもあなたがデータの整合性を適用することができ、別のテーブルとそれへの外部キー関係を持つことによって、あなたのオプションB.

となるだろう。利用可能なすべてのオプション(単に選択されているだけでなく)のリストを簡単に取得できます。オプションのテキストを変更する単一の場所を持つ(例えば、誰かが "値1"の代わりに "値1"と呼ぶことを決めるとどうなるでしょうか?等々。

これらは、小さなアプリケーションでは2つのオプションしかない巨大な利点ではないかもしれませんが、アプリケーションが非常に頻繁に時間の経過とともにスコープが拡大する傾向があることはすべて知っています。

+0

+1は中央の場所から描画されているため、データ名を標準化するのがどれほど簡単かを示しています。 –

+0

私の助けを借りてくれてありがとう、私の主なアイデアは、メインテーブルにLastWorkIDの値を格納し、他のテーブルからLastWorkNameを取得し、それを表示するために私は外国キーの関係を使用する必要はありません。 – Saleh

+0

+1ルックアップテーブルを使用してデータの整合性を確保する。この種のシナリオに対する素晴らしい追加は、同様の 'enum'を作成することによって、中間層での通常のコード自動化です。そのため、開発者はDBテーブルを変更するたびにこれらの値を繰り返したり同期したりしません:http://erraticdev.blogspot.com/2011/01/generate-enum-of-database-lookup-table.html –

1

正規化されたデータベースでは、重複したデータを排除するため、通常は「オプションB」が使用されます。名前(IDだけでなく)が必要なときにクエリに追加の結合が追加される可能性がありますが、基になるIDを変更せずに検索名の名前を簡単に変更できます。

パフォーマンス上の理由から、ビジネス層で記述したようなルックアップ値をキャッシュして、ルックアップテーブルが繰り返しヒットしないようにすることがよくあります(グリッドの行をたくさん作成する場合など)。

+0

テーブルが小さければ(小さな2列×2行)、RAMにキャッシュされたままになる可能性があるので、テーブルスキャンで終了してもパフォーマンスの低下は最小限に抑えられます。 –

+1

@MichaelKjörling - データベースが別のマシン(または別のネットワーク)にあった場合を除き、真。その後、SQLキャッシングに関係なく、パフォーマンスが低下する可能性があります。私が書いたほとんどのアプリケーションには50以上の名前/値テーブルがあるので、サイズやデータベースの場所に関係なくパフォーマンスが決して問題にならないことを保証するために何らかのラッパーを書く傾向があります。 –

+0

待ち時間についての良い点。しかし、これは、ビジネス層がアプリケーション層と同じホストにあることを前提としています。それ以外の場合は、開始した場所にかなり戻っています。 –

1

私はいつもそれらをdbに保存します。アプリをローカライズする必要がある場合は、これが大変役に立ちます。さらに、データベースの参照整合性チェックを適用することができます。

関連する問題