ここで、頭脳、つまり開発者(DV)とDBAの頭脳の出会いが必然的に起こるはずです。ビジネスロジック(BL)を使用してデータベースに保存すると、その実装を美化または恐怖に陥れる可能性があります。
一部のRDBMS製品には、ビジネスロジックとオブジェクトインフラストラクチャ用の優れたライブラリ/ツール/ APIがあり、それらをアプリケーションですばやく学習して使用できます。他のRDBMSの場合、ライブラリ/ツール/ APIは存在しません。
これまで、クライアントサーバーアプリはストアドプロシージャ(SP)を介してBLへのブリッジを作成していました。OracleやSQL Serverなどの製品の場合、これは早期に行われました。PostgreSQLやMySQLなどのオープンソースデータベースが登場すると、それらを使用するデータベースはBLのストアドプロシージャで新境地を開く危険性がありました。PostgreSQLは、ストアドプロシージャが実装されただけでなく、顧客の言語を作成する機能も登場したため、この点で非常に急速に成熟しました。MySQLは、基本的にストアドプロシージャの世界での進化を止め、多くの制限のある単純な形式の言語になりました。したがって、BLに関しては、MySQLとそのストアドプロシージャ言語に完全に依存しています。
質問が1つだけ残っています。RDBMSに関係なく、BLの全体または一部をデータベースに常駐させる必要がありますか?
開発者のことを考えてください。アプリケーションで問題が発生した場合、デバッグプロセスでは、断続的に正しい場合とそうでない場合があるデータチャネジャーを追跡するために、開発者がデータベースに出入りします。これは、C ++アプリケーションをコーディングし、途中でアセンブラーコードを呼び出すようなものです。ソースコード、クラス、構造体から割り込み、レジスター、オフセットに切り替えて、戻る必要があります!!! これにより、デバッグが同じレベルになります。
開発者は、データベースではなくメモリ内にあるビジネスオブジェクトを介して、言語構成(C ++のコンパイラフラグ、PHP / Pythonの異なる設定など)とともにBLを高速実行する方法を作成できる場合があります。一部の人は、データベースにストアドプロシージャとトリガーのデバッグがうまく統合され、見かけ上使用できないライブラリを作成することにより、データベースへのコードの実行を高速化するためにこのイデオロギーを橋渡ししようとしました。
したがって、開発者は、2つの言語でソースコードとBLを開発、デバッグ、および保守することが求められます。
次に、DBAについて考えます。DBAは、データベースを無駄のない状態に保ち、ストアドプロシージャの領域で可能な限り意味を持ちたいと考えています。DBAはBLをデータベースの外部にあるものと見なす場合があります。それでも、SQLがBLに必要なデータを要求する場合、SQLは無駄のない、平均的なものである必要があります。
今、心の出会いのために!!!
開発者はSPをコーディングし、反復メソッドを使用します。DBAはSPを調べます。DBAは、開発者が作成した反復メソッドを単一のSQLステートメントで置き換えることができると判断します。開発者は、DBAによって提案されたSQLステートメントが、SQLステートメントの通常の実行計画に従わない他のBL関連コードまたはSQLの呼び出しを必要とすることに気付きます。
これに照らして、構成、パフォーマンスチューニング、およびSPコーディングは、データ検索のためのBLの深さとデータ集約度の関数になります。BLの深さとデータ集約度が高いほど、開発者とDBAは、データベースに与えられるデータ量と処理能力のために同じページにいる必要があります。
結論
データ取得の方法は、常に開発者キャンプとDBAキャンプの両方を含む必要があります。速度と効率の両方のために、どのコーディング方法とデータ検索パラダイムが連携して機能するかに関して、常に譲歩しなければなりません。ソースコードが処理するデータの準備がコードがデータを取得する前に1回だけ行われる場合、DBAはリーンSQLと平均SQLの使用を指示する必要があります。BLがDBAが調整していないものである場合、手綱は開発者の手にあります。これが、DBAが自分自身やプロジェクトチームの一員であり、自分自身の島ではなく、開発者がDBAにSQLの微調整を許可する必要がある場合に、そのことを見なければならない理由です。