4D v16.3

Verknüpfungsarten

Home

 
4D v16.3
Verknüpfungsarten

Verknüpfungsarten  


 

 

Die gängigste Verknüpfungsart geht von der Viele-Tabelle zur Eine-Tabelle —  genannt Viele-zu-Eine. Sie können aber auch Viele-zu-Viele und Eine-zu-Eine Verknüpfungen einrichten. Alle Verknüpfungen können manuell oder automatisch sein.

Verknüpfungen können automatisch oder manuell sein.

Bei einer automatischen Verknüpfung wählt 4D den entsprechenden Datensatz oder die Datensätze, sobald ein Datensatz in einer verknüpften Tabelle aktualisiert wird. Der bzw. die so bestimmten Datensätze lassen sich ansehen, drucken, ändern oder für eine Suche oder Sortierungen nutzen. Es ist keine Programmierung erforderlich.

Bei einer manuellen Verknüpfung kontrollieren Sie, ob 4D den entsprechenden Datensatz oder die Datensätze in den Speicher lädt. Zur Durchführung dieser Kontrolle benutzen Sie Methoden. Weitere Informationen dazu finden Sie im Handbuch 4D Programmiersprache im Kapitel Verknüpfungen.

Eine manuelle Verknüpfung benutzen Sie z.B., um die Leistung spezifischer Anwendungen zu optimieren, bei denen Sie nicht alle entsprechenden Datensätze jedesmal laden wollen. Wenn Ihre Struktur z.B. drei oder mehr Tabellen verknüpft, wollen Sie kontrollieren, wann verknüpfte Datensätze in den Speicher geladen werden. Eine manuelle Verknüpfung benutzen Sie auch, wenn Sie zwei Tabellen mit zwei separaten Verknüpfungen verbinden wollen. Zwischen zwei Tabellen kann nur eine automatische Verknüpfung bestehen. Manuelle Verknüpfungen zwischen zwei Tabellen können beliebig viele existieren.

Erstellen Sie eine Verknüpfung zwischen zwei Tabellen, wird die Tabelle mit dem Primärschlüssel der Verknüpfung Eine-Tabelle und die Tabelle mit dem Fremdschlüssel der Verknüpfung Viele-Tabelle genannt. Die Tabellen werden als Eine-Tabelle und Viele-Tabelle bezeichnet, da ein Datensatz in der Eine-Tabelle mit vielen Datensätzen in der Viele-Tabelle verknüpft ist und viele Datensätze in der Viele-Tabelle mit einem Datensatz in der Eine-Tabelle. Diese Art von Tabellenverknüpfung heißt Viele-zu-Eine Verknüpfung.

Bei der Verknüpfung von Angestellten und Firmen ist die Tabelle [Firma] die Eine-Tabelle und die Tabelle [Angestellte] die Viele-Tabelle. Ein Firmendatensatz ist verknüpft mit mehreren Angestellten, d.h. mit allen Angestellten, die in dieser Firma arbeiten und mehrere Angestellte sind mit einer Firma verknüpft, d.h. mit der Firma, in der sie arbeiten. Es gibt z.B. einen Datensatz für Acme in der Tabelle [Firma] aber viele Datensätze von Angestellten in der Tabelle [Angestellte], die bei Acme angestellt sind.

Die folgende Abbildung zeigt, wie der Firmenname in einem Datensatz der Tabelle [Angestellte] einen Datensatz in der Tabelle [Firma] bestimmt, so dass der Datensatz der Tabelle [Angestellte] die Adresse der Firma anzeigt.

Umgekehrt, wenn in der Tabelle [Firma] ein Datensatz aktuell wird, erstellt 4D eine Auswahl von Datensätzen der Tabelle
[Angestellte] und zeigt diese im Formular. Da die Verknüpfung mehrere Datensätze der anderen Tabelle angibt, können Name und Position vieler Angestellter angezeigt werden. Nur die aktuell im Formular angezeigten Datensätze werden in den Speicher geladen.

Die folgende Abbildung zeigt, wie ein Firmenname in einem Datensatz der Tabelle [Firma] mehrere Datensätze in der Tabelle [Angestellte] bestimmt, so dass der Datensatz der Tabelle [Firma] eine Liste der in der Firma beschäftigten Angestellten anzeigen kann.

Der Unterschied zwischen der Eine-Tabelle und der Viele-Tabelle entspricht genau einer spezifischen Verknüpfung. Eine Tabelle kann in einer Verknüpfung die Eine-Tabelle und in einer anderen die Viele-Tabelle sein. Eine Tabelle in einer Verknüpfung kann nur einen Primärschlüssel, jedoch aber mehrere Fremdschlüssel haben.

