質問

まず、これに関する部分的な質問ですが、私が求めているのは正確ではありませんので、私と一緒に耐えてください。

私の質問は、 SubSonic の機能と、Rob Conneryの優れたビデオを見てからです。 このようなツールを使用してインラインクエリを実行するか、ストアドプロシージャの呼び出しを使用して クエリを実行しますか?

Robの仕事を最小限に抑えたくはありません(これは素晴らしいと思います)が、このプロジェクトについてはあなたの意見が欲しいだけです。新しいプロジェクトを開始する必要があります。 SubSonic(またはNHibernateのような他の同様のツール)を使用するか、単純な場合でも常にストアドプロシージャを呼び出すメソッドを続行します

Select this, that from myTable where myStuff = StackOverflow;
役に立ちましたか?

解決

どちらかである必要はありません。単純なクエリの場合は、SubSonicクエリツールを使用します。より複雑な場合は、ストアドプロシージャを使用してコレクションをロードするか、結果からデータセットを作成します。

こちらをご覧ください: SQLをストアドプロシージャとコードに対して保持することの長所と短所は何ですかおよびここ SubSonicとストアドプロシージャ

他のヒント

回答を見るこちらおよびこちら。できる限り、sprocsを使用します。ただし、赤テープがデータベースに入れるのに1週間かかる場合を除きます。

同じデータベースに依存する複数のアプリケーションがある場合、ストアドプロシージャはゴールドです。複数の場所ではなく、クエリロジックを一度定義して維持できます。

一方、ほとんどのシステムには論理的に整理するための優れた方法がないため、ストアドプロシージャ自体がデータベース内の大きな混乱になりやすくなります。また、バージョン管理や変更の追跡がより困難になる可能性があります。

個人的に厳格なルールに従わない。確かに、開発段階では、クエリをすばやく変更できるようにしたいので、クエリをインライン化します。

その後、次の2つの利点があるため、ストアドプロシージャに移行します。他にもあるとは思いますが、この2つは私に勝ちます。

1 /ストアドプロシージャは、データと、そのデータをある時点で操作/抽出するためのコードをグループ化します。これにより、DBAは既知の要因に基づいて最適化できるため、DBAの寿命がはるかに簡単になります(DBAを保証するのに十分なサイズのアプリであると仮定)。

DBAの大きなバグの1つは、アドホッククエリです(特に、フルテーブルスキャンが何であるかを知らない道化師による)。データベース管理者は、データベースを調整できる、一貫性のあるクエリを好む傾向があります。

2 /ストアドプロシージャには、データベースに最適なロジックを含めることができます。 DB2 / zに数十行のストアドプロシージャを見てきましたが、クライアントがコーディングしなければならないのは、「そのリストをくれ」のような1行だけです。

" that list"のロジックのためデータベースに保存されている場合、DBAは、クライアントコードを妥協したり変更したりすることなく、 自由に保存および抽出方法を変更できます。これは、オブジェクト指向言語を以前よりも「クリーン」にしたカプセル化に似ています。

インラインクエリとストアドプロシージャを組み合わせて実行しました。必要に応じて変更を加えるのに最適な場所が得られるため、ストアドプロシージャ/ビューアプローチの方が好きです。インラインクエリがある場合は、常にコードを変更してインラインクエリを変更し、アプリケーションを再ロールする必要があります。また、複数の場所にインラインクエリがあるため、1つのストアドプロシージャよりも多くのコードを変更する必要があります。

次に、ストアドプロシージャにパラメータを追加する必要がある場合、やはり多くのコードを変更します。

もう1つの注意点は、ストアドプロシージャの背後でデータがどのくらい頻繁に変更されるかということです。その場合、ストアドプロシージャ/ビューは、その変更に対する露出を最小限に抑えることができます。

また、ストアドプロシージャなしでアプリケーション全体を作成しました。 3つのクラスと10ページがあり、まったく価値がありませんでした。過剰になった、または正当化できるポイントが来ると思いますが、それはあなたの個人的な意見と好みにも帰着します。

その1つのアプリケーションからのみデータベースにアクセスするつもりですか?

そうでない場合は、データベースへの一貫したインターフェイスを使用できるように、おそらくストアドプロシージャを使用することをお勧めします。

変更を加える必要がある場合、アプリケーションを配布するのに大きなコストはかかりますか?

もしそうなら、サーバーで変更できるストアドプロシージャを使用した方がよいでしょう。これらの変更を配布する必要はありません。

データベースのセキュリティを心配していますか?

もしそうなら、テーブルへの直接アクセスをユーザーに許可する必要がないように、おそらくストアドプロシージャを使用する必要があります。

アプリケーションの外部で使用またはアクセスされないシステムのために、幅広い対象者のいない小規模なアプリケーションを作成している場合、インラインSQLで問題ありません。

Subsonicでは、インライン、ビュー、およびストアドプロシージャを使用します。 Subsonicはデータへのアクセスを簡単にしますが、亜音速のクエリでは何もできません。最新バージョンではありますが、2.1は改善されています。

基本的なCRUD操作の場合、インラインSQLは簡単です。より複雑なデータが必要な場合は、ビューを作成する必要があります。その後、ビューに対してSubsonicクエリを実行します。

ストアドプロシージャは、より難しいデータ計算とデータ取得に適しています。通常、セットベースの取得は、手続き型処理よりも常に高速です。

現在のSubsonicアプリケーションは、3つのオプションすべてを使用して優れた結果をもたらしています。

ストアドプロシージャに実際のロジック(変数、カーソルなど)が含まれていない限り、インラインSQLを好みます。私は最近LINQ to SQLを使用しており、生成されたクラスを取得して、事前定義された一般的なlinqクエリを含む部分クラスを追加しています。これにより開発が速くなると思います。

編集:私はこれのためにダウンモッドになることを知っています。外部キーまたはストアドプロシージャについて話すと、ダウンモッドになります。 DBAには仕事のセキュリティが必要だと思います...

ストアドプロシージャの利点(私の考えでは)

  1. SQLは1か所にあります
  2. クエリプランを取得できます。
  3. パフォーマンスを改善するために、必要に応じてデータベース構造を変更できます
  4. これらはコンパイルされているため、クエリプランをその場で作成する必要はありません
  5. アクセス許可を使用する場合-アプリケーションが行うクエリを確認できます。
  1. ストアドプロシージャは、データとそのデータを1つの時点で操作/抽出するためのコードをグループ化します。これにより、DBAは既知の要因に基づいて最適化できるため、DBAの寿命がはるかに容易になります(DBAを保証するのに十分なサイズのアプリであると想定)。

  2. ストアドプロシージャには、データベースに最適なロジックを含めることができます。 DB2 / zに数十行のストアドプロシージャを見てきましたが、クライアントがコーディングする必要があるのは、「そのリストをくれ」のような1行だけです。

  3. 私が見つけたストアドプロシージャを使用する最大の利点は、ロジックを変更する場合、インラインクエリの場合は、すべての場所に移動して変更し、すべてのアプリケーションを再ロールする必要があることです。ストアドプロシージャの変更のケースは1か所でのみ必要です。

したがって、明確なロジックがある場合はインラインクエリを使用します。それ以外の場合は、ストアドプロシージャを優先します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top