Freigeben über


Identifikation von Beziehungen

Nachdem Sie Ihre Daten in Tabellen unterteilt haben, benötigen Sie als Nächstes ein Verfahren, mit dessen Hilfe Visual FoxPro diese Daten sinnvoll wieder zusammenführen kann. Das folgende Formular enthält beispielsweise Informationen aus verschiedenen Tabellen.

Das Formular "Auftragseingabe" verwendet Informationen aus verschiedenen Tabellen

Visual FoxPro ist ein relationales Datenbank-Managementsystem. Dies bedeutet, dass Sie gleichartig strukturierte Daten in jeweils eigenen Tabellen speichern. Anschließend definieren Sie Beziehungen zwischen den Tabellen. Diese Beziehungen kann Visual FoxPro verwenden, um auf in der Datenbank gespeicherte, miteinander in Zusammenhang stehende Informationen zuzugreifen.

Angenommen, Sie möchten mit einem Angestellten über einen seiner Aufträge sprechen. Die Telefonnummern der Angestellten sind in der Employee-Tabelle, die Aufträge jedoch in der Orders-Tabelle gespeichert. Wenn Sie Visual FoxPro mitteilen, um welchen Auftrag es sich handelt, kann Visual FoxPro die Telefonnummer anhand der Beziehung zwischen den beiden Tabellen suchen. Dies ist deshalb möglich, weil der Primärschlüssel Employee_id der Employee-Tabelle auch ein Feld in der Orders-Tabelle ist. In der Datenbankterminologie wird das Feld Employee_id in der Orders-Tabelle als Fremdschlüssel bezeichnet, da es auf einen Primärschlüssel einer anderen, "fremden" Tabelle verweist.

Das Feld "Employee_id" dient in der "Employee"-Tabelle als Primärschlüssel und in der "Orders"-Tabelle als Fremdschlüssel

Um also zwischen zwei Tabellen A und B eine Beziehung festzulegen, wird der Primärschlüssel einer Tabelle der anderen Tabelle als Feld hinzugefügt, so dass er in beiden Tabellen angezeigt wird. Aber wie können Sie entscheiden, welchen Primärschlüssel der beiden Tabellen Sie verwenden? Um die Beziehung korrekt festzulegen, müssen Sie sich zunächst über die Art der Beziehung im Klaren sein. Drei Arten von Beziehungen zwischen Tabellen lassen sich unterscheiden:

  • 1:n-Beziehungen
  • m:n-Beziehungen
  • 1:1-Beziehungen

Im weiteren Verlauf dieses Abschnitts wird jede mögliche Beziehung anhand eines Beispiels erläutert. Ferner wird erklärt, wie Tabellen zu gestalten sind, damit Visual FoxPro die Daten korrekt miteinander verknüpfen kann. Zweck der Beispiele ist es, Ihnen zu erläutern, wie Sie Beziehungen zwischen Tabellen festlegen und wie Sie entscheiden können, welche Felder in die Tabellen gehören, um diese Beziehungen zu unterstützen. Die Beispiele sind allgemein gehalten und beschreiben deshalb nicht, wie Sie konkret in Visual FoxPro Beziehungen zwischen Tabellen herstellen.

Beispiel:

Die 1:n-Beziehung ist die am häufigsten auftretende Art von Beziehungen in relationalen Datenbanken. In einer 1:n-Beziehung kann ein Datensatz in Tabelle A mit mehr als einem passenden Datensatz in Tabelle B verknüpft sein. Zu einem Datensatz in Tabelle B kann jedoch höchstens ein passender Datensatz in Tabelle A existieren.

Ein Beispiel für eine 1:n-Beziehung sind die Tabellen für die Kategorien (Category) und die Artikel (Products) in der Datenbank der Tasmanischen Handelsgesellschaft.

Die 1:n-Beziehung zwischen den Tabellen "Category" und "Products"

Um die Beziehung festzulegen, fügen Sie das Feld bzw. die Felder, die den Primärschlüssel auf der "1"-Seite der Beziehung bilden, zur Tabelle auf der "n"-Seite der Beziehung hinzu. Verwenden Sie den Primärschlüssel oder einen potentiellen Indexschlüssel für die "1"-Seite der Beziehung und einen einfachen Indexschlüssel für die "n"-Seite. In diesem Fall fügen Sie das Feld Category_id der Category-Tabelle zur Products-Tabelle hinzu, da eine Kategorie viele Artikel umfasst. Visual FoxPro verwendet die Kategoriebezeichnung (Category_id), um für jeden Artikel die richtige Kategorie zu finden.

