Index und Zugriff

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 14. Mai 2013, 12:01 Uhr von Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Datenzugriff - warum? == Daten, die nicht ausgewertet werden können, haben wenig Wert in der Datenverarbeitung. Xbase++ bietet zwei grundsätzliche Zugrif…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Datenzugriff - warum?

Daten, die nicht ausgewertet werden können, haben wenig Wert in der Datenverarbeitung. Xbase++ bietet zwei grundsätzliche Zugriffsmethoden an:


in der Reihenfolge der Satzerstellung

Grob vereinfacht kann man eine dBase-Datei als einen Karteikasten betrachten, dessen Karten man in der Reihenfolge, in der sie in den Kasten gelegt wurden, auch lesen kann.

Der entsprechende Wert, nach dem die Datensätze gelesen werden, ist die sogenannte Satznummer. Der erste Satz hat die Satznummer 1, der zweite Satz die Satznummer 2, und so weiter.

Mit diesem Zugriffsmechanismus kann auch auf einen beliebigen Satz zugegriffen werden, wenn seine Satznummer bekannt ist.


in beliebiger (wahlfreier) Folge

Sortieren

Der klassische Weg wäre es, die Datensätze nach bestimmten Kriterien zu sortieren. Bei einer Einzelplatz-Anwendung mag ein solches Verfahren noch akzeptabel sein, wenn die Datenmenge nicht zu gross ist, aber ab einem bestimmten Datenvolumen, oder spätestens wenn wir mit Multithreading oder von mehreren Arbeitsplätzen in einem Netzwerk auf die Daten zugreifen, entfällt der Sort.

Nichtsdestotrotz gibt es heute immer noch einen Sort-Befehl im Sprachumfang von Xbase++.


Über einen Index

Ein Index ist - vereinfacht gesprochen - eine Liste, die einem bestimmten Such- oder Sortierkriterium die Nummer des Datensatzes zuweist, in dem eine Übereinstimmung mit dem Suchkriterium vorhanden ist.

Beispiel:

Müller  | Peter | (1)
Baumann | Klaus | (2)
Bender  | Erika | (3)
Adeno   | Rita  | (4)

Ein Index über den Nachnamen könnte (grob vereinfacht) so aussehen:

Adeno   | (4)
Baumann | (2)
Bender  | (3)
Müller  | (1)

Ein Programm, dass die Datei nach Kundenname lesen soll, liest den Index und greift dann über die Satznummer auf die eigentliche Datei zu. Wie gesagt, diese Darstellung ist grob vereinfacht.

Während SQL von Hause aus auf solche Zugriffe spezialisiert ist, müssen wir in Xbase++ einen solchen Index immer selbst erzeugen.

Für den Aufbau des Index und die interne Wartung des Index ist die Xbase++-Laufzeitumgebung verantwortlich, so dass wir uns darum nicht kümmern müssen.


Index-Arten

NDX

Die ursprünglichen Clipper-Indexdateien hatten die Erweiterung NDX und waren quasi der erste Wurf.

NTX

Spätere Clipper-Versionen brachten mit den NTX-Dateien eine verbesserte und robustere Variante auf den Markt, die auch heute noch von Xbase++ unterstützt wird.

Ursprünglich konnte eine NTX-Datei nur einen Index-Begriff unterstützen, dies ist jedoch inzwischen überholt, so dass mit einer NTX-Datei mehrere Index-Begriffe verwaltet werden können.

CDX

FoxPro brachte eine Erweitung der Index-Dateien, in dem CDX-Dateien als erste mehr als einen Index-Begriff verwalten konnten, und auch das "starre" Verhältnis von einem Datensatz zu einem Index-Satz aufgebrochen wurde durch die sogenannten "roll-your-own" Index-Dateien.


Struktur einer Index-Datei

Index-Datei

Darunter verstehen wir hier die physische, auf einem beliebigen Medium gespeicherte Datei. Der Name der Datei kann, muss aber nicht dem Namen der zugrundeliegenden dBase-Datei entsprechen. Viele Programmierer benennen die Index-Datei jedoch so, wie auch die dBase-Datei heisst.


TAG

Unter Tag (englisch, nicht der deutsche Tag) versteht man eine Kombination aus Index-Begriff und Zugriffsweg.

Eine NTX-Datei kann genau ein Tag enthalten, während eine CDX-Datei eine theoretisch unbeschränkte Anzahl Tags enthalten kann (wobei das Speichermedium auf der einen Seite und die Perfomance auf der anderen Seite deutliche Grenzen setzen können).


Index-Begriff

Der Index-Begriff beschreibt, aus welchen Feldern und/oder Funktionen sich der Such- bzw. Sortier-Begriff zusammensetzen soll.

Dieser Begriff muss in der Xbase++-Sprache sinnvoll auszuwerten sein.

Beispiel:

Dateiaufbau:
NACHNAME   | CHAR | 30
VORNAME    | CHAR | 30
STRASSE    | CHAR | 30
PLZ        | CHAR | 10
ORT        | CHAR | 40
KUNDNUMMER | NUM  | 10,0

Gültige Indexbegriffe wären:

NACHNAME+VORNAME
VORNAME+NACHNAME
PLZ+NACHNAME
KUNDNUMMER
Str(KUNDNUMMER)
Left(NACHNAME, 10)
NACHNAME+"PETER"

Ungültige Indexbegriffe wären:

NACHNAME+LAND (Land ist in der Datei nicht definiert)
ORT+KUNDNUMMER (alle Elemente im Index-Begriff müssen den gleichen Typ haben)


Zugriffsweg

Diesen Begriff habe ich aus einem Host-System übernommen. Es beschreibt die Reihenfolge der Schlüssel und die zugeordneten Satznummern, um auf die korrespondieren Datensätze zugreifen zu können.

Die Xbase++-Laufzeitumgebung übernimmt die Verwaltung und Aktualisierung des Zugriffsweges, sofern es nicht ein "roll-your-own" Index ist.