1

このシナリオのアーキテクチャは次のとおりです。

アイテムのテーブルといくつかのフォームのテーブルがあります。フォームがアイテムを所有するのではなく、アイテムがフォームを所有します。これは、1 つのアイテムが複数のフォームに存在する可能性があるためです (各タイプに 1 つだけですが、必ずしもすべてのフォームに存在するとは限りません)。フォームとアイテムはすべて、共通の によって結び付けられていOrderIdます。これは次のように表すことができます。

OrderItems | Form A   | Form B etc....
---------- |--------- |
ItemId     |FormAId   |
OrderId    |OrderId   |
FormAId    |SomeField |
FormBId    |OtherVar  |
FormCId    |etc...

これは、これらのフォームでうまく機能します。ただし、別のフォーム (FormX など) はOrderId、複数の注文からのアイテムで構成されているため、持つことができません。OrderItemsの列も含まれていますがFormXId、単一の に関連する「FormX」のリストを取得する最良の方法について混乱していOrderIdます。私は MySQL を使用しており、おそらくストアド プロシージャがこれを行うための最良の方法であると考えていましたが、MySQL でストアド プロシージャを使用したことがなく、最善の方法がわかりません。OrderId私の他の(kludgy)オプションは、DBを2回ヒットすることでした。最初に、指定された を持つすべてのアイテムを取得しFormXId、次にすべての を取得して、(疑似コード)のようなことを行うFormXId動的ステートメントを実行します。SELECT

SELECT whatever FROM sometable WHERE FormXId=x OR FormXId=y....

明らかにこれは理想的ではありませんが、他の方法は本当に考えられません...プログラムまたはアーキテクチャのいずれかでできるより良い方法はありますか? 私のバックエンド コードは ASP.NET です。

本当にありがとう!

アップデート

詳細情報のリクエストに応じて:

サンプル入力:

OrderId = 1000

サンプル出力

FormXs:
-----------------
FormXId | FieldA | FieldB | etc
-------------------------------
1003    | value  | value  | ...
1020    | ... .. ..
1234    | .. . .. . . ... 

問題は、FormX が 1 つでOrderIdはなく、 のコレクションであることOrderIdです。同じ注文の複数のアイテムが FormX にある場合もあれば、1 つだけの場合もあります。ほとんどの注文では FormX にアイテムがありません。しかし、誰かが注文を引き上げると、アイテムが属しているすべての FormX が表示され、変更/表示できるようにする必要があります。

上記のことを実行するストアド プロシージャを作成し、1 つのクエリを実行して関連するすべての をプルダウンしOrderId、次に別のクエリを実行して適切な FormX を返すことを考えていました。しかし、もっと良い方法があるはずです...

4

1 に答える 1

1

単一の OrderId に関連する「FormX」のリストを取得する必要があることを理解しています。OrderItems には FormXId の列が含まれているとおっしゃいました。次のクエリを発行できます。

select 
    FormX.*
From 
    OrderItems
join
    Formx
on
    OrderItems.FormXId = FormX.FormXId
where
    OrderItems.OrderId = @orderId

@orderId をクエリに渡す必要があり、この注文に関連する FormX レコードを含むレコード セットを取得します。

@orderId パラメータを使用してこのクエリをストアド プロシージャとしてパッケージ化するか、動的 SQL を使用して @orderId をクエリを実行する実際の注文番号に置き換えることができます。

于 2010-03-02T04:18:31.237 に答える