Verknüpfte Tabellen

Tabellenverknüpfungen – auch Beziehungen oder Relationen genannt – sind eine der wichtigsten Funktionen von Ninox. Dass Sie Tabellen in Beziehung zueinander setzen können, unterscheidet Ninox von vielen anderen Apps, die lediglich die Verwaltung simpler Listen ermöglichen. Zudem sind Relationen ein wesentlicher Unterschied von echten Datenbanken zu Tabellenkalkulationsprogrammen.

Wenn Sie bisher nur wenig Erfahrung mit Datenbanksystemen gesammelt haben, sollten Sie diesen Abschnitt lesen, um zu erfahren welche unterschiedlichen Beziehungstypen es gibt und wie Sie diese am Besten einsetzen.

Grundlagen: Die 1:N-Beziehung

Ninox unterstützt – wie die meisten relationalen Datenbanksysteme – als Grundbaustein sogenannte 1:N-Beziehungen (lies: Eins zu N). Das bedeutet, dass Sie mit dieser Beziehung einem einzelnen Datensatz aus einer Tabelle mehrere Datensätze aus einer anderen zuordnen können.

relations_1N

Ein Beispiel dafür sind Kunden und Rechnungen. Zu einem Kunden können Sie beliebig viele Rechnungen zuordnen. Zu einer Rechnung können Sie aber nur einen Kunden festlegen.

Diese grundlegende Beziehung definieren Sie, indem Sie in der Tabelle Rechnung eine Verknüpfung zur Tabelle Kunde erstellen – die Rechnung verweist auf einen Kunden.

Wenn Sie nun die Formularansichten für Rechnung und Kunde öffnen, sehen Sie, dass im Rechnungsformular ein einzelnes Feld zur Aufnahme des Kunden eingeblendet wird. Im Kundenformular hingegen wird eine eingebettete Tabelle aller zugeordneten Rechnungen dargestellt.

Untertabellen: Die Kompositionsbeziehung

Eine besondere Form der 1:N-Beziehung ist die Komposition. Komposition bedeutet in etwa “besteht aus”. Ein gutes Beispiel hierfür sind Rechnungspositionen. Eine Rechnung besteht aus mehreren Positionen. Wenn die Rechnung gelöscht wird, sind auch die Positionen hinfällig.

relations_composition

Sie können eine Tabellenverknüpfung (auch nachträglich) als Kompositionsbeziehung markieren, indem Sie bei den Feldeigenschaften der Verknüpfung die erweiterten Optionen einblenden und “Komposition” mit “Ja” aktivieren.

Dies hat folgende Auswirkungen:

  • Im Datenmodell wird die Tabelle als Untertabelle der verknüpften Tabelle (Obertabelle) angezeigt, nämlich verschachtelt.
  • Auf der Startseite der Datenbank ist die Untertabelle nicht mehr zu sehen.
  • Beim Löschen eines Datensatzes in der Obertabelle werden alle verknüpften Datensätze der Untertabelle entfernt.
  • In der Formulardarstellung der Obertabelle fehlt die Option “Suchen und hinzufügen” (Lupensymbol) an der Untertabelle.
  • In der Formulardarstellung der Untertabelle fehlt die Option “Verknüpfung aufheben”.

Untertabellen eignen sich gut für Dinge, die fest miteinander verbunden sind; um einige Beispiele zu nennen:

  • Rechnungspositionen gehören unabdingbar zu einer Rechnung.
  • Telefonnummern sind fest mit einem Kontakt verbunden. Wird der Kontakt gelöscht, sollen auch die Telefonnumern entfernt werden – ohne die Kontaktinformation sind sie nicht nützlich.

Gegenbeispiele:

  • Die Mitarbeiter einer Firma sollten nicht als Untertabelle realisiert werden, da sie z. B. die Firma wechseln könnten bzw. unabhängig von der Firma existieren.
  • Rechnungen für einen Kunden
  • Rechnungspositionen sind zwar sinnvollerweise eine Untertabelle einer Rechnung, sollten aber zum Artikel eine ganz normale Beziehung haben.

Beziehungstabellen: die N:M-Beziehung

