TurboDB Engine Dokumentation

Automatic Data Link

Previous  Top  Next

In den allermeisten Fällen sind Tabellenverknüpfungen für alle Abfragen gleich. Z.B. gehören einzelne Posten immer zu einer  Rechnung, Autoren sind immer mit den Büchern verknüpft, die sie geschrieben haben u.s.w. Daher ermöglicht es TurboDB die verschiedenen Arten von Verknüpfungen von einer Tabelle zu anderen Tabellen in der Tabelle selbst zu definieren.

Stellen Sie sich vor, Sie haben eine Rechnungstabelle, die das Rechnungsdatum, die Kundennummer, die Rechnungsnummer und andere rechnungsbezogene Informationen enthält. Die einzelnen Rechnugsposten werden in einer anderen Tabelle eingetragen, die Felder für die Artikelnummer, den Preis, den Gesamtbetrag und andere enthält. Wie verknüpfen Sie den Einzelposten mit der Rechnung deren Bestandteil der Posten ist? Der traditionelle Weg ist es in der Postentabelle ein zusätzliches Feld zu haben, das die Nummer der Rechnung aufnimmt, zu der der Posten gehört. Jede Abfrage, die die Rechnungs-Posten Beziehung berücksichtigt, muss die folgende Bedingung formulieren: ...where "POSTEN.RechnungsNummer" = "RECHNUG.RechnungsNummer"...

Was ist das?

Sie können diesen traditionellen Weg auch mit TurboDB gehen, die bevorzugte Lösung ist ein bisschen anders. Anstatt ein RechnungsNummer Feld in der POSTEN Tabelle zu haben würden Sie lieber einen Zeiger auf die Rechnungstabelle verwenden. Dieser Zeiger wird als Linkfeld bezeichnet. Da TurboDB standardmäßig eine (eindeutige) RecordId in jede neue Tabelle einfügt, speichert das Linkfeld der Postentabelle nur die RecordId der Rechnung zu der der Posten gehört. Da die Definition des Linkfeldes die Information beinhaltet, dass der Inhalt dieser Spalte auf einen Eintrag in der Rechnungstabelle zeigt, weiß die Datenbank über diese Beziehung bescheid und wird dies standardmäßig bei jeder Abfrage berücksichtigen.

Diese Art Tabellen zu verknüpfen hat einige große Vorteile:

Abfragen über verknüpfte Tabellen sind sehr einfach, da das System "weiß" wie die Tabellen miteinander zu verknüpfen sind. Die Abfragen können viel schneller sein, weil eine RecordId nur eine Zahl ist, während Sekundärindexe oftmals wesentlich komplexer sind. Das Ändern von Indexen, Spaltennamen oder Spaltentypen beläßt die Verknüpfung unberührt. Über eine spezielle Link Notation ist es sehr einfach auf den Masterdatensatz zuzugreifen.

Man kann diese Strategie als den objektorientierten Weg betrachten mit Datenbanktabellen zu arbeiten. Sie ist nicht streng konform mit dem relationalem Paradigma, bringt aber das Feeling von Zeigern und Referenzen ins Spiel. Der Rechnungsposten "weiß" zu welcher Rechnung er gehört. Diese Verbindung liegt in der Natur der Sache und wird sich sicher nicht sehr oft ändern.

Ein weiterer Vorteil ist, dass Link- und Relationsfelder dem Anwender nicht nur die rein technischen AutoInc-Werte anzeigen können. Jeder AutoInc-Spalte kann eine Anzeigeinformation bestehend aus Werten anderer Spalten zugeordnet werden. Diese wird von Link und Relationsfeldern anstelle der nummerischen Werte angezeigt. Hier ein Beispiel:

CREATE TABLE DEPARTMENT (Name CHAR(20), Id AUTOINC(Name)

CREATE TABLE EMPLOYEE (LastName CHAR(40), Department LINK(DEPARTMENT))

Die Abfrage

SELECT * FROM EMPLOYEE

liefert eine Liste von Nachnamen und Abteilung-Namen, das der Name der Abteilung als Anzeigeinformation für die AutoInc-Spalte Id definiert ist.

Wie funktioniert es?

Da Linkfelder auf so einfache Weise 1:n Beziehungen (eine Rechnung hat mehrere Posten) einführen, wirft dieses objektorientierte Konzept die Frage nach m:n Beziehungen als eine Liste von Zeigern auf, die von einer Tabelle auf eine andere zeigen. TurboDB Relationsfelder sind die Antwort auf diese Frage. Eine Tabelle, die ein Relaionsfeld enthält verknüpft einen Datensatz mit mehreren Datensätzen der anderen Tabelle und umgekehrt. Um zu dem Beispiel mit Autoren und Büchern zurückzukehren, würde das Einfügen eines Relationsfeldes in die Büchertabelle die Tatsache berücksichtigen, dass ein Buch von mehreren Autoren geschrieben und ein Autor durchaus an mehreren Büchern beteiligt sein kann.

Wie Sie sicher schon annehmen sind Relationsfelder nicht so einfach zu implementieren wie Linkfelder. M:n Beziehungen werden durch eine zusätzliche Zwischen-Tabelle realisiert, die einen Datensatz für jede Verknüpfung zwischen den beiden Tabellen erhält. Das genau ist es was TurboDB macht, wenn Sie ein Relationsfeld in die Buchtabelle einbauen das auf die Autorentabelle zeigt. TurboDB wird eine versteckte Zwischen-Tabelle erzeugen, mit einem Linkfeld auf die Autorentabelle und einem Linkfeld auf die Büchertabelle. Das ist es auch was Sie tun müssten wenn Sie auf traditionelle Weise arbeiten würden. Aber mit TurboDB wird die Zwischen-Tabelle automatisch und transparent erzeugt und gepflegt.

Kompatibilität

Dieses Feature wird nur zum Teil in TurboDB Managed unterstützt. In TurboDB Managed gibt es momentan Link-Spalten, aber keine Relations-Spalten.