3

これは主にデータベース関連の質問ですが、私は VB.net と sqlite を使用しています。

だから私はウィジェットのグループを持っています.それらはすべて特定のプロパティのグループを持っています. その中には「Type」プロパティがあります。

Type プロパティに応じて、一連の追加のタイプ依存プロパティがあります。通常、これらを多くのnull値を持つ単一のテーブル(そしておそらく単一のクラス)にグループ化するのが良い考えなのか、それともデータベース内の複数のテーブル(派生クラスを含む)に編成する必要があるのか​​ 、または何かそうしないと?

例:

  • ウィジェット 1: S、ブルー、タイプ A、20 ポンド、シャイニー
  • ウィジェット 2: 小、赤、タイプ B、透明
  • ウィジェット 3: ビッグ、イエロー、タイプ C、6 フィート、5 フィート、1 フィート

多くのヌルを使用して、次のようなテーブルに整理する必要があります。

  • ウィジェット
    • ID、サイズ、色、種類、重さ、isShiny、透明度、幅、長さ、高さ

またはこのように:

  • ウィジェット
    • ID、サイズ、色、タイプ
  • Widgits_A
    • ID、ウェイト、isShiny
  • ウィジェット_B
    • ID、透明度
  • Widgits_C
    • ID、幅、長さ、高さ

最終的にはおそらく数千、おそらく 20 種類のウィジェットになります。

ありがとう!

4

3 に答える 3

1

OOP の世界では、「Type」プロパティに関して実装したものは通常、継承によって実装されます。

継承は、親テーブル (タイプに関係なく、ウィジェットごとに 1 つのレコードを持ち、ベース ウィジェット クラスのフィールドのみを格納する) と各ウィジェット サブタイプの子テーブルを持つデータベースでモデル化できます。

これにより、(関係のないウィジェット テーブルの UNION を実行するよりも) すべてのウィジェットの操作が簡単になります。

しかし、それは物事をより困難にする可能性もあります。たとえば、1 つのウィジェットのすべてのフィールドを取得するには、親テーブルのレコードを適切な子テーブルのレコードと結合する必要があります。

このテーマに関する別の投稿は次のとおりです。SQL Server のテーブル "継承"

于 2012-10-11T13:49:07.887 に答える
0

ドメイン モデルで継承が使用されている場合は、テーブルの継承を使用する必要があります。

最も簡単で最速の方法は単一テーブルの継承であり、Martin Fowler が推奨しています。はい、null フィールドになります。それらがテーブルの「最後」にある場合、最新のデータベースはそれらを圧縮するのに優れています。

より正しい方法は、クラス テーブルの継承です。これは、null の「問題」を解決しますが、はるかに複雑で遅くなります。

いずれにせよ、正しく柔軟な解決策を得るには、テーブルの継承が本当に必要です。たとえば、オーダー ライン アイテムがサービスまたは製品の場合、テーブルの継承が非常に役立ちます。

于 2012-10-11T19:12:35.267 に答える
0

あなたがやろうとしているのはオブジェクト リレーショナル マッピングですが、オブジェクト リレーショナル インピーダンスの不一致に遭遇しています。(「オブジェクト リレーショナル マッピングはコンピューター サイエンスのベトナム」
もお読みください。)

簡単な解決策はありません。

できることは、プログラムが実行するすべての操作をウィジェット テーブルにリストし、それらが両方の組織でどのように機能するかを分析してから、全体的に使いやすく維持しやすいと推定される方を選択することです。

于 2012-10-11T13:27:19.037 に答える