2011-01-28 15 views
2

私の会社の一部の開発者は、SQLステートメントを一部の集中ストレージにプロダクションコードから取得することをお勧めします。そこで彼らは、データベース内のSQL-ステートメントを格納するためのアイデアを思い付いたので、彼らはこのようなデータベースからデータを呼び出すことができます。データベースへのSQLステートメントの保存

$result = GetData(#querynumber, parameters, ...); 

はこの良い習慣ですか? SQLステートメントの集中ストレージの代替方法はありますか?複数のデータベースを使用し、データベース名がsql文の変数になるため、準備済みの文は機能しません。

+4

Rant:特にストアドプロシージャを使用してデータベースにアクセスする企業で働くことは嫌いです。特に、これらのプロシージャの変更を承認して適用する必要がある別の部門のDBAがある場合はそうです。 –

+1

これは柔軟性のないものになり、維持する悪夢になるでしょう。代わりにORMツールを使用することを検討してください。 –

+0

オブジェクトとデータを扱うだけであれば、ソース管理にあなたのDBを取得するのは難しいです... –

答えて

2

私はこれまでのようなアイデアに出会ったことがあり、それは良い考えではないと確信しています。

まず、合理的にモジュール化されたコードを書くと、ほとんどのデータベースは同じ場所に置く必要があります。なぜデータベースに入れるのですか? 第2に、クエリを変更する場合、コードがクエリの特定の詳細に依存する可能性があることに留意してください.2つの異なる場所で変更を開始する必要があります。

IMHOでは、ほとんどの場合、データベースに照会を外部化することはありません。あなたのモデルに適したモジュラーで低結合のコードを書くだけでよいでしょう。

2

これは私がそれを行う方法です。

テーブルを結合して結果を得るためによく使用されるSQLは、ビュー内にある必要があります。 データを操作するためによく使用されるSQLは、ストアドプロシージャ内にある必要があります。

他の場所では使用されない特殊なSQLはコードで問題ありません。

個人的には、コード内に$ sql = "SELECT field1、field2 FROM $ view WHERE id = $ param"のようなコードはありません。それは私が属していないと思う再結合されるジョインとグループの大きなブロックです。

しかし、クエリテーブルの文字列としては属しません。それはどのようなビューとストアドプロシージャが対象です。

関連する問題