PL/Iは、次の 3 つのタイプの VSAM データ・セットをサポートします。
上記のデータ・セットはそれぞれ、PL/I の索引付きデータ・セット編成、 連続データ・セット編成、および領域データ・セット編成とほぼ対応しています。 これらはすべて順序を付けられ、中にあるレコードに関連付けられたキーを持つことができます。 3 つのタイプ全部において、順次アクセスとキーによるアクセスの両方を行うことができます。
キー順データ・セットだけがその論理レコードの一部としてキーを持つことができますが、 入力順データ・セット (相対バイト・アドレスを使用) および相対レコード・データ・ セット (相対レコード番号を使用) でもキー順アクセスを行うことができます。
VSAM データ・セットはすべて直接アクセス・ストレージ・デバイスに保持され、 そのデータ・セットを使用するには、仮想記憶オペレーティング・システムが必要です。
VSAM データ・セットの物理編成は、他のアクセス方式で使用するものとは異なります。 VSAM ではブロック化の概念は適用されず、また、 相対レコード・データ・セットの場合を除き、レコードは固定長でなくてもかまいません。VSAM 編成のデータ・セットでは、 データ項目は制御インターバル に並べられ、 さらにそれが制御域 内に並べられます。 処理に備えて、制御インターバル内のデータ項目は論理レコード内に並べられます。 制御インターバルは、1 つ以上の論理レコードを収容することができ、1 つの論理 レコードが複数の制御インターバルにスパンしてもかまいません。VSAM では、ブロック化因数とレコード長に対する配慮は大きく軽減されますが、 レコードは、最大指定サイズを超えてはなりません。VSAM では制御インターバルへアクセスすることもできますが、 このタイプのアクセスは PL/I ではサポートされていません。
VSAM データ・セットは、2 つの索引タイプを持つことができます。それは、基本と代替です。基本索引 はデータ・セットを定義するときに設定される KSDS に 対する索引で、常に存在し、また KSDS で可能な唯一の索引です。KSDS または ESDS に 対して、1 つ以上の 代替索引 を使用することができます。 ESDS に代替索引 を定義すると、一般に ESDS を KSDS として使用できます。KSDS の代替索引は、 基本索引とは異なる論理レコードのフィールドをキー・フィールドとして使用できます。 代替索引は重複キーが使用できる非固有、 重複キーが使用できない固有 のいずれかにすることができます。 基本索引には、重複キーがあってはなりません。
代替索引を持つデータ・セット内の変更は、 今後も使用するすべての索引に反映されなければなりません。この活動は、 索引アップグレード として知られ、データ・セット内の 索引アップグレード・セット 内の任意の索引について、VSAM が行います。(KSDS の場合は、 基本索引は常に索引アップグレード・セットのメンバーです。) しかし、 基本索引または固有代替索引に重複キーを作成する、データ・セット内の変更は避けてください。
VSAM データ・セットを初めて使用する前に、 アクセス方式サービスの DEFINE コマンド を使ってそのデータ・セットをシステムに対して 定義しなければなりません。これは、データ・セットのタイプ、構造、 および必要スペースを完全に定義するのに使用できるコマンドです。 このコマンドはまた、データ・セットが KSDS であるかまたは 1 つ以上の代替索引を持つ場合に、 そのデータ・セットの索引 (キーの長さと位置も一緒に) と索引アップグレード・セットも定義します。 したがって、VSAM データ・セットはアクセス方式サービスによって「作成」されます。
初期データを新たに作成した VSAM データ・セットに書き込む操作 を、本書ではロードする という表現で示しています。
3 つのタイプのデータ・セットは、次の各目的別に使用します。
どのタイプの VSAM データ・セット内のレコードにも、 キーを使用して直接、または順次に (逆方向または順方向に) アクセスできます。2 方向の組み合わせを使用することもできます。 キーで開始点を選択し、その点から順方向あるいは逆方向に 読み取りを行います。
キー順および入力順データ・セットに代替索引 を作成できます。 作成後は、 多くのシーケンスを使用して、または多くのキーのうちのいずれかを使用して、ユーザー・データにアクセスできます。 例えば、 従業員番号順に保持されているか、索引を付けられているデータ・セットを使用して、 代替索引 内に名前でそれに索引を付けることができます。それから、 英字順、逆英字順、または名前を直接キーとして使用して、そのデータ・セットにアクセスできます。 従業員番号の同じ種類の組み合わせによって、データ・セットにアクセスすることもできます。
表 25 に、同一データをどのように この 3 つの異なったタイプの VSAM データ・セット内に保持できるかを示し、 それぞれの利点と欠点を示しています。
| データ・セット・タイプ | ロード方式 | 読み取り方式 | 更新方式 | 利点と欠点 |
|---|---|---|---|---|
| キー順 | 順次に並んだ索引または固有でなければならない基本索引。 | 基本索引でレコードのキーを指定した KEYED。
任意の索引を逆方向または順方向に SEQUENTIAL。 キーで位置決めした後に、逆方向または順方向の順次読み取り。 |
任意の索引内で固有キーを指定して KEYED。
固有キーで位置決めした後に SEQUENTIAL。 レコードの削除が許可される。 レコードの追加が許可される。 |
利点 :
完全アクセスおよび更新。
欠点 : ロード前にレコードが基本索引順にソートされていなければならない。 使用 : アクセスがキーと関連する場合に使用。 |
| 入力順 | 順次 (順方向のみ)。
各レコードの RBA を入手して、キーとして使用可能。 |
SEQUENTIAL 逆方向または順方向。
RBA を使用して KEYED。 キーで位置決めをした後で、逆方向または順方向に順次。 |
新しいレコードは終わりにのみ。
既存レコード長は変更不可。 レコードの削除不可。 |
利点 :
簡単迅速に作成。
固有索引は不要。 欠点 : 限定された更新機能。 使用 : データが主として順次式でアクセスされる場合。 |
| 相対レコード | スロット 1 から順次。
スロット番号を指定して KEYED。 キーで位置決めした後で、順次書き込み。 |
番号をキーとして指定して KEYED。
空きレコードを省いて、順方向または逆方向へ順次。 |
指定したスロットから開始し、次のスロットへ順次。
番号をキーとして指定して KEYED。 レコードの削除が許可される。 空きスロットへのレコード追加が許可される。 |
利点 :
番号によるレコードへの高速アクセス。
欠点 : 構造が番号付けに拘束される。 固定長レコード。 使用 : レコードが番号によってアクセスされる場合に使用。 |