0

クラスがあり、それを と呼びましょうTableOwner。そのフィールドの 1 つは、DataTable名前の列 (主キーでもあります) と金額の列があります。したがって、1 つの主キー列と 2 つ目の非主キー列があります。

私のプログラムでは、TableOwnerインスタンスのコレクションを作成します。コレクションは基本的にセットです。論理的には の順序はなくTableOwner、それぞれの種類がいくつ存在するかだけが重要です。それぞれDataTableに異なる金額の値が入力されていますが、それらはすべて同じ主キーを持っています。

たとえば、TableOwner銀行口座に関するデータを格納するために Imagine が使用されます。各インスタンスは 1 つの口座を表し、口座にDataTableある各通貨の量を記録する場合があります。口座ごとに、その口座のドル、ユーロ、またはポンドの数が異なる場合がありますが、金額が 0 (口座にお金がない) またはnull(データが欠落している可能性がある) の場合でも、すべての口座に同じ 3 つの通貨に関するデータがあります。 )。したがって、基本的には 2 次元のテーブルまたはマトリックスが必要ですが、クラス階層がそのように実装することを妨げています。

これらすべてに対処するための賢明な方法は何ですか? 次のアプローチが考えられます。

1)DataColumn最初に を作成し、それを のすべての新しいインスタンスに渡してTableOwner、独自DataTableの に使用します。欠点: 後で主キーから行を削除することを決定した場合 (たとえば、ユーザーが「ご存知のように、ユーロはもう気にしません。すべてのデータをダンプし、列を削除します。」)、私はコレクション全体を反復処理し、各TableOwnerのテーブルから行を 1 つずつ削除する必要があります。

DataTable2)すべてのインスタンスで使用されるシングルTableOwnerを作成します (おそらく静的フィールドにします)。テーブルには、1 つの金額列ではなく、Amount1、Amount2 などの多くの列があります。すべてTableOwnerのインスタンスは、初期化時に独自の金額列を作成し、後でその名前を記憶します。行の削除は基本的な DB 操作です。欠点:エレガントではなく、「間違っている」ようです。

ご覧のとおり、どちらにも欠点があります。より良い方法はありますか?

私はデータベースについてあまり知らないので、質問が非常に基本的であるか、奇妙な言葉遣いである場合はお詫び申し上げます。

4

1 に答える 1

1

所有者、通貨、金額の列を含むテーブルが必要です

だから代わりに

 Owner1 20$ £30 €40

あなたは3つの記録を持っています

 Owner | Currency | Amount
 Owner1  $          20
 Owner1  £          30
 Owner1  €          40

(通貨記号は、別の通貨テーブルの通貨 ID を表します)

個人が特定の通貨で金額を持っていない場合、個人と通貨の組み合わせの記録はありません。

これは正規化のプロセスの一部です

于 2012-11-05T11:08:01.030 に答える