TurboPL Referenz

relation Kommando

Top  Previous  Next

Syntax

relation <Relationsdefinition>

Kategorie

Datenbankjobs

Erklärung

Statische Links festlegen, Tabellen virtuelle öffnen und Inklusionen definieren

Das Relationskommando dient der Einrichtung von

virtuellen Tabellen, über die ein zusätzlicher Zugriff auf bereits geöffnete Tabellen möglich wird, und
statischen Links, mit denen die Tabellenverknüpfungen über das ADL-System erweitert oder überschrieben werden können, und
Zwangsverknüpfungen, so dass immer eine Kombination mit der Primärdatei hergestellt wird, auch wenn kein verknüpfter Datensatz vorhanden ist (Erzwungene Bildung des Kreuzproduktes).

Die einzelnen Angaben werden einfach durch Komma getrennt hintereinander geschrieben. Die Länge eines Kommandos ist auf 255 Zeichen beschränkt. Jedes Relationskommando hebt das vorhergehende wieder auf.

Eine Relationsdefinition wird innerhalb von Datenbankjobs und TurboPL-Modulen mit dem Kommando RELATION angegeben. In Datenbankjobs ist dieses Kommando nur im Prolog zulässig. In allen anderen Textbereichen wird die Bearbeitung mit der Meldung "Illegale Operation" abgebrochen. Datenbank-weite Relationsdefinitionen können über den Menüpunkt Tabelle/Verknüpfungen... im Datenmodellfenster angelegt werden.

Virtuelle Öffnung einer bereits geöffneten Tabelle

Form: Tabellenname = Tabellenname

Der Tabellenname links vom Gleichheitszeichen darf nicht mit dem Tabellennamen einer geöffneten Tabelle übereinstimmen. Der Tabellenname rechts vom Gleichheitszeichen muss eine bereits (real oder virtuell) geöffnete Tabelle bezeichnen.

Beispiel

RELATION A1 = ADRESSEN

In der Folge kann auf die virtuell geöffnete Tabelle A1 genauso wie auf real geöffnete Tabelle zugegriffen werden. Es ist allerdings nicht möglich, eine virtuell geöffnete Tabelle zur Primärtabelle zu machen. Die virtuelle Tabelle wird wieder automatisch geschlossen beim

Wechsel der Primärdatei,
Ändern der Relation,
Ende des Datenbankjobs.

Die virtuelle Tabelle übernimmt von ihrem realen Pendant sämtliche Eigenschaften mit Ausnahme der statischen Links.

Durch die Öffnung virtueller Tabellen sind folgende Zusatzmöglichkeiten gegeben:

Relation einer Tabelle zu sich selbst,
Entflechtung von mehreren gleichzeitigen Verknüpfungen zwischen zwei Tabellen.

Es ist erlaubt, eine Tabelle mehrfach an eine andere anzubinden.

Beispiel

Die Tabelle PERSONEN speichert Schauspieler und Regisseure.

Die Struktur der Tabelle FILME verfügt über ein Koppelfeld Regisseur, sowie über ein Relationsfeld Darsteller.

Ist die Primärtabelle FILME, kann mit der oben genannten Konstruktion sowohl auf den jeweiligen Regisseur als auch auf die Darsteller zugegriffen werden (die hier gemeinsam in der Tabelle PERSONEN gespeichert sind). Beispiel für ein Ausgabeformat im Datenbankjob:

$Titel:20 $Regisseur.Vorname+" "+$Regisseur.Name:30 SUB(/$FILME.Darsteller.Vorname:1+"."+$FILME.Darsteller.Name)S:3//

Ausgabe:

Der Clou

George Roy

C.Durning



P. Newman



R.Redford



R.Shaw



R.Walston

Der Blaumilchkanal

Ephraim Kishon

N.Azikiri



S.Friedman



B.Zur

Ist jedoch als Primärdatei PERSONEN.DAT eingestellt, ist der Zugriff nicht mehr so einfach möglich. In diesem Fall wird dem Relationsfeld der Vorrang gegenüber dem Koppelfeld gegeben.

Bei mehreren Relationsfeldern erfolgt die Ankopplung immer über das erste Feld in der Struktur.

Die Lösung erfolgt in diesem Fall über die Verwendung einer virtuellen Tabelle mit der Definition eines statischen Links:

RELATION = REGIE = PERSONEN, $REGIE[Laufende_Nummer] = $FILME[Regisseur]

Ausgabeformat:

Name,Vorname:30! Titel:20 $REGIE.Vorname" "$REGIE.Name/

Ausgabe:

Redford,Robert

Der Clou

George Roy


Der große Gatsby

Francis Coppola...

Newman,Paul

Der Clou

George Roy



Butch Cassady ...

Statische Links

Mit statischen Links kann die Verknüpfung von Tabellen (neu) definiert werden. Statische Links treten dabei an die Stelle von Equate-Joins und sorgen für wesentlich schnellere Zugriffe.

Sie können sämtliche geöffneten Tabellen einschließen. ADL-Verknüpfungen werden durch statische Links nur vorübergehend inaktiviert.

Definierte Links bleiben nur solange aktiv, bis

ein Wechsel der Primärtabelle stattfindet oder
der Link eine Neudefinition erfährt.

In unserem Beispiel soll eine Liste der Regisseure mit den Titeln ihrer Filme ausgegeben werden:

RELATION $PERSONEN[Laufende_Nummer] = $FILME[Regisseur]

Ausgabe:

Coppola, Francis

Der große Gatsby

Kishon, Ephraim

Der Blaumilchkanal

Roy, George

Der Clou ...

Erzwungene Bildung des Kreuzprodukts

Normalerweise werden Datensätze (der Primärtabelle) in Verbindung mit verknüpften Tabellen nur dann ausgegeben, wenn in diesen Dateien passende Einträge vorliegen.

Durch Aufzählung der angekoppelten Tabellen können alle Datensätze mit einem leeren Datensatz verknüpft werden, für die kein passender Eintrag vorliegt. Dadurch gelangen auch diese Datensätze zur Ausgabe.

RELATION $PERSONEN[Laufende_Nummer] = $FILME[Regisseur], FILME

Ausgabeformat:

Name, Vorname:30 Titel

Ausgabe:

Coppola, Francis

Der große Gatsby

Kishon, Ephraim

Der Blaumilchkanal

Newman, Paul


Redford, Robert


Roy, George

Der Clou

Shaw, Robert


Hinweis

Der Einsatz des Relationskommandos sollte fortgeschrittenen Anwendern vorbehalten bleiben.