web-dev-qa-db-ja.com

シノニムとビューの使用の長所と短所は何ですか?

これは一般的なデータベース設計の質問です。データベース開発でシノニムを使用すると、単純な観点からどのような利点がありますか? 2つを選択する際に留意すべき主な考慮事項は何ですか?

view

CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users

そして同等の同義語:

CREATE SYNONYM Users 
FOR IdentitySystem.dbo.LCTs
37
Jamey

彼らは違うものです。シノニムはオブジェクトのエイリアスであり、ビューは1つ以上のテーブルの構成要素です。

ビューを使用するいくつかの理由:

  • 結果セットの構造とセマンティクスをフィルタリング、結合、またはその他の方法で操作する必要がある場合があります

  • 変更されたが、やり直したくない依存関係がある基本構造に対してレガシーサポートを提供する必要がある場合があります。

  • テーブルのコンテンツの一部がすべてではなくユーザーのクラスに表示される必要がある場合に、セキュリティを提供できます。これには、機密情報を含む列の削除や、レコードのサブセットのフィルタリングが含まれる場合があります。

  • 一部のビジネスロジックを、レポート目的でユーザーがアクセスできる形式でカプセル化したい場合があります。

  • 複数のソースからのデータを統合したい場合があります。

...さらに多く。

同義語を使用する理由:

  • 特定のデータベースへの参照をハードコーディングできない(またはしたくない)別のデータベースのオブジェクトにエイリアスを設定することもできます。

  • アーカイブテーブルなど、時間とともに変化するソースにリダイレクトすることもできます。

  • クエリオプティマイザーに影響を与えない方法でエイリアスを設定したい。

...さらに多く。

多くの考慮事項があります。つまり、それぞれの状況に最適なツールを使用してください。

ビューで、私はできます

  • 列を非表示にする
  • 行を制限する述語(WHERE句)を追加する
  • 列の名前を変更する
  • sQL式に列名を与える

同義語を使用すると、次のことができます。

  • 名前を修飾せずに他のスキーマおよびデータベースのオブジェクトを参照する

同義語を使用して実行できることはおそらく他にもあります。 (Oracleデータベース)アプリケーションの設計では、すべてのデータベースオブジェクト(テーブル、ビュー、トリガーなど)に「所有者」スキーマ(ユーザー)を使用し、それらのオブジェクトに対する特権を他の「アプリ」に付与しますユーザー。 「app」ユーザースキーマのそれぞれで、「所有者」オブジェクトを参照する同義語を作成します。

HTH

7
spencer7593

ビューからの柱の投影は、作成時に確立されます。したがって、基になるビューに列を追加した場合、ビューを変更するまで列は公開されません。同義語ではそうではありません。通常は複雑さを隠すために、tsqlの単純な名前の置き換えと考えてください。

3
Jimmy Zimms

ビューは主に単純/複雑な「select」ステートメントです。基本的には、ビューをマスクとして使用し、使用する列の値のみを表示します。エンドユーザーに余分な情報を表示しないことを意図してビューを使用します。

一方、シノニムはデータベースオブジェクトの代替名です。

  • これにより、テーブル名のスキーマ名の前にドットを付けることなく、他のスキーマのテーブルを使用できます(user.tab_nameはsome_synonym_nameで置き換えることができます)。
  • 実際のオブジェクトを他の人と共有することに興味がない
3

同義語を使用して他のデータベースのオブジェクトを共有しているため、.Net Entity Frameworkを使用すると、単一のObjectContextを使用して、多くのデータベースから必要なすべてのデータにアクセスできます。

3
Josh

それが誰かのお役に立てば幸いです。私はこの記事を見て、同義語の代わりにビューを使用する理由を見つけました。

SQLサーバーをDbサーバーとして使用し、SAS=クライアントとして使用している場合。シノニムを使用すると、SASライブラリで認識されません。ビューを作成します。

それは最適化されていませんが、少なくともSQLサーバーを備えたWindows sasはどちらも最善ではありません:)

1
Mathese F

私が間違っている場合は修正してください。ただし、同義語の別の使用法(少なくともProgress OpenEdgeでは)があると思いますが、どこにも文書化されていないため、ビューよりも安全です。 DML SELECTステートメントの構文では、テーブル、ビュー、またはシノニムを使用できますが、INSERT、UPDATE、およびDELETEステートメントではテーブルまたはビューしか使用できません。一部のビューは、特定の条件を満たす場合、データへの更新可能、挿入可能、および削除可能なアクセスを提供します。シノニムは、ビューへの特権の付与(または拒否)をいじる必要なく、データへの読み取り専用アクセスを提供するための良い方法のようです。

1
Arthur