- PR -

Database Expert 会議室での質問について

投票結果総投票数:35
SQLで可能なことは極力SQLに任せて実現する。 26 74.29%
SQLは単純化し、極力ロジックで実現する。 9 25.71%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2007-11-26 17:49
こんにちは。ぴんふです。
以前からの疑問についてアンケートをしてみようかと思います。
どうかご協力をお願いします。

Database Expert 会議室で「SQLでこういうことがしたいのですが・・・」という質問を良く見るのですが、私から見ると「SQLじゃなくてプログラムのロジックで処理したほうが保守性、可読性が高くないか?」というものが結構あるわけです。

ケースバイケースだとは思いますが、
私は特に制約が無く、APのパフォーマンスに影響が無い場合はSQLは極力単純にし、
細かい処理や条件分岐などはプログラムのロジックで組むようにしています。

そこで皆さんに質問です。
AP中のデータベースアクセスに際しては、
(1)SQLで可能なことは極力SQLに任せて実装する。
(2)SQLは単純化し、極力ロジックで実装する。
前提としては前述の通り、
・開発ポリシー、コーディング規約に特に制限がないこと
・(1)(2)のどちらを選んでもAPのパフォーマンスに大差がないこと
です。

以上、よろしくお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-11-26 18:11
参考までに。

Martin Fowler's Bliki in Japanese - ドメインロジックとSQL
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?DomainLogicAndSQL
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2007-11-27 09:29
問い合わせ系に関しては、ストアドにしといた方が、DBの差異を吸収できたり、チューニングが容易に思える。
したがって、SQLで可能なことは極力SQLに任せて実現する。を選択。
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-11-27 11:24
よっぽど複雑で、一発のSQLだと大変な場合を除き、基本SQLでやってます。
ロジックで書くより、SQLで書いたほうが意図が伝わるケースの方が、私の場合多いので。

なので「 SQLで可能なことは極力SQLに任せて実現する。」に投票。

よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2007-11-27 12:41
(1)に投票しましたが、よく質問に出てくる「行の情報を列として横展開したい」
など、SQLの苦手な分野ではプログラムで記述しています。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-27 14:02
投票してません。「極力」を「可能な限り」と解釈すると、どちらでもないです。

SQLで全レコード取ってきて、プログラム内で"今日のデータ"だけ抽出、とかは当然やらないし、
けど、3営業日前のデータを取得、とかはSQLでできても(自分の判断では)やらないです。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-11-27 14:50
「SQL一発」はパフォーマンスが良い場合が多く、アプリケーションロジックが簡素化されてBugが入り込む余地が少なくなるというメリットがあるので、基本的には複雑なSQL文はOKです。

ただし、ぱっと見て理解し難いくらい複雑な場合は、ドキュメントなりコメントなりで、そのSQL文を自然言語(うちの場合は英語)で完璧に説明することを求めます。
これができない場合(意外と多い)は、本人ですら実は理解できていないことになりますので、SQL文をばらします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-11-27 15:22
複雑なSQLはテスト困難、場合によってはテスト不可能になるので使いたくないですね。
私の場合、その一点に尽きるのですけども。

スキルアップ/キャリアアップ(JOB@IT)