[Allegro] Frage zum primären Schlüssel

Bernhard Eversberg b-eversberg at gmx.de
Mi Jul 13 09:22:44 CEST 2016



> Gesendet: Dienstag, 12. Juli 2016 um 18:13 Uhr
> Von: "Klaus Lehmann" <lehmann_klaus at t-online.de>

> vorweg: mir ist klar, daß der PS (abgekürzt für Primärer Schlüssel)
> immer(?) eine eindeutige sache sein sollte.

Irgendwie erzwungen oder automatisch geprüft wird das nicht.
Fast alles zum Thema "Prim.Schl." steht in einem Fortbildungstext:

  http://www.allegro-c.de/fb/allegrofb-Kap7.3.htm

Den hat seinerzeit Kollegin Kocian geschrieben. (Man ist als Entwickler immer
froh, wenn wer anders was beschreibt, weil's dann auch wer anders besser
versteht - der Entsickler ist von Haus aus betriebsblind.)
Darin steht:

"Gebraucht werden Primärschlüssel in allegro-Datenbanken NUR beim Einspeisen
 von Daten mit dem Programm UPDATE und genauso in a99 beim Einspeisen
 mit dem FLEX-Befehl 'update'."

Das wichtige Wort NUR habe ich jetzt eingefügt. Es kann leicht passieren,
daß sonst jemand denkt, jeder Datensatz müsse zwingend einen Prim.Schl. haben.
Zum Beispiel beim Neuaufbau einer Datenbank aus irgendwelchen umgewandelten
Daten brauchen die Programme index und qrix KEINEN Prim.Schl. - sie wissen
gar nichts von seiner Existenz. Auch bei Satzverknüpfungen wird nicht zwingend 
der Prim.schl. zum Verknüpfen benutzt, und genausowenig bei V14-Verknüpfungen.

Falsch wäre auch die Vermutung, der Prim.Schl sei eine bestimmte Kategorie, etwa die #00.
Jedes Feld mit eindeutigem Inhalt kann vielmehr die Rolle übernehmen, es ist
allein eine Sache der Indexparameter. Insbes. die Feldnummer #00 hat NICHT
die Bedeutung "Primärschlüssel", #00 übernimmt nur oft diese Rolle.
Auch die interne Satznummer hat nix zu tun mit dem Prim.Schl. Sie ist zwar
eindeutig, steht aber gar nicht im Datensatz (d.h. hat keine Kategorienummer),
und noch wichtiger: Beim Neuaufbau bleibt sie nicht erhalten. Sie wäre damit
durchaus untauglich für die Rolle des Prim.Schl.

Jetzt aber zu Ihrem speziellen Problem:

> 
> in der ZIEL-datenbank -dcat ist der PS SO definiert:
> #-@
> #t{ "|8" }
> #90 e"[;\031]"
> #901 e"[;\031]"
> #902 e"[;\031]"
> #903 e"[;\031]"
> #+#
> 
Das ist, mit Verlaub, Murks, denn daraus entsteht nur 1 Schlüssel, nicht 4.
Damit jede #90x einen Eintrag erzeugt, muß es so heißen:

> #90 e"[;\031]"
> #901 e"[;\031]" p{ 8 "|8" }
> #902 e"[;\031]" p{ 8 "|8" }
> #903 e"[;\031]" p{ 8 "|8" }

Der Code 8 ist das Trennzeichen zwischen 2 Schlüsseln, die innerhalb desselben
Abschnitts in den Indexparametern erzeugt werden. Deshalb muß dem Steuercode 8
immer ein Indexpräfix folgen, hier zufällig "|8" für Register 8, nicht zu
verwechseln mit dem Steuercode 8. In einem Abschnitt können durchaus mehrere
Schlüssel für verschiedene Register erzeugt werden.

B.E.



Mehr Informationen über die Mailingliste Allegro