Index-Sequentielle Dateiverwaltung

Will man mit Dateien arbeiten, so gibt es zum einen die Möglichkeit der sequentiellen Dateiverwaltung. Diese hat jedoch den Nachteil, daß man nicht geziehlt auf einzelne, ganz bestimmte Sätze aus der Datei zuzugreifen kann. Wenn man sich beispielsweise die Größe von Kundendateien in großen Kaufhäusern ansieht, so wird einem schnell klar, daß eine sequentielle Verarbeitungsart hier den sofortigen Konkurs zur Folge hätte. Eine so aufgebaute Batchverarbeitung würde vielleicht in einer Polarnacht durchlaufen können, keinesfalls jedoch in einer normalen Nacht.
Um also ein 'modernes' Datenhandling zu ermöglichen, gibt es die index-sequentielle Speicherung.
Hierbei haben die einzelnen Sätze fest zugeordnete Größen. Der Speicherbedarf für einen Satz ist also klar definiert. Daher kann die Position eines jeden Satzes innerhalb der Datei klar bestimmt werden. Die Startadresse ergibt sich dabei aus dem folgenden Algorythmus:

Datei-Startadresse + ((Satzzahl-1) * Satzlänge) = Satz-Startadresse

Nehmen wir als Datei-Startadresse 0 an, so ergibt sich für den fünften Satz einer Datei mit Satzlänge 100:

0+((5-1)*100) = 400

Der gesuchte Satz würde folglich auf Position 400 beginnen.
Hieraus wird klar, warum bei dieser Art der Dateiverwaltung Direktzugriffe auf die Sätze möglich werden. Natürlich kann das nur funktionieren, wenn die Sätze in der Datei mit der Definition im Programm übereinstimmen: Satzlänge 100 heißt nun mal Satzlänge 100.

Schlüssel:
Fraglich bleibt bei dem Beispiel, wie die Satzzahl festgelegt wird. Das geschieht mit Hilfe von Schlüsseln. Dabei unterscheidet man Primärschlüssel und Sekundärschlüssel.
Der Primärschlüssel besteht meist aus einer fortlaufenden Nummer. Er kann jedoch auch alphanumerische Zeichen enthalten. Wichtig ist jedoch, daß der Primärschlüssel identifizierend ist. Der Schlüssel darf also immer nur einmal verwendet werden und zu jedem Satz gehört genau ein bestimmter Primärschlüssel. Soll ein Direktzugriff stattfinden, so muß ein Primärschlüssel angegeben werden.
Sekundärschlüssel können mehrfach in der Datei vorkommen. Sie werden meist angelegt, um gewisse Sätze zu 'klassifizieren'. So könnte in einer Datei auf Deep-Space-Nine jeder Gast gespeichert werden. Neben einer Gast-Nummer (= identifizierender Primärschlüssel) wird u.a. das Feld, welches den Heimatplaneten des Gastes enthält zum Sekundärschlüssel gemacht. Es ist dann sehr einfach, mit Hilfe der Angabe eines Planeten (= klassifizierender Sekundärschlüssel), alle von diesem stammenden Personen, in einer Liste auszugeben.
Weiterhin können Sekundärschlüssel aus mehreren Feldern des Satzes bestehen. Pro Datensatz können in Cobol 255 Schlüsselfelder deklariert werden.
Es ist darauf zu achten, daß die Primärschlüsselfelder einer Datei im Nachhinein nichtmehr verändert werden können.
Intern sortiert Cobol die Schlüssel in ein Verzeichnis. Neben den Schlüsseln befinden sich die Startadressen in dieser Tabelle. Im Beispiel würden also alle Kandidaten nach dem Sekundärschlüssel 'Heimatplanet' hintereinander unter Angabe der Satz-Startadressen sortiert angegeben sein. Diese Tabelle bzw. das 'Schlüsselverzeichnis' wird automatisch von Cobol mit der Endung ".IDX" unter dem entsprechenden Dateinamen angelegt.

Auch eine index-sequentielle Datei muß in der INPUT-OUTPUT SECTION unter der FILE-CONTROL 'angemeldet' werden. Wie bei sequentiellen Dateien auch, geschieht dies mit Hilfe der SELECT- und ASSIGN-Klauseln. Hier werden auch die entsprechenden RECORD KEY's, die Organisationsform sowie der Zugriffsmodus festgelegt.
Fehler werden genauso über das FILE STATUS-Feld und eine entsprechende Fehlerbehandlung analysiert und abgefangen, wie bei der sequentiellen Dateiverwaltung.
Alle index-sequentiellen Dateien müssen wie sequentielle auch in der DATA DIVISION beschrieben werden. Dies geschieht in der FILE SECTION unter der Stufenbezeichnung FD.

Um index-sequentielle Dateien zu 'handlen', kann oder muß man in der PROCEDURE DIVISION folgende Anwendungen verwenden:

OPEN
READ
WRITE
REWRITE
START
DELETE
CLOSE


...