1. ホーム
  2. c#

[解決済み】Stored ProcsでSQLを保持する場合とコードで保持する場合の長所と短所を教えてください【終了しました

2022-04-03 08:24:22

質問

C#のソースコードやStored ProcsにSQLを保持することのメリット/デメリットは何でしょうか?友人と進めているオープンソースプロジェクト(C# ASP.NET Forum)で議論していることです。現時点では、データベースアクセスのほとんどは、C#でSQLをインラインで構築し、SQL Server DBに呼び出すことで行われています。そこで、この特定のプロジェクトでは、どちらがベストなのかを確立しようとしています。

今のところ、私は

コードにおける利点。

  • メンテナンスが容易 - クエリ更新のためにSQLスクリプトを実行する必要がありません。
  • 他のDBへの移植が容易 - 移植のためのプロックが不要

Stored Procsの利点。

  • パフォーマンス
  • セキュリティ

解決方法は?

ストアドプロシージャが苦手

ストアドプロシージャは保守性が高いです。 * SQLを変更するたびにC#アプリを再コンパイルする必要はありません。

データ型が変わったり、追加のカラムを返したくなったりすると、結局は再コンパイルすることになる。アプリの下からSQLを「透過的に」変更できる回数は、全体から見ればかなり少ないです。

<ブロッククオート
  • SQLのコードを再利用することになる。

C#を含むプログラミング言語には、関数という素晴らしいものがあります。つまり、同じコードのブロックを複数の場所から呼び出すことができるのです。すごい 再利用可能なSQLコードをこの中に入れることもできますし、本当にハイテクになりたいのであれば、それを代行してくれるライブラリを使うこともできます。これはオブジェクトリレーショナルマッパーと呼ばれるもので、最近ではかなり一般的になっています。

<ブロッククオート

コードの繰り返しは、保守性の高いアプリケーションを構築しようとするときに、最もやってはいけないことなのです!

同感です。だからこそストアドプロックは悪いものなのです。SQLをSQLのブロックに分解するよりも、コードを関数に分解する方がはるかに簡単です。

<ブロッククオート

このとき、SQlコードに小さな問題があることに気づきました。そこで、1か所のプロシージャを変更するか、すべてのウェブサーバにコードをプッシュするか、すべてのウィンドウズにデスクトップアプリケーションを再インストールするか(クリックオンセが役立つかもしれません)。

なぜWindowsアプリケーションは中央データベースに直接接続しているのですか?これはセキュリティホールであり、サーバーサイドのキャッシュを排除するボトルネックのように思えます。ウェブサーバーにウェブサービスなどを介して接続すべきではないでしょうか?

つまり、1つの新しいsprocを押すか、4つの新しいwebserverを押すか?

この場合 しかし、私の経験では、「プッシュされた変更」の95%はコードに影響し、データベースには影響しないのです。その月にウェブサーバに20個、データベースに1個プッシュするとして、代わりにウェブサーバに21個、データベースに0個プッシュしても、ほとんど損失はないでしょう。

<ブロッククオート

コードレビューがしやすくなる。

どのように説明できますか?これがわからないんです。特に、sprocはおそらくソース管理されていないので、ウェブベースのSCMブラウザなどでアクセスすることはできません。

もっと短所を。

Storedprocsはデータベースに格納され、外部からはブラックボックスとして見える。ソースコントロールに入れたいといった単純なことが悪夢になる。

また、労力の問題もあります。すべてを1つのファイルに分解するのは理にかなっているかもしれません。 ミリオンティア しかし、そうでない場合は、あらゆることにstoredprocを作成することは、何の利益もない余分な仕事です。