Weitere Informationen über das Erstellen von Indexschlüsseln finden Sie in Kapitel 7, Arbeiten mit Tabellen.

Beispiel:

In einer m:n-Beziehung können einem Datensatz aus Tabelle A mehrere passende Datensätze in Tabelle B zugeordnet sein. Gleichzeitig kann ein Datensatz aus Tabelle B mit mehreren passenden Datensätzen in Tabelle A verknüpft sein. Bei dieser Beziehungsart sind Änderungen am Datenbankentwurf notwendig, bevor Sie in Visual FoxPro die Beziehungen korrekt festlegen können.

Um m:n-Beziehungen zwischen Ihren Tabellen zu entdecken, ist es wichtig, sich beide Richtungen der Beziehung anzusehen. Sehen Sie sich z. B. die Beziehung zwischen den Aufträgen und Artikeln der Tasmanischen Handelsgesellschaft an. Ein Auftrag kann mehrere Artikel enthalten. Für jeden Datensatz in der Orders-Tabelle können also mehrere Datensätze in der Products-Tabelle existieren. Das ist aber noch nicht alles. Jeder Artikel kann in vielen verschiedenen Aufträgen enthalten sein. Für jeden Datensatz in der Products-Tabelle können also mehrere Datensätze in der Orders-Tabelle existieren.

Die m:n-Beziehung zwischen den Tabellen "Orders" und "Products"

Die Themen der beiden Tabellen Orders und Products stehen also in einer m:n-Beziehung zueinander. Dies führt jedoch zu Problemen beim Datenbankentwurf. Um dieses Problem zu veranschaulichen, legen Sie beispielsweise die Beziehung zwischen den beiden Tabellen fest, indem Sie das Feld Product_id zur Orders-Tabelle hinzufügen. Um die Bestellung mehrerer Artikel pro Auftrag zu ermöglichen, muss die Orders-Tabelle mehrere Datensätze pro Auftrag enthalten. Die Bestellinformationen jedes Datensatzes eines einzelnen Auftrags würden sich demnach mehrfach wiederholen. Dieser Entwurf ist nicht effizient und kann zu fehlerhaften Daten führen. Dieselben Probleme tauchen auf, wenn das Feld Order_id zur Products-Tabelle hinzugefügt würde, da Sie für jeden Artikel mehrere Datensätze in der Products-Tabelle erhielten. Wie lässt sich dieses Problem lösen?

Die Antwort liegt in dem Erstellen einer dritten Tabelle, in der die m:n-Beziehung in zwei 1:n-Beziehungen aufgeteilt wird. Diese dritte Tabelle wird als Verbindungstabelle bezeichnet, da sie die Verbindung zwischen zwei Tabellen bildet. Sie enthält die Primärschlüssel der beiden anderen Tabellen.

Die Tabelle "Order_Line_Items" erstellt die 1:n-Beziehung zwischen den Tabellen "Orders" und "Products"

Eine Verbindungstabelle kann sich auf die beiden Primärschlüssel der Tabellen, die sie verbindet, beschränken oder aber, wie die Tabelle Order_Line_Items, noch weitere Informationen enthalten.

Jeder Datensatz der Tabelle Order_Line_Items stellt einen Artikel eines Auftrags dar. Der Primärschlüssel der Tabelle Order_Line_Items besteht aus zwei Feldern: den beiden Fremdschlüsseln der Tabellen Orders und Products. Das Feld Order_id kann für sich allein nicht als Primärschlüssel dieser Tabelle verwendet werden, da ein Auftrag viele Auftragszeilen enthalten kann. Die Auftragsnummer wird für jeden Artikel eines Auftrags wiederholt, so dass das Feld keine eindeutigen Werte enthält. Das Feld Product_id kann ebenfalls nicht für sich allein verwendet werden, da ein Artikel in vielen verschiedenen Aufträgen auftauchen kann. Zusammen bilden die beiden Felder in der Verbindungstabelle jedoch immer einen eindeutigen Wert für jeden Datensatz. Die Verbindungstabelle selbst benötigt keinen eigenen Primärschlüssel.

