0

OrdersSQL Serverとに 2 つのテーブルがありますOrderDetails

  • OrdersOrderIDなどを含みます。
  • OrderDetailsOrderID、、などをItemID含む。Quantity

これらの 2 つのテーブルには、1 対多の関係があります。1 回の注文で複数の商品を注文することができます。

これら 2 つのテーブルからレコードを取得して、ASP ページにレコードを表示すると、次の表形式になるようにする最善の方法は何ですか?

OrderID ItemID Quantity
    1    156     1
    2    156     2
         150     1
         188     1
    3    245     1
         344     1

最も簡単な方法は、メイン ループ内のテーブルから詳細を取得するためのクエリを使用するOrderDetailsことですが、これは非常に多くのリソースを消費します。

これを達成するためのより良い方法はありますか?

データベースは SQL Server にあり、私のページはクラシック ASP にあります。

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

4

2 に答える 2

0

ここには 3 つのオプションがあります。

(a)stored procedureリレーションシップを単一の行に「フラット化」する を作成すると、プレゼンテーション レイヤーは何を非表示または表示するかを選択的に選択できます。事実上、クエリは次のデータをビジネス オブジェクトに返す必要があります。

OrderID ItemID Quantity
    1    156     1
    2    156     2
    2    150     1
    2    188     1
    3    245     1
    3    344     1

UI は、親子関係の表示と重複注文の非表示の複雑さを処理する必要があります。

(b)Entity Frameworkまたはのような ORM を使用nHibernateして、テーブルと関係構造を反映する親/子オブジェクト モデルを設定します。そうすれば、プレゼンテーション レイヤーはオブジェクト モデルを書き出すことができます (各親コレクションと子コレクションを反復処理します)。

(c) 各注文のループ内の個別のクエリを介して、各注文の詳細コレクションを読み込みます。

オプション (c) は、データベース呼び出しの数が注文数に直接相関するため、スケールが非常に大きくなるため、最も好ましくありません。

ORM を使用している場合はオプション (b) が最適な方法ですが、単純な解決策ではない場合は、ストアド プロシージャを使用して一度にデータをすばやく取得する方法として (a) が適しています。

paging大規模なデータセットがある場合は、より多くのデータを取得するにつれてパフォーマンスが低下するため、実装を検討することをお勧めします。

于 2013-05-27T09:30:23.463 に答える