私たちは、お客様の既存のWebアプリケーションとインターフェースするWindows Mobileベースのアプリケーションを構築しています。お客様のSQLサーバー2008データベースに対してデータの読み取りと書き込みを行っています。
顧客はすべての読み取りがSQLビューを通じて行われ、すべての書き込みがストアドプロシージャを通じて行われることを望んでいます。
しかし、データベーススキーマを見ると、すべてのテーブルのビューがあります。また、テーブルの既存のビューを使用する代わりに、データの読み取りに使用されるすべてのクエリのビューがあります。これまでに348のテーブルと655のビューがあります。
彼らは、同様の方法でモバイルアプリケーションをモデル化したいと考えています。つまり、データの取得に使用するすべてのクエリに対して追加のビューを作成します。
これは貧弱な設計であることは知っていますが、顧客の視点に基づく戦略が貧弱な設計である理由を顧客にリストすることはできません。
いつビューを使用するかについてのコミュニティのコンセンサスは何ですか?非常に多くのビューがあると、SQLサーバーのパフォーマンスにどのような影響がありますか?
実際にはかなり良いデザインです。ビューを使用すると、次の利点があります。
ビューレイヤーを介してデータにアクセスすることは良い考えですが、クエリごとに個別のビューを使用することは、必然的にかなりの繰り返しになることを意味します。必然的に、多くのビューに共通するビジネスルールが存在することになります(つまり、エンティティが1つの画面に表示されるために必要なすべてのフィルターは、ほぼすべての後続の画面で繰り返す必要があります)。これらのビジネスルールが変更されると、それらのビジネスルールを実装するすべてのビューを確認して変更する必要があります。代わりに、これらのビジネスルールを単一のビューに埋め込むことができる場合は、ロジックが変更されたときにコードを1か所で変更するだけで済みます。
回答の多くには、ビューを使用する多くの正当な理由があり、より多くのビューを持つことに追加のコストはないことを指摘します。
mayがこの権限の推進力になるのは、既存のビュー/ spを壊す機会を与えたくないだけであり、他のアプリケーションに影響を与える可能性があること、および既存のビュー/ spアプリのバグが後で原因になる可能性があるため、疑わしいことはありません。
これは、レイヤー化とモジュール化のもう1つの形式です。アプリのすべてのものが「your」ビュー/ spレイヤーを通過します。アプリをインストールまたはアンインストールし、ビュー/ spsのセットがインストール/アンインストールされるなど。
> The customer wants all reads to happen through SQL views,
> and all writes to happen through stored procedures.
maintananceの観点からこれを処理するのはより難しいことに同意します
しかし、セキュリティの観点から、これは優れた設計です。
パフォーマンスの観点から見ると、最近のデータベース(mssql2008を含む)はデータベースビューでのinexeを許可しているため、これは問題にはなりません。