Nehmen wir z.B. an, Sie verschicken eine Warenprobe an jeden Mitarbeiter in Ihrer Tabelle [Angestellte]. Sie fügen eine Tabelle [LKZ] mit den Landeskennzahlen und dem Porto für jede Landeskennzahl hinzu. Mit dieser Struktur können Sie für jeden Angestellten ein Adressenetikett drucken, welches bereits das Porto für die Postbeförderung des Paketes enthält. Die folgende Abbildung zeigt die Datenbank mit der Tabelle [LKZ]:

Das Datenfeld mit den Landeskürzeln in der Tabelle [LKZ] ist der Primärschlüssel, d.h. die Tabelle [LKZ] ist die Eine-Tabelle. Das Datenfeld mit den Landeskürzeln in der Tabelle [Firma] ist das verknüpfte Datenfeld. Da es ein Fremdschlüssel ist, kann es nicht-eindeutige Werte enthalten. Das Datenfeld mit den Landeskürzeln wird für nah beieinander liegende Firmen identische Landeskürzel enthalten. Die Tabelle [Firma] ist deshalb die Viele-Tabelle, verknüpft mit der Tabelle [LKZ].

Ob es sich bei einer Tabelle um die Eine-Tabelle oder eine Viele-Tabelle handelt, hängt somit von der Verknüpfung mit der anderen Tabelle ab. Die Tabelle [Firma] ist die Viele-Tabelle in der Verknüpfung mit der Tabelle [LKZ] und die Eine-Tabelle in der Verknüpfung mit der Tabelle [Angestellte].

Eine-zu-Eine-Verknüpfungen werden nur in besonderen Fällen benutzt, da Tabellen, die im Verhältnis Eine-zu-Eine verknüpft sind, auch in der Tabelle selbst kombiniert werden können.

Einige Gründe für Eine-zu-Eine-Verknüpfungen sind:

  • Sie haben in Ihrer Datenbank umfangreiche Datenfelder mit Text, BLOB oder Bild. Solche Felder verlangsamen die Datenbank, sobald ein Datensatz aktualisiert und BLOBs in den Speicher geladen werden. Wenn Sie diese Felder in eine andere Tabelle einfügen, werden sie nur bei Bedarf geladen.
  • Sie haben eine sehr große Anzahl Datenfelder und wollen sie in logische Gruppen aufteilen. Separate Tabellen machen eine Datenbank schneller und leichter einsetzbar.
  • Sie wollen den Zugriff auf bestimmte Datenfelder begrenzen. Wenn Sie einzelne Tabellen benutzen, können Sie für jede Tabelle unterschiedliche Zugriffsrechte vergeben.

In manchen Fällen müssen Sie viele Datensätze in einer Tabelle mit vielen Datensätzen in einer anderen Tabelle verknüpfen. Dies wird als eine Viele-zu-Viele-Verknüpfung bezeichnet.

Ein Beispiel dafür ist eine Datenbank zum Verwalten von Kursen. Angenommen, diese Anwendung enthält die beiden Tabellen [Studenten] und [Kurse]. Ein Student kann sich in viele Kurse einschreiben und ein Kurs kann viele Studenten haben.
Sie wollen sich alle Kurse ansehen, in die sich ein Student eingeschrieben hat, und auch alle Studenten sehen, die sich pro Kurs eingeschrieben haben.

Andere Beispiele für Viele-zu-Viele-Verknüpfungen sind:

  • [Lieferanten] und [Produkte]: Jeder Lieferant liefert viele Produkte und jedes Produkt kann von mehreren Lieferanten geliefert werden.
  • [Mitarbeiter] und [Kostenträger]: Jeder Mitarbeiter arbeitet für viele Kostenträger und für jeden Kostenträger können viele Mitarbeiter tätig sein.
  • [Filme] und [Schauspieler]: Jeder Film beschäftigt mehrere Schauspieler und jeder Schauspieler kann in mehreren Filmen auftreten.

4D kann automatisch Viele-zu-Viele -Verknüpfungen erstellen. Der Schlüssel hierzu ist eine Zwischentabelle, die mit anderen Tabellen verknüpft ist, die Viele-zu-Viele -Verknüpfungen benutzen. Sie erstellen dann Eingabe- und Ausgabeformulare, die alle erforderlichen Erfassungen der Datensätze und die Datenanzeige durchführen.