Manchmal sind 1:N-Beziehungen bzw. Kompositionen nicht ausreichend, um einen Sachverhalt darzustellen. Wie die meisten relationalen Datenbanksysteme unterstützt auch Ninox nicht direkt N:M-Beziehungen. Reine N:M-Beziehungen sind allerdings auch nur in Ausnahmefällen sinnvoll; häufig sollen Beziehungen nämlich noch weiter qualifiziert, also mit weiteren Daten angereichert werden.

relations_NM

Ein Beispiel: In einer Tabelle Firma werden Firmen erfasst. Eine weitere Tabelle Person erfasst Kontkatdaten von Personen. Nun soll zugeordnet werden, welche Person welchen Arbeitgeber hat. Die einfachste Modellierung wäre eine Verknüpfung von Person zu Firma. Wenn Sie allerdings berücksichtigen wollen, dass eine Person auch mehrere Arbeitgeber hat oder diese über die Zeit wechselt, ist dieses Modell nicht hinreichend.

Stattdessen benötigen Sie eine dritte Tabelle, zum Beispiel “Mitarbeiter”. In der Tabelle Mitarbeiter definieren Sie eine Verknüpfung zur Firma und eine weitere zur Person. Beide Beziehungen sollten als Komposition markiert werden, denn wenn die Firma gelöscht wird, hat Sie auch keine Mitarbeiter mehr. Wenn eine Person gelöscht wird, ist diese ebenfalls kein Mitarbeiter mehr.

Hinweise:

  • Obwohl für Mitarbeiter Kompositionsbeziehungen definiert wurden, wird die Tabelle nicht als Untertabelle dargestellt. Offensichtlich kann Mitarbeiter nicht Untertabelle von zwei verschiedenen Obertabellen sein.
  • Beachten Sie die Auswirkungen der Kompositionsbeziehungen auf das Löschen von Datensätzen: Wird eine Person gelöscht, so wird auch der Mitarbeiter gelöscht, nicht aber die Firma. Wird eine Firma gelöscht, werden alle ihre Mitarbeiter ebenfalls entfernt. Allerdings bleiben die Personen unberührt.

Die Tabelle Mitarbeiter ist eine sogenannte Beziehungstabelle, da Sie im Wesentlichen die Beziehung von Personen zu Firmen modelliert. Neben diesem Hauptzweck können Sie die Tabelle nun aber auch nutzen, um die Beziehung um hilfreiche Daten anzureichern. Beispiele wären in diesem Fall Felder für das Eintritts- und Austrittsdatum oder für das Gehalt. In diesem Sinne steht die Tabelle Mitarbeiter also für das Arbeitsverhältnis zwischen Person und Firma oder gar für den Arbeitsvertrag.

Beziehungsgeflechte

Die drei vorgestellten Grundtypen von Beziehungen lassen sich beliebig erweitern. So gibt es keine Einschränkung, auch höherwertige Beziehungen – zum Beispiel zwischen drei Tabellen – zu erstellen.

Hilfreich kann sein, wenn Sie sich beim Design Ihrer Datenbank zunächst eine Skizze auf Papier erstellen.

Malen Sie zunächst alle Objekte, die Sie verwalten wollen, als Kästen auf. Jeder Kasten steht für eine Tabelle. Im zweiten Schritt überlegen Sie, welche Beziehungen zwischen diesen Objekten bestehen. 1:N-Beziehungen können Sie einfach als Pfeil eintragen. Wenn das nicht ausreicht, müssen Sie einen weiteren Kasten für die Beziehungstabelle einfügen.

Achten Sie auch darauf, dass Sie nicht redundante (überflüssige) Beziehungen erstellen: Folgen Sie den Pfeilen: Wenn Sie von einem Kasten A auf zwei unterschiedliche Wege zu einem anderen Kasten B gelangen können, sollten Sie überlegen, ob die beiden Pfade tatsächlich verschiedene Sachverhalte darstellen oder ob Sie hier vereinfachen können.

Zu guter Letzt noch ein Tipp: Versuchen Sie nicht, mit Ihrem Datenmodell alle Eventualitäten zu erschlagen. Manchmal ist es besser, ein einfaches Modell zu verwenden und die ggf. wenigen Ausnahmen durch Kommentare oder andere Hilfsmittel zu kennzeichnen. KISS – Keep It Simple, Stupid.