In der Datenbank der Tasmanischen Handelsgesellschaft stehen die beiden Tabellen Orders und Products in keiner direkten Beziehung zueinander. Sie sind jedoch durch die Tabelle Order_Line_Items indirekt aufeinander bezogen. Die m:n-Beziehung zwischen Aufträgen und Artikeln wird in der Datenbank in Form von zwei 1:n-Beziehungen dargestellt:

  • Zwischen den Tabellen Orders und Order_Line_Items besteht eine 1:n-Beziehung. Zwar kann jeder Auftrag mehrere Artikel umfassen, jedoch ist jeder bestellte Artikel nur mit einem einzigen Auftrag verknüpft.
  • Die Tabellen Products und Order_Line_Items haben eine 1:n-Beziehung. Zwar kann jeder Artikel mehrfach bestellt worden sein, jedoch ist jeder einzelne Artikel nur mit einer einzigen Bestellung verknüpft.

Beispiel:

In einer 1:1-Beziehung kann ein Datensatz in Tabelle A nur einen einzigen passenden Datensatz in Tabelle B und ein Datensatz aus der Tabelle B nur einen einzigen passenden Datensatz in Tabelle A besitzen. Diese Beziehungsart ist ungewöhnlich und erfordert unter Umständen einige Änderungen am Datenbankentwurf.

1:1-Beziehungen zwischen Tabellen sind deshalb ungewöhnlich, weil die Informationen der beiden Tabellen oft problemlos in einer Tabelle vereint werden können. Nehmen wir beispielsweise an, Sie erstellen eine Tabelle für Tischtennisspieler (Ping_pong_players), um Informationen über ein Wohltätigkeits-Tischtennisturnier der Tasmanischen Handelsgesellschaft zu speichern. Da alle Tischtennisspieler Angestellte der Tasmanischen Handelsgesellschaft sind, besteht zwischen dieser Tabelle und der Tabelle der Angestellten der Tasmanischen Handelsgesellschaft eine 1:1-Beziehung.

Die 1:1-Beziehung zwischen den Tabellen "Employee" und "Ping_pong_players"

Alle Felder der Tabelle Ping_pong_players könnten in die Tabelle Employee aufgenommen werden. Die Tabelle Ping_pong_players dient jedoch nur zum Speichern der Informationen eines einzelnen Ereignisses. Nach dem Ende des Turniers werden die Informationen aus dieser Tabelle nicht mehr benötigt. Würden Sie die Felder in die Tabelle Employee aufnehmen, blieben in vielen Datensätzen die neuen Felder leer, da nicht alle Angestellten Tischtennis spielen. Daher ist es in diesem Fall angebracht, eine neue Tabelle für die Tischtennisspieler zu erstellen.

Wenn Sie in Ihrer Datenbank die Notwendigkeit für eine 1:1-Beziehung feststellen, sollten Sie überlegen, ob die Informationen nicht in einer Tabelle zusammengefasst werden können. Betrachten Sie beispielsweise die Tabelle Employee. Jeder Angestellte hat einen Vorgesetzen, der wiederum ein Angestellter ist. Sie können also ein Feld mit der Personalnummer des Vorgesetzten hinzufügen. Die Informationen können dann zu einem späteren Zeitpunkt unter Verwendung einer Eigenverknüpfung innerhalb einer Abfrage oder Ansicht zusammengeführt werden. Für die Auflösung dieser 1:1-Beziehung benötigen Sie also keine zusätzliche Tabelle. Falls Sie dies aus bestimmten Gründen nicht wünschen, kann die Beziehung zwischen den beiden Tabellen folgendermaßen festgelegt werden:

  • Wenn die beiden Tabellen dasselbe Thema haben, können Sie die Beziehung wahrscheinlich durch Verwendung des gleichen Primärschlüsselfeldes in beiden Tabellen herstellen.
  • Wenn die beiden Tabellen unterschiedliche Themen und unterschiedliche Primärschlüssel haben, wählen Sie eine der beiden Tabellen und fügen deren Primärschlüsselfeld als Fremdschlüssel in die andere Tabelle ein.

Siehe auch

Festlegung der erforderlichen Felder | Verbesserung des Entwurfs | Organisation von Anforderungen in Tabellen | Analyse von Datenanforderungen | Entwerfen von Datenbanken | Erstellen von Datenbanken | Arbeiten mit Tabellen