Kleine Entwicklungsgeschichte von dBase...
Am Anfang gab es nur Records mit fester Satzlänge (in Pascal/Delphi als typisierte Datei bekannt).
Dann tauchte aber schon das erste Problem auf:
wie kann man einen Datensatz mitten in der Datei löschen ohne dass man unter Unständen viele Megabytes in der Datei verschieben muss?
Die Lösung ist, dass das 1 Byte im Record den Löschstatus angibt.
' ' bedeutet Datensatz gültig
'*' bedeutet Datensatz gelöscht bzw. als gelöscht markiert
Irgendwann muss man die als gelöscht markierten Datensätze wieder entfernen.
Daher braucht man ein Tool, dass die Recordlänge und die Datei kennt und dann nur die nicht-gelöschten Records in eine neue Datei kopiert.
Das Problem dabei ist falls die Recordlänge nicht stimmt ist das Ergebnis nur noch Datenmüll.
Der nächste Entwicklungsschritt war also dass die Datei einen Header bekommt in dem die Recordlänge vermerkt ist.
Im Header wird zusätzlich aber noch eine Feldliste geführt.
Für jedes Feld wird der Feldname (max 10 Zeichen), Feldlänge, Datentyp (C=Character, N=Numerisch, D=Datum, L=Logisch/Boolean) und ggf. Anzahl der Nachkommastellen gespeichert.
Im Header stehen noch weitere Infos wie z.B. die dBase-Version, Datum der letzten Änderung, Anzahl Datensätze, Zeichensatz, ...
http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm
Die Datenfelder werden aus der Software auch nicht mehr über ihre feste Position im Record sondern über ihren Feldnamen angesprochen.
Diese Technik war vor vielen Jahren revolutionär und hat dBase zur Erfolgsgeschichte gemacht.
Durch die Feldbeschreibung im Header konnte man z.B. neue Felder hinzufügen oder die Reihenfolge ändern ohne dass die Anwendungen damit ein Problem bekommen.
Das ist aber noch nicht alles.
Um Datensätze schnell aufzufinden wurde parallel zur dBase Datendatei noch eine oder mehrere Indexdateien geführt.
Ausserdem gab es noch eine weitere Datei in der Felder mit variabler Länge (Memo Felder) gespeichert wurden.
Was ich hier beschrieben habe ist Stand der Technik im Jahr 1985 und die war den alten typisierten Dateien weit überlegen.