web-dev-qa-db-ja.com

データベーステーブルごとに少なくとも1つのデータベースビュー-これは良い設計ですか、悪い設計ですか?

私たちは、お客様の既存のWebアプリケーションとインターフェースするWindows Mobileベースのアプリケーションを構築しています。お客様のSQLサーバー2008データベースに対してデータの読み取りと書き込みを行っています。

顧客はすべての読み取りがSQLビューを通じて行われ、すべての書き込みがストアドプロシージャを通じて行われることを望んでいます。

しかし、データベーススキーマを見ると、すべてのテーブルのビューがあります。また、テーブルの既存のビューを使用する代わりに、データの読み取りに使用されるすべてのクエリのビューがあります。これまでに348のテーブルと655のビューがあります。

彼らは、同様の方法でモバイルアプリケーションをモデル化したいと考えています。つまり、データの取得に使用するすべてのクエリに対して追加のビューを作成します。

これは貧弱な設計であることは知っていますが、顧客の視点に基づく戦略が貧弱な設計である理由を顧客にリストすることはできません。

いつビューを使用するかについてのコミュニティのコンセンサスは何ですか?非常に多くのビューがあると、SQLサーバーのパフォーマンスにどのような影響がありますか?

4
One-One

実際にはかなり良いデザインです。ビューを使用すると、次の利点があります。

  • 基礎となる物理テーブルの変更からアプリケーションを隔離します。
  • ビューは、クライアントとサーバー間の正式なインターフェース仕様と見なすことができます。
  • このビューでは、基になるデータへのきめの細かいアクセス制御が可能です。 I.E.モバイル、LANベース、およびWebベースのクライアントに異なるアクセスレベルを与えることが可能です。クライアントは、データベース全体ではなく、必要な特定のデータにアクセスするだけで済みます。
  • ビューは論理的な構造です。ビューの使用によるパフォーマンスの低下はありません。
  • 多くのデータベースでは、ビューの方が手動でコード化されたクエリよりもクエリキャッシュヒット率が通常優れているため、ビューによってパフォーマンスが向上します。
7
James Anderson

ビューレイヤーを介してデータにアクセスすることは良い考えですが、クエリごとに個別のビューを使用することは、必然的にかなりの繰り返しになることを意味します。必然的に、多くのビューに共通するビジネスルールが存在することになります(つまり、エンティティが1つの画面に表示されるために必要なすべてのフィルターは、ほぼすべての後続の画面で繰り返す必要があります)。これらのビジネスルールが変更されると、それらのビジネスルールを実装するすべてのビューを確認して変更する必要があります。代わりに、これらのビジネスルールを単一のビューに埋め込むことができる場合は、ロジックが変更されたときにコードを1か所で変更するだけで済みます。

3
Justin Cave

回答の多くには、ビューを使用する多くの正当な理由があり、より多くのビューを持つことに追加のコストはないことを指摘します。

mayがこの権限の推進力になるのは、既存のビュー/ spを壊す機会を与えたくないだけであり、他のアプリケーションに影響を与える可能性があること、および既存のビュー/ spアプリのバグが後で原因になる可能性があるため、疑わしいことはありません。

これは、レイヤー化とモジュール化のもう1つの形式です。アプリのすべてのものが「your」ビュー/ spレイヤーを通過します。アプリをインストールまたはアンインストールし、ビュー/ spsのセットがインストール/アンインストールされるなど。

3
ozz
  > The customer wants all reads to happen through SQL views, 
  > and all writes to happen through stored procedures.

maintananceの観点からこれを処理するのはより難しいことに同意します

  • Web-guiのすべての変更は、データベースに対応する変更が必要であることを意味します。
  • これにより、開発とロールアウトがより複雑になります。

しかし、セキュリティの観点から、これは優れた設計です。

  • データベースビューにより、きめ細かい権限が許可されます(つまり、どのユーザーロールがどの列を参照でき、データを関連付けることができます)。
  • ストアドプロシージャは、システムをSQLインジェクションから保護します。

パフォーマンスの観点から見ると、最近のデータベース(mssql2008を含む)はデータベースビューでのinexeを許可しているため、これは問題にはなりません。

1
k3b