Die folgende Abbildung zeigt eine Anwendung für Einschreibungen mit drei Tabellen, nämlich [Studenten], [Kurse] und [Verknüpfung]. Diese Datenbankstruktur wird für den gesamten Abschnitt benutzt, um zu zeigen, wie eine automatische Viele-zu-Viele-Verknüpfung abläuft:

Die Tabelle [Studenten] ist eine Eine-Tabelle. Sie enthält einen Datensatz für jeden Studenten, Namen, und Anschrift. Das Datenfeld MatrikelNr bestimmt jeden Studenten eindeutig.
Die Tabelle [Kurse] ist ebenfalls eine Eine-Tabelle. Sie enthält einen Datensatz für jeden Kurs, mit dem Kursnamen und dem Dozenten. Das Datenfeld Kursname bestimmt jeden Kurs eindeutig.
Eine Zwischentabelle, nämlich [Verknüpfung] ist für beide anderen Tabellen die Viele-Tabelle. Sie enthält Datensätze für viele Studenten und für viele Kurse. Formulare dieser Tabelle werden für die Eingabe von Daten in beide anderen Tabellen benutzt und für die Anzeige von Informationen in jeder der anderen Tabellen.
Mit Hilfe der drei Tabellen werden die Daten effizient gespeichert. Der komplette Datensatz eines Studenten wird nur einmal gespeichert. Zu jedem Kurs gehört ein Datensatz, nur einmal gespeichert. Die Datensätze, die Studenten mit Kursen verknüpfen, werden für jede Einschreibung einmal gespeichert. Sämtliche Informationen stehen aber in jeder beliebigen Zusammenstellung zur Verfügung.

Für Eingabe und Anzeigen von Informationen der beiden anderen Tabellen benutzen Sie die Zwischentabelle - in diesem Beispiel die Tabelle [Verknüpfung]. Jeder Datensatz, den Sie in die Tabelle [Verknüpfung] eingeben, ist mit den beiden anderen Tabellen verknüpft, nämlich mit einem Studenten und einem Kurs. Die Datensätze der Tabelle [Verknüpfung] enthalten nur die beiden Teilinformationen, welche die Verknüpfung darstellen: Die MatrikelNr des Studenten und den Kursnamen.
Hier sehen Sie ein Beispiel für die Eingabe eines neuen Datensatzes in die Tabelle [Verknüpfung]:

Dieser Datensatz zeigt den Studenten Bernhard Winkler, eingeschrieben in einen Datenbankkurs. Dieser Datensatz verbindet direkt die Informationen der anderen beiden Tabellen.

Ein ähnlicher Datensatz besteht für jeden Kurs, in den sich der Student eingeschrieben hat. Nur die Datenfelder mit der MatrikelNr und dem Kursnamen sind tatsächlich in der Tabelle [Verknüpfung] gespeichert. Jeder Datensatz katalogisiert einen einzelnen Studenten in einem einzelnen Kurs.

Hinweis: Wenn ein Datensatz in die Tabelle [Verknüpfung] eingegeben wird, so als wenn Sie einen Datensatz erstellen, wird hierdurch automatisch eine Auswahl von Datensätzen in den verknüpften Tabellen erstellt. Die Auswahl besteht aus den entsprechenden Datensätzen für den Studenten und den Kurs. Wenn Sie zu einer dieser Tabellen umschalten, wird nur ein einzelner Datensatz angezeigt. Um alle Datensätze anzuzeigen, wählen Sie im Menü Datensätze den Befehl Alle anzeigen.

Die folgende Abbildung zeigt das Eingabeformular für diesen Datensatz. Beachten Sie, dass es Datenfelder der Tabelle [Studenten] und der Tabelle [Kurse] enthält.

Sie geben nur in die Datenfelder MatrikelNr und Kursname Daten ein. Wenn Sie eine MatrikelNr eingeben, findet 4D die Informationen über den Studenten in der verknüpften Tabelle [Studenten] und zeigt diese in den Datenfeldern Vorname, Name und Anschrift. Genauso, wenn Sie einen Kursnamen eingeben, findet 4D die Kursinformation in der Tabelle [Kurse] und zeigt diese im Eingabeformular an.

Sie können die Informationen aus diesen drei Tabellen in Unterformularen anzeigen. Im Datensatz für den Studenten zeigen Sie alle Kurse an, in die der Student sich eingeschrieben hat. Im Kursdatensatz zeigen Sie alle Studenten an, die sich in einen Kurs eingeschrieben haben.

