勤続年数が 10 年以上の社員の社員番号と氏名を検索する SQL は,次のように記述できます。
3.5.3 隠蔽
この SQL の実行では,t_従業員型の値に対しては,t_従業員型に定義されたルーチン「報酬」が実行さ れ,t_営業部員型の値に対しては,t_営業部員型に定義されたルーチン「報酬」が実行されます。
なお,上記の SQL のように,アプリケーションではルーチンが多重定義されているかどうかを意識しない でルーチンを呼び出せます。また,多重定義によってルーチンを追加した場合でも,アプリケーションを 変更しないで SQL を実行できるようになります。
例えば,t_従業員型のルーチン「報酬率」について PROTECTED を指定することが考えられます。こ れによって,t_従業員型のサブタイプ t_営業部員からは,属性「入社年月日」を直接参照することな く,「報酬率」の処理内容(入社年度から勤続年数を算出し,その値を基に報酬率を算出していること など)を知らなくても,ルーチン「報酬率」を実行でき,報酬率を算出できます。
•
PUBLIC
PRIVATE,PROTECTED のような限定はなく,その抽象データ型やサブタイプ以外の抽象データ型 の定義内やアプリケーションからも,属性の値へのアクセス及びルーチンを使用できます。
例えば,ルーチン「勤続年数」のようにアクセスに制限が不要な場合に,PUBLIC を指定することが 考えられます。
隠蔽レベルと抽象データ型の値の属性へのアクセス及びルーチンの使用可否を次の表に示します。
表 3‒9 隠蔽レベルと抽象データ型の値の属性へのアクセス及びルーチンの使用可否
隠蔽レベル アクセス元
その抽象データ型の定 義内
サブタイプの抽象 データ型の定義内
左記以外の抽象デー タ型の定義内
アプリケーション
PUBLIC ○ ○ ○ ○
PROTECTED ○ ○ × ×
PRIVATE ○ × × ×
(凡例)
○:抽象データ型の属性の値へのアクセス及びルーチンを使用できます。
×:抽象データ型の属性の値へのアクセス及びルーチンを使用できません。SQL エラーとなります。
ある抽象データ型 T に対する,隠蔽レベルとアクセス可否の関係を次の図に示します。
3. データベースの論理構造
図 3‒43 隠蔽レベルとアクセス可否の関係
抽象データ型を定義した表の作成,設計方法については,マニュアル「HiRDB システム導入・設計ガイ ド」を参照してください。抽象データ型を定義した表のデータ操作方法については,マニュアル「HiRDB UAP 開発ガイド」を参照してください。
3. データベースの論理構造