2.1.2 ビュー表
CREATE VIEW文に指定した問合せ式の結果を,新たな表として定義した仮想的な表をビュー表といいます。複数の表に対する集合演算の結果をビュー表として定義したり,表中の特定の行や列だけを取り出してビュー表として定義したりすることができます。
何度も指定される条件で検索した結果を,あらかじめビュー表として定義しておくことで,データベースを検索する操作が簡単になります。ビュー表の例を次の図に示します。
- [説明]
-
実表のSTOCK表から,PNAME(商品名)列が「Shirt」の行である,PCODE(商品コード)列,PRICE(単価)列,およびQUANTITY(在庫量)列で構成されるビュー表として,VSTOCK表を作成しています。
- メモ
-
ビュー表を定義すると,次のようなセキュリティ上の利点があります。
-
表中の特定の列や行だけを参照可能とするビュー表を定義することで,関係のないデータや,アクセスされては困るデータを隠すことができます。
-
実際にデータが格納されている実表の表名をデータベースの利用者に知らせる必要がなくなるため,実表名を利用した不正アクセスに対する防止効果があります(ビュー表を基表としたビュー表を作成した場合)。
データベースの利用者にデータを参照させる場合,実際にデータが格納されている実表を直接参照させることもできますが,表内の一部のデータ(特定の列など)だけを参照させたい場合は,ビュー表を使用することを推奨します。
-
(1) 更新可能ビュー表と読み取り専用ビュー表
ビュー表には,次に示す2種類があります。ビュー表の定義方法によって,更新可能ビュー表または読み取り専用ビュー表のどちらかになります。
-
更新可能ビュー表
実表と同じように,行の挿入,行の更新,および行の削除ができます。ただし,列の追加,およびインデクスの定義はできません。
更新可能ビュー表に対して,行の挿入・更新・削除をした場合,更新可能ビュー表の基表の行も挿入・更新・削除されます。
-
読み取り専用ビュー表
行の挿入,行の更新,および行の削除はできません。また,列の追加,およびインデクスの定義もできません。
(2) ビュー表の基表について
ビュー表の基になる表を基表といいます。CREATE VIEW文の問合せ式中に指定した表が基表になります。
- ■ビューレベルとは
-
定義したビュー表が,実表から何番目の階層になるのかを示す値のことです。ビューレベルの例を次の図に示します。
図2‒2 ビューレベルの例 - [説明]
-
-
ビュー表V1の基表はすべて実表のため,ビュー表V1のビューレベルは1になります。
-
ビュー表V2の基表は実表とビューレベル1のビュー表のため,ビュー表V2のビューレベルは2になります。
-
ビュー表V3の基表は実表のため,ビュー表V3のビューレベルは1になります。
-
ビュー表V4の基表は,ビューレベル2のビュー表とビューレベル1のビュー表のため,ビュー表V4のビューレベルは3になります。
-
- メモ
-
-
ディクショナリ表およびシステム表は,ビューレベル1のビュー表として扱われます。
-
表値構成子によって導出される導出表は,実表と同じ扱いになります。
-
(3) ビュー表の無効化
実表またはビュー表に対して,次に示す操作を実行した場合,操作対象の表に依存するすべてのビュー表が無効化されます。
-
DROP TABLE文(削除動作の指定を省略)で実表を削除した場合
この場合,削除した実表に依存するすべてのビュー表が無効化されます。
-
DROP VIEW文(削除動作の指定を省略)でビュー表を削除した場合
この場合,削除したビュー表に依存するすべてのビュー表が無効化されます。
-
ALTER TABLE文で実表の表名を変更した場合
この場合,表名を変更した実表に依存するすべてのビュー表が無効化されます。
-
ALTER TABLE文で実表の列名を変更した場合
この場合,列名を変更した実表に依存するすべてのビュー表が無効化されます。
-
ALTER TABLE文で配列型の列の最大要素数を変更した場合
この場合,最大要素数を変更した実表に依存するすべてのビュー表が無効化されます。
-
ALTER TABLE文で,レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更した場合
この場合,アーカイブマルチチャンク表に変更した表に依存するすべてのビュー表が無効化されます。
-
ALTER TABLE文で,アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更した場合
この場合,レギュラーマルチチャンク表に変更した表に依存するすべてのビュー表が無効化されます。
-
ALTER VIEW文でビュー表を再作成した場合
この場合,再作成したビュー表に依存するすべてのビュー表が無効化されます。
-
REVOKE文で表に対するSELECT権限を取り消した場合※
この場合,SELECT権限を取り消した表に依存するすべてのビュー表が無効化されます。
- 注※
-
-
認可識別子を指定して与えたSELECT権限と,PUBLIC指定で与えたSELECT権限の両方が取り消された場合が該当します。
-
付与権付きのSELECT権限が取り消された場合,またはSELECT権限の付与権だけが取り消された場合,ビュー表が無効化されることがあります。ほかのHADBユーザにSELECT権限を付与した際に使用した付与権が取り消された場合,付与したSELECT権限が取り消されます。SELECT権限が取り消された表が基表の場合,その基表に依存するビュー表が無効化されます。具体例については,マニュアルHADB SQLリファレンスのアクセス権限の取り消しの例題を参照してください。
付与権については,「2.7.5 アクセス権限」の「(3) アクセス権限の付与」を参照してください。
-
- ■ビュー表の無効化とは
-
ビュー表に対するアクセスができなくなる状態のことを,ビュー表の無効化といいます。ビュー表の無効化を解除してビュー表に再びアクセスできるようにするには,ビュー表の無効化要因を対策したあとに,ALTER VIEW文でビュー表を再作成する必要があります。または,ビュー表の無効化要因を対策したあとに,いったんDROP VIEW文でビュー表を削除して,CREATE VIEW文でビュー表を再定義する必要があります。
- ■依存するビュー表とは
-
上記の1.〜7.の操作によって,影響を受けるビュー表のことです。依存するビュー表の例を次の図に示します。
図2‒3 依存するビュー表の例 - [説明]
-
-
実表T1に依存するビュー表は,ビュー表V1,V2,V4になります。
-
実表T2に依存するビュー表は,ビュー表V1,V2,V4になります。
-
実表T3に依存するビュー表は,ビュー表V2,V4になります。
-
実表T4に依存するビュー表は,ビュー表V3,V4になります。
-
ビュー表V1に依存するビュー表は,ビュー表V2,V4になります。
-
ビュー表V2に依存するビュー表は,ビュー表V4になります。
-
ビュー表V3に依存するビュー表は,ビュー表V4になります。
-
ビュー表V4に依存するビュー表はありません。
-