Um in einem Studentendatensatz die Kurse anzuzeigen, benutzen Sie ein Unterformular. Weitere Informationen dazu finden Sie im Abschnitt Unterformular erstellen.

Der oben abgebildete Datensatz ist in der Tabelle [Studenten]. Er zeigt im oberen Teil die Informationen über den Studenten. Die Informationen über die beiden Kurse, in die er sich eingeschrieben hat, stammen aus der verknüpften Tabelle, welche die Informationen über die Einschreibung enthält.

Beachten Sie, dass dieses Unterformular für die Tabelle [Verknüpfung] gilt, nicht für die Tabelle [Kurse]. Die verknüpfte Tabelle enthält die Datensätze, welche den Datensatz über den Studenten mit den Kurs-Datensätzen verknüpft. Das Unterformular enthält das Datenfeld für den Kursnamen aus der Tabelle [Kurse]. Durch die Verknüpfung zwischen der verknüpften Tabelle und der Tabelle [Kurse] kann 4D automatisch den korrekten Kursnamen anzeigen.

Hier sehen Sie einen Datensatz mit den in einen Kurs eingeschriebenen Studenten:


Es handelt sich um einen Datensatz aus der Tabelle [Kurse]. Er zeigt die Informationen zu dem Kurs und in einer Liste die für diesen Kurs eingeschriebenen Studenten. Die Informationen zu den Studenten stammen ebenfalls aus der verknüpften Tabelle. Diese Tabelle enthält die Datensätze, welche die Kurse mit den in diese Kurse eingeschriebenen Studenten verknüpft.

Im obigen Beispiel für Unterformulare können Sie in jedes der Datenfelder Datensätze eingeben. Wenn Sie z.B. in einen Kursdatensatz einen neuen Studenten eingeben wollen, setzen Sie den Tabulator auf den letzten in dem Unterformular gezeigten Studentendatensatz und drücken unter Windows die Tastenkombination Strg+Shift+/, auf Mac OS Befehl+Shift+/, um einen neuen Datensatz zu erstellen (Sie können diese Tastenkombination in den Datenbank-Eigenschaften ändern, siehe ). Wenn Sie den passenden Kursnamen eingeben, werden die weiteren Informationen in dem Datensatz erstellt.

Die Verknüpfungen in einer Datenbank spielen eine wichtige Rolle für Operationen in der Datenbank. Sie steuern den Informationsfluss zwischen den Tabellen.

Wenn bei einer automatischen Verknüpfung ein Datensatz von der Festplatte in ein Eingabeformular geladen wird, wird der entsprechende Datensatz oder die Datensätze aus der verknüpften Tabelle ausgewählt. Wenn eine Verknüpfung aus einer verknüpften Tabelle nur einen Datensatz auswählt, wird dieser Datensatz von der Festplatte geladen. Wenn eine Verknüpfung aus einer verknüpften Tabelle mehr als einen Datensatz auswählt, wird für diese Tabelle eine neue aktuelle Auswahl erstellt und der erste Datensatz dieser aktuellen Auswahl wird von der Festplatte geladen. Der gerade geladene Datensatz wird als aktueller Datensatz dieser Tabelle bezeichnet.

In den Beispielen dieses Kapitels wurden die Verknüpfungen zwischen nicht mehr als drei Tabellen erstellt. In der Praxis bestehen Verknüpfungen oftmals zwischen mehreren Tabellen und werden, wie in einer Kette, alle nacheinander aktiviert. Jedesmal, wenn eine Verknüpfung aktiviert wird, erstellt 4D eine Auswahl von Datensätzen in der verknüpften Tabelle und lädt einen Datensatz. Dieser Datensatz wird für die Tabelle der aktuelle Datensatz und – falls für diese Tabelle eine automatische Verknüpfung besteht – erstellt 4D eine Auswahl und lädt einen aktuellen Datensatz in die nächste verknüpfte Tabelle in der Kette usw.

Wurden die Tabellenverknüpfungen nicht korrekt erstellt, kann der Informationsfluss durcheinander geraten oder abbrechen. Im folgenden sehen Sie Verknüpfungsstrukturen, die Sie vermeiden müssen.

Bei einer rekursiven Verknüpfung sind die Verknüpfungen so angelegt, dass sich die Übertragung von Informationen in einer Schleife totläuft. Die folgende Abbildung zeigt eine rekursive Verknüpfung, bei der die Tabelle [Angestellte] mit der Tabelle [Firma] verknüpft ist, die mit der Tabelle [Versicherung] verknüpft ist, von der eine Verknüpfung zurück zur Tabelle [Angestellte] geht.

 

