0

したがって、私の問題は、データベースに相互に関連するテーブルがたくさんあることです。さて、ユーザーが望むものに応じて、私はそれらから異なる投影を作成する必要があります。

10個のテーブルがあり、6つの異なるプロジェクションが必要だとします。これらのプロジェクションは、私が使用するビューコンポーネントのデータソースとして直接使用されます。基本的に、これまで私はこれを達成するための2つの方法を考え出しました。

1)必要なすべての異なるテーブルを含むデザイナを使用してDataSetを作成します。次に、Linq2DataSetを使用してプロジェクションを作成し、結果をビューコンポーネントに渡します。
2)プロジェクションごとに1つずつ、合計6つのカスタムTableAdapterを含むDataSetを作成し、データテーブルにそれらを入力して、テーブルをビューコンポーネントに渡します。

ソリューション1の場合、明らかに柔軟性が高く、そこから新しいプロジェクションをより簡単に作成できます。ただし、データ量が多くなると問題になる可能性があります。
ソリューション2の場合、軽量ですが、変更を加えるのは非常に困難です。すぐに多くの変更が行われるとは思っていませんが、柔軟性は常に優れています。

では、これらのソリューションのどれが優れているでしょうか。また、他のより優れたソリューションも利用できますか?

編集:いくつかのコンテキストを追加する

そこで、使用しているデータの種類の例を挙げようと思いました。基本的に、結果を含むテーブルがあります。結果にはタイプがあり、1つ以上の関係を持つことができます。これらは、たとえば、trackID、routeID、countryIDとして定義されます。

ここで、結果のタイプに応じて、1つ以上のリレーションをフェッチする必要があります。これらの例としては、トラックの平均速度の結果タイプがあります。これは、3つすべてに関係している可能性があります。つまり、前述のすべてのテーブルを結合したいと思います。もう1つの例は、トラックの配達数の結果タイプであり、ルートや国と関係がある可能性があります。未使用の関係は常に0またはnullです。

また、これらのケースはさらにシナリオに分けられます。これは、指定されたシナリオのみを考慮して、表示されるデータをフェッチするクエリを変更できる必要があることを意味します。

だから私の問題は、このすべてのデータをどのように読み取って適切に使用するかです。SQLビューが1つのオプションになると思います。私はデータベースアクセスにまったく慣れていないので、どんな助けでもありがたいです。

4

1 に答える 1

1

投影はLINQを使用してクライアント側で行われるため、最初のものは適切ではありません。2つ目は使用できますが、まだ6つのテーブルを作成しています。私があなたの投稿から理解しているように、データビューは1つしかないので、1つだけで生きることができます。しかし、私の提案は、クライアントが期待している種類のプロジェクションのIDを送信している場合、6つのビューを定義することでデータベース側のプロジェクションを使用するか、動的クエリにすることができます。必要な列には水平フィルタリングを使用し、where句を使用して垂直フィルタリングを使用します。

クエリはDBに外部化されているため、コードに埋め込まれたクエリと比較して変更が簡単であるため、ビューを使用します。

于 2011-04-13T08:36:32.560 に答える