161 Gedanken zu „Verknüpfte Tabellen

  1. Hi, I am really confused with linking tables. I am using data from an old Access database. I have a table of Candidates and a table of Comments, the comments have a field called CandidateID which matches the field CandidateID on the Candidates table (so, a Candidate can have multiple comments). How do I get the right Comments to show on the Candidate page when the CandidateID is the same on both tables please? I’m assuming it’s using “select… where…” but I don’t understand how to write it. Thank you!

  2. Hallo Ninox-Support,

    kann ich mit Ninox zwei Tabellen so verknüpfen, dass wenn ich in Tabelle 2 (z.B. Rechnung) eine Verknüpfung zu Tabelle 1 (z.B. Kunden) erstelle, sich mehrere Felder automatisch füllen? Und zwar so, dass ich sie gegebenfalls für diese eine Rechnung überschreiben kann, ohne den Kundenstamm in Tabelle 1 zu ändern?

    Wenn ich beim Schreiben von Rechnungen den Kundenstamm in Tabelle 1 ändere, dann wirkt sich das auch auf alle alten Rechnungen aus. Das sollte nicht so sein. Ich weiß, dass Ninox kein Buchhaltungssystem ist. Wäre trotzdem toll, wenn das ginge.

    Hintergrund: Wir wollen Skonto einräumen, das für einen einzelnen Auftrag geändert werden kann. Ich kann es natürlich so einrichten, dass Skonto nicht im Kundenstamm (Tabelle 1) hinterlegt wird, doch dann wird es im Auftrag wahrscheinlich oft vergessen.

    Vielen Dank,
    Wiebke

    1. Hallo,

      ich glaube, ich kann das über eine Untertabelle mit Kompositionsbeziehung lösen. So wie bei Rechnungspositionen. Wie gehe ich da Schritt für Schritt vor? Die Erklärung auf dieser Seite reicht mir nicht, um eine solche Untertabelle neu anzulegen. Für die Rechnungspositionen habe ich eine Vorlage benutzt, ich schaffe es aber nicht, mir da die Einrichtung abzuschauen. Gibt es eine ausführliche Anleitung dafür?

      Vielen Dnak,
      Wiebke

  3. Hallo Zusammen,

    Hauptanliegen von Ninox ist es für mich eine Kundendatenbank zu erstellen.

    Nun habe ich in Tabellen A alle Kunden importiert. In Tabelle B alle Vertragsdaten.

    Jetzt würde ich Gerne Tabelle B als Untertabelle von Tabelle A einstellen, jedoch so, dass Ninox automatisch die Vertragsdaten zu dem entsprechenden Kunden verknüpft. Normalerweise dürfte dies doch in einem Datenbankprogramm über eine fest zu bestimmende ID (z.B. Kundennummer) möglich sein ?

    Bitte dringend um Hilfe

    Vielen Dank!

    Beste Grüße

    Alexander

  4. Hallo Ninox-Team,

    ich arbeite nun schon seit einiger Zeit mit Eurem genialen Tool und bin begeistert.

    Nun habe ich eine kleine Erweiterung und bin nicht sicher, wie ich hier zum Erfolg komme (hab schon hin und her probiert, kam aber nicht weiter)
    Ich habe eine Untertabelle Produktbereiche, die ich unter dem Kunden angelegt habe und auch in der Formularansicht anzeige.
    Eine weitere Untertabelle ist „Vertriebsaktionen“, in denen z.B. die Besuche zum Kunden erfasst werden.
    Nun würde ich gerne die Untertabelle „Produktbereiche“ auch zusätzlich in den „Vertriebsaktionen“ anzeigen lassen und ggf. auch von dort aus editieren können.
    Geht das? Wenn ja wie?

    Danke schon mal und viele Grüße
    Wolf

    1. Mit einer Formel können Sie sich die Einträge aus der Tabelle “Produktbereiche” im “Vertriebsaktionen”-Formular anzeigen lassen. Editieren können Sie an dieser Stelle nicht. Die Formel zur Anzeige der Elemente könnte z.B. so lauten:
      –––
      var myX := "";
      for p in Kunden.Produktbereiche do
      myX := myX + p.Bereich + " (seit " + format(p.Seit, "YYYY") + ")
      "
      end;
      replace(myX, ",", "")
      –––

      Birger – Ninox Support

Hinterlasse eine Antwort