スケーラブルデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(Windows(R)用)

[目次][索引][前へ][次へ]

12.17 抽象データ型を含む表

HiRDBでは表を構成する列のデータ型として抽象データ型を定義できます。

抽象データ型とは,既定義のデータ型で扱えないような複雑なデータを扱いやすく表現するための構造を持ったデータ型のことです。HiRDBでは,このようなデータ型をユーザが抽象データ型として定義できます。抽象データ型では,構造を示す属性とその値に対する操作をひとまとまりとし,定義系SQLによって定義できます。

抽象データ型は,数値型や文字型などの既定義のデータ型と同様に,表を構成する列のデータ型としてを扱えます。

抽象データ型を含む表のデータ構造を次の図に示します。次の図では,社員表中の「従業員」列のデータ型を抽象データ型「t_従業員型」としています。

図12-26 抽象データ型を含む表のデータ構造

[図データ]

<この節の構成>
(1) 抽象データ型を定義した場合の効果
(2) 継承の概要
(3) 継承を利用したときの効果
(4) 抽象データ型の定義方法

(1) 抽象データ型を定義した場合の効果

(2) 継承の概要

(a) 継承(inheritance)

HiRDBでは,既に定義した抽象データ型を基に,その型に定義された属性と操作を受け継いだ新しい抽象データ型を導出し定義できます。基になる型をスーパタイプといい,導出した型をサブタイプといいます。サブタイプがスーパタイプの属性及び関数を引き継ぐことを継承といいます。

スーパタイプ−サブタイプの関係は階層的に表現できます。これによって,複雑な概念モデルを抽象データ型を用いて階層化して表現できます。

抽象データ型のスーパタイプ−サブタイプ関係に基づく階層構造を次の図に示します。次の図では,抽象データ型「従業員」から,サブタイプ「営業部員」を導出しています。

図12-27 抽象データ型のスーパタイプ−サブタイプ関係に基づく階層構造

[図データ]

(b) 代替可能性(substitutability)

サブタイプの値は,そのスーパタイプの値として扱うことができます。これを代替可能性(substitutability)といいます。代替可能性を利用して値を挿入した抽象データ型を含む表のデータ構造を次の図に示します。

図12-28 抽象データ型を含む表のデータ構造(代替可能性を利用した場合)

[図データ]

(c) 多重定義(override)

HiRDBでは,上位の抽象データ型(スーパタイプ)で定義されたルーチンと同じ名前のルーチンを下位の抽象データ型(サブタイプ)の定義で上書きして定義できます。このように上書きして定義することを多重定義(override)といいます。多重定義によって,呼び出すルーチンの名称を型によって変更する必要がありません。

(3) 継承を利用したときの効果

継承を利用することで,次に示す効果が期待できます。

(4) 抽象データ型の定義方法

抽象データ型を定義するには,定義系SQLのCREATE TYPEを実行します。CREATE TYPEでは,構造を示すための属性と,値に対する操作を定義します。また,継承を利用する場合はCREATE TYPEでサブタイプ句を指定して定義します。CREATE TYPEの定義例については,「6.5 ユーザが定義した抽象データ型を定義した表の作成」を参照してください。

(a) コンストラクタ関数の定義

抽象データ型の値を生成するための関数(コンストラクタ関数)を定義します。コンストラクタ関数の実装で,抽象データ型の定義時にHiRDBによって提供されるデフォルトコンストラクタ関数を利用できます。デフォルトコンストラクタ関数は,すべての属性がナル値である値を生成します。

(b) ルーチンの定義

抽象データ型の定義内に,ある属性の値を操作するインタフェースとしてルーチンを定義できます。

(c) 隠蔽レベルの指定

抽象データ型を構成する属性及びルーチンに対するアクセスを制御するため,隠蔽レベルを指定できます。隠蔽レベルは,属性及びその抽象データ型の値に対する操作であるルーチンに指定できます。隠蔽レベルには,次に示す3種類があります。

抽象データ型の定義内でいったん隠蔽レベルを指定すると,次に別の隠蔽レベルの指定が出現するまでは直前の隠蔽レベルが有効になります。また,隠蔽レベルの指定がない場合,PUBLICが仮定されます。隠蔽レベルの違いによって,データへのアクセス,ルーチンの使用権限の範囲が異なります。

隠蔽レベルと権限を次の表に示します。

表12-10 隠蔽レベルと権限

隠蔽レベル アクセス元
その抽象データ型の定義内 サブタイプの抽象データ型の定義内 左記以外の抽象データ型の定義内 アプリケーション
PUBLIC
PRIVATE × × ×
PROTECTED × ×

(凡例)
○:属性値へのアクセス及びルーチンを使用できます。
×:属性値へのアクセス及びルーチンを使用できません(SQLエラーになります)。