このシナリオのアーキテクチャは次のとおりです。
アイテムのテーブルといくつかのフォームのテーブルがあります。フォームがアイテムを所有するのではなく、アイテムがフォームを所有します。これは、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 を返すことを考えていました。しかし、もっと良い方法があるはずです...