要するにどこまでをアプリに持たせ、どこまでをServerに持たせるのでしょうか。
これといった正解があるわけではないので、なかなか難しいところです。
「どうやれば一番効率がいいのか」に尽きるのかな、と思います。
同じDBを多数のアプリが参照するような場合は、共通の参照方法をViewで、操作をストアドプロシージャ等で提供しているのは効率が良いかもしれません。
ただ、SQLには方言があるので、DBを乗り換える可能性があるようなシステムの場合、ストアドプロシージャ等がたくさんあると後で大変な事になります。
また、DBはスケールアウトが難しいので、ストアドプロシージャで重い処理を実装してしまうと、負荷が大きくなった時の対応が難しくなります。(アプリ側はアプリケーション・サーバーを増やすだけ(スケールアウト)で対応できるケースが多いので、DBよりは簡単)
あと、DBの方がテストが面倒だったり難しい傾向はあると思いますので、過剰に作り込むと大変だと思います。
なので、想定している使い方次第でバランスを考える必要はあります。
たとえば View というのには種々のSQLが記述できますが「仮想テーブル」といわれるように、言葉がうまく説明できませんが、「所望のテーブル」を抜き出すに足るSQLを書くにとどめるべきなんでしょうか。
使い方は自由ですが、Viewはクエリの繰り返しが多い場合のほか、特定のロールのユーザー以外には見せたくないようなデータを隠蔽するために使ったり、スキーマ変更に伴う互換性の維持に使ったりもします。
いずれにせよ、上記の通りDBの負荷は逃がしにくいので、極端に複雑な(負荷をかけるような)クエリを書くのはやめておいた方が良いです。