[解決済み】Stored ProcsでSQLを保持する場合とコードで保持する場合の長所と短所を教えてください【終了しました
質問
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を作成することは、何の利益もない余分な仕事です。
関連
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] varcharとnvarcharの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] SQL Serverにおけるchar、nchar、varchar、nvarcharの違いは何ですか?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] LINQ-to-SQLとストアドプロシージャの比較?[クローズド]