Sobald ein Datensatz in die Tabelle [Angestellte] geladen wird, lädt 4D den verknüpften Datensatz aus der Tabelle [Firma]. Dieser wird der aktuelle Datensatz für die Tabelle [Firma], der als Folge den verknüpften Datensatz Versicherung aus der Tabelle [Versicherung] lädt.

Falls die Tabellen-Verknüpfungen eine Fortsetzung zuließen, würden die mit dieser Versicherung verknüpften Datensätze, d.h. alle Angestellten, die bei dieser Firma versichert sind, in der Tabelle [Angestellte] ausgewählt werden. Der erste Datensatz dieser Auswahl würde zum aktuellen Datensatz werden. Beachten Sie, dass dieser aktuelle Datensatz nicht der gleiche ist, wie der aktuelle Datensatz, bei dem dieser Ablauf gestartet ist. In dieser Situation hat 4D keine Möglichkeit, festzustellen, welcher Datensatz tatsächlich der aktuelle Datensatz ist.

Findet 4D diese Art rekursiver Verknüpfung, werden die Tabellenverknüpfungen an der letzten Tabelle der Kette gestoppt. Bei diesem Beispiel wird die Verknüpfung zwischen der Tabelle [Versicherung] und der Tabelle [Angestellte] nicht ausgeführt.

Ein ähnlicher Konflikt zwischen aktuellen Datensätzen entsteht, wenn mehr als eine Verbindung zur gleichen Tabelle besteht.
Da Sie nicht gleichzeitig mehr als einen aktuellen Datensatz haben können, können Sie eine automatische Tabellen-Verknüpfung, in der zwei oder mehr Tabellen mit der gleichen Tabelle verknüpft sind, nicht verwalten.
Die folgende Abbildung zeigt eine Datenbankstruktur, in der eine Tabelle und eine ihr zugeordnete Tabelle mit der gleichen Tabelle verknüpft sind

Gleichzeitig besteht aber eine Verknüpfung zwischen der Tabelle [Kinder] und der Tabelle [Versicherung]. Dies bedeutet, dass ein weiterer verknüpfter Datensatz in der Tabelle [Versicherung] geladen wird, der auf dem aktuellen Datensatz, dem ersten Datensatz in der Tabelle [Kinder] basiert. Wenn die Versicherung des Kindes mit der Versicherung der Eltern nicht übereinstimmt, führt diese Verknüpfungsstruktur zu Problemen.
Bei diesem Beispiel stoppt 4D den weiteren Ablauf der Verknüpfungen nicht. Es werden beide Verknüpfungen durchgeführt, aber nicht gleichzeitig. Wenn Sie diese Art von Struktur benutzen wollen, müssen Sie die Tabellenverknüpfungen manuell aktivieren und die Befehle der 4D Programmiersprache benutzen.

Ein weiteres Beispiel für eine relationale Struktur, die von automatischen Verknüpfungen nicht durchgeführt werden kann, ist eine Struktur, in der eine Tabelle mehr als eine Verknüpfung zu einer anderen Tabelle hat. Jedesmal, wenn der Benutzer ein verknüpftes Datenfeld in der einen Tabelle ändert, kann der aktuelle Datensatz in der anderen Tabelle wechseln. In dieser Situation lässt sich nicht sagen, welche Verknüpfung aktiviert werden soll.

Da es in einer Tabelle nur einen aktuellen Datensatz gibt, werden die Verknüpfungen nicht für alle Datensätze einer Auswahl hergestellt. Nehmen wir als Beispiel die Datenbank Rechnungen mit folgender Struktur:

Wenn ein Datensatz in der Tabelle [Rechnungen] benutzt wird, wird in der Tabelle [Rechnungszeilen], die alle Zeilen für diese Rechnung enthält, eine Auswahl von Datensätzen erstellt. Der entsprechende Datensatz in der Tabelle [Artikel] wird jedoch nur für die erste Angabe in der Tabelle [Rechnungszeilen] ausgewählt. Die Auswahl der Tabelle [Artikel] enthält nicht die Informationen über alle Artikel der Rechnung, sondern nur die erste Angabe.
Wenn Sie jedoch [Rechnungszeilen] in ein Unterformular von [Rechnungen] bringen, ruft 4D jede Rechnungszeile einmal auf und aktiviert die Verknüpfung für jede von ihnen.

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Datenbankstruktur erstellen

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Designmodus ( 4D v16)
4D Designmodus ( 4D v16.1)
4D Designmodus ( 4D v16.3)