重複キー

重複した値を持つキーを定義できます。ただし、レコードの主キーの値は一意でなければならないため、主キーは重複させることができません。

重複キーを使用する場合は、各キーに同じ値を指定できる回数が制限されることに注意してください。重複キーに同じ値を指定するたびに、キーの出現番号が 1 ずつ増えます。個々のキーで値を重複させられる最大回数は、索引付きファイルの種類によって異なります。索引付きファイルの種類とその特徴の詳細なリストについては、「索引付きファイルの種類」を参照してください。

重複オカレンス値は、重複を持つキーを一意に識別するためにキーに追加される一意の識別子です。新しいキーの追加時に、同じ値のキーがすでに存在する場合、前回追加されたキーのオカレンス値に 1 を追加した値が、新規キーのオカレンス値として使用されます。いずれかの重複キーが削除されても、残りのキーは変更されません。残りのキーが削除されないため、一連の重複キーのなかで最も大きなオカレンス値を持つキーが削除されない限り、最大オカレンス値も変化しません。最も大きいオカレンス値を持つキーが削除されると、残りの重複キーのオカレンス値のなかで、最も大きな値が最大オカレンス値になります。

COBOL システムは、重複キーレコードを作成順に読み込むために出現番号を使用します。そのため、削除したレコードの出現番号を再使用できません。つまり、一部のキーをすでに削除した場合でも、重複値の最大回数に到達する可能性があります。

索引付きファイルの種類によっては、データ ファイルに重複レコードを持つものがあります。索引付きファイルに重複レコードが含まれている場合は、データ ファイルの各レコードの後に、システム レコードが続きます。このシステム レコードには、そのレコードの各重複キーに対するキーの出現番号が保持されます。この番号は、ファイルの履歴で、あるキー値が使用された回数を示すカウンターに過ぎません。重複レコードが存在すると、レコードに対する REWRITE 操作と DELETE 操作がより高速になりますが、このようなファイルのデータ レコードは標準的なファイルのデータ レコードよりも大きくなります。

副キーに重複した値を指定するには、SELECT 句の ALTERNATE RECORD KEY 句に WITH DUPLICATES を使用します。

 file-control.
     select idxfile assign to "idx.dat"
         organization is indexed
         record key is idxfile-record-key
         alternate record key is idxfile-alt-key 
                                 with duplicates.