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.

153 Gedanken zu „Verknüpfte Tabellen

  1. Hallo Ninox-Team,

    ich habe ein kleines Problem und sehe den Wald vor lauter Bäumen nicht. Ich habe eine Tabelle mit mehreren Elementen, sagen wir Computer 1, Computer 2, etc. Nun habe ich eine weitere Tabelle namens “Software” mit Inhalt S1, S2, S3 usw.. Nun möchte ich die beiden Tabellen so verknüpfen, dass ich bei jedem Computer auswählen kann, welche Software installiert ist, sprich Computer 1 hat S1, S2 und S3. Computer 2 hat S1 und S3.

    Wie gehe ich hier vor?

    Besten Dank im Voraus,.
    Grüße, Florian

    1. Hallo Ninox-Team,

      ich habe das Problem wie euer Beispiel mit Personen, Mitarbeiter und Firma erledigt.
      Wenn es allerdings einen anderen eleganten Weg geben sollte, würde ich mich über eine Rückmeldung freuen.

      Beste Grüße,

      Florian

  2. Hallo fleißiges Ninox Team.

    Ich weiß ja um eure Anforderungsliste. Ist folgendes schon auf dieser Liste?
    Stichwort N:M Verknüpfung. Man hat also zwei “Haupttabellen” und eine “Verknüpfungstabelle” und das stellt sich aufgelöst wie folgt dar: TabH1<1:N1:N>TabH2. Wenn ich in einem Eintrag in TabH1 einen Eintrag von TabV anklicke komme ich zu dem Eintrag in TabV. In vielen Situationen ist dies aber nur eine reine Hilfstabelle. Stichwort TAGs. Wie wäre es mit einer Art Weiterleitung analog zum TriggerScript: ein klick auf die Zeile des Eintrag aus TabV im Eintrag in TabH1 bringt mich direkt auf den in TabV hinterlegten Eintrag in TabH2, zusätzlich wäre natürlich eine Möglichkeit wünschenswert die mich z.B. durch klicken eines Zeichens in der besagten Zeile im Eintrag in TabH1 (wie etwa bei Internet-Adresse) doch zum Eintrag in TabV bringt. Ich freue mich auf eine Antwort.
    MfG schocki

    1. Ja, das haben wir auf unserer Anforderungsliste. Dieser Wunsch wird tatsächlich oft geäußert, ist aber nicht so leicht umsetzbar. Wir arbeiten daran.

      Gruß
      Birger – Ninox Support

  3. Hallo, würde mich freuen, wenn ihr mir weiterhelfen könnt.

    Der Import meiner verknüpften Access DB hat grundsätzlich gut funktioniert.

    Allerdings müsste ich jetzt die Tabellen manuell miteinander verknüpfen. Nun frage ich mich, ob ich die DB bzw den Import nicht so gestalten kann, dass es automatisch verknüpft ist.

    ZB habe ich in der zentralen Tabelle ein Feld MediumID und das entspricht der durchlaufenden Nummer in der Medium Tabelle.
    Wie kann ich das beim Import automatisieren?

    Im Grunde habe ich die gleiche Frage für ein “Choice” Feld mit 5 Optionen. Wie kann ich das beim Import automatisieren?

    Vielen Dank im voraus!

    1. Jawohl, es ist möglich, beim Import die Verknüfungen automatisch zu setzen. Gehen Sie dazu wie folgt vor:
      - Erstellen Sie eine leere Tabelle entsprechend den Spalten in der csv-Datei. Alle Spalten sollten vorhanden sein, nur die “MediumID”-Spalte nicht.
      - Legen Sie eine Verknüpfung zur (schon exixstierenden) Tabelle “Medium” an.
      - Jetzt wählen Sie “Daten importieren” aus dem Zahnradmenü.
      - Alle Spalten sollten automatisch zugeordnet werden, nur die Spalte “MediumID” müssen Sie im Assistenten manuell zuordnen.

      Beim Import in Choice-Felder muss das Auswahl-Feld (und alle möglichen Auswahl-Möglichkeiten) schon existieren. Sie können dann beim Import manuell festelegen, dass in dieses Feld importiert werden soll.

      Gruß
      Birger – Ninox Support

  4. Hallo,

    ich habe eine Frage zur 1:N Beziehung. Ich entwickle derzeit ein Logbuch für Aquarianer. Hierbei gibt es z.B. eine Tabelle für Pflanzen, eine für Händler und eine für Becken. Nun möchte ich Pflanzen zum einen Händlern, zum anderen aber auch Becken zuordnen. Dazu habe ich alle angeschafften Pflanzen angelegt und den Händlern, von denen diese bezogen wurden, zugeordnet. Danach verschwinden aber die Pflanzen aus der Auswahlliste, d.h. wenn ich eine bereits angelegte Pflanzenart bei einem anderen Händler kaufe, kann ich diese nicht mehr zuordnen, sondern muss diese erst als neue Pflanze wieder anlegen. Das ist natürlich suboptimal. Wo liegt mein Gedankenfehler?

    Danke und Gruß
    Jens

    1. Hallo Jens,
      der Fehler liegt in 1:n Beziehung, dort kann ein Händler mehrere Pflanzen haben aber jede Pflanze kann nur von einem Händler kommen. Oder auch umgekehrt.
      In deinem Fall brauchst du eine sogenannte n:m Beziehung in der eine Pflanze von mehreren Händler kommen kann und gleichzeitig ein Händler mehrere Pflanzen verkaufen kann. Dazu legst du eine Zusatztabelle und verknüpfst diese mit beiden anderen Tabellen (Händler und Pflanzen).
      Hier ein Beispiel:

      https://www.dropbox.com/s/v17tiesmmk3j946/Pflanzen.ninox?dl=0

      Die Bedienung solcher n:m Beziehungstabellen ist ein bisschen ungewöhnlich – man muss mehrmals klicken um die Daten einzugeben. Dennoch ist die Umstellung sehr intuitiv und man gewöhnt sich dran.

      Grüße
      Leo

  5. Hallo!

    Ich hoffe Ihr könnt mir weiterhelfen. Ich habe bereits ein paar einfache Tabellen erstellen können. Jetzt aber knabbere ich an einem Problem. Ich möchte gerne Fortbildungen verwalten. Hierfür habe ich eine Tabelle erstellt, mit dem Namen ‘Fortbildungen’ und eine weitere mit dem Namen ‘Kategorien’. Beide Tabellen sind miteinander verknüpft, in Kategorien halte ich fest, welche Fortbildungen es gibt (also Kategorie A=Vortrag, Kategorie B=Seminar usw.). Diese kann ich dann aus meiner Tabelle Fortbildungen aufrufen. Soweit funktioniert auch alles.
    Aber jetzt kommt der Teil, den ich einfach nicht hinbekomme. In einem 5 Jahreszeitraum muss eine bestimmte Anzahl von Punkten erreicht werden und ich würde mir gerne übersichtlich darstellen lassen, wieviele Punkte schon gesammelt wurden in dem Zeitraum und wieviele noch fehlen. Datum der Fortbildung und Anzahl der Punkte für diese Fortbildung werden in der Tabelle ‘Fortbildung’ eingetragen. Ich habe bereits mehrere Varianten versucht, eine extra Tabelle ‘gesammelte Punkte’, welche mir dann die Punkte zusammen addiert zum Beispiel, aber ich bekomme nie das richtige Ergebnis, mir ist einfach nicht klar, wie ich das am besten darstellen kann. Ich hoffe Ihr könnt mir helfen, schonmal vielen Dank!

    Nina

  6. Hallo liebe Ninox Team,

    ich habe eine Tabelle Vertragsdaten, in dieser gibt es die Felder Name, Kürzel ein Auswahlfeld und noch weitere Textfelder. Ich möchte nun, dass die Felder Name und Kürzel automatisch mit einer zweiten Tabelle verknüpft werden, wenn das Auswahlfeld auf Ja gesetzt wird. Wenn ich in die zweite Tabelle gehe, sollen die Daten dort dann automisch vorhanden sein. Geht das und wenn ja, wie muss ich vorgehen?

    Vielen Dank!

    1. Hier ist ein kleines Beispiel. Bitte beachte, dass die Verknüpfung nur gesetzt wird, wenn die Einträge in den Feldern Name und Kürzel genau übereinstimmen.
      Ja/Nein-Verknüpfung
      Birger – Ninox Support

  7. Hallo liebe Nutzer & liebes Team,
    vielleicht kann mir jemand helfen:
    Ich habe eine neue Datenbank angefangen und scheitere bereits am Anfang.
    Ich möchte eine Tabelle „Veranstaltungen“ für Termine mit der Tabelle „Bands“ verbinden. Soweit kein Problem. Doch wie bekomme ich es hin, dass mehrere Bands auf einer Veranstaltung spielen? Brauche ich dafür tatsächlich schon eine Kompositionstabelle? Wie soll ich die aufbauen?

    1. Hallo,
      jawohl, es handelt sich um eine M:N-Beziehung. Eine Band kann auf mehreren Veranstaltungen auftreten, und eine Veranstaltung aus Auftritten mehrere Band bestehen. Hier ist ein kleines Beispiel, wie solch eine Datanbank aussehen kann:

      Birger – Ninox Support

  8. Hallo Ninox Wizards

    Für eine Zeiterfassung habe ich die folgenden drei Tabellen:
    “Zeiterfassung”, “Mitarbeiter” und “Kunden”

    Einem Datensatz der “Zeiterfassung” möchte ich einen “Kunden” (1:N) zufügen
    und mehrere “Mitarbeiter” (M:N –> ??).

    Würde das eine M:N Verknüpfung benötigen?

    Oder gibt es einen besseren Weg?

      1. Hallo Leo
        Die Lösung von Dir ist super für mich! Gibt es eine Möglichkeit, dass in der Tabelle Mitarbeiter ich selbst standardmäßig immer automatisch drin bin?

        Also bei einem neu generierten Datensatz immer standartmässig ein Kontakt mit dabei ist …

        lieber Gruss Gebbo

        1. Hallo Gebbo,
          das geht auch. Angenommen du selbst hast in der Tabelle “Mitarbeiter” die ID “1″. Dann gehst du in der Tabelle “Zeiterfassung” auf “Zahnrädchen”->Felder Bearbeiten… und schreibst ins Feld “Beim neuen Datensatz folgendes Skript ausführen… die Formel:

          let myNR := Nr;
          let NE := (create Einsatz);
          NE.(Zeiterfassung := myNR);
          NE.(Mitarbeiter := 1)

          Grüße
          Leo

          1. Hallo Leo, nochmals ein allgemeine Frage.
            Ich kann jetzt einer Zeiterfassung mehrere Mitarbeiter hinzufügen, mit mir als Standartmitarbeiter automatisch ausgefüllt.
            Ich muss jetzt für jeden Mitarbeiter neue Felder hinzufügen, um die gesamt Arbeitszeit zu berechnen. Es kann sein, dass es für das gleiche Projekt mehrere Mitarbeiter gibt, diese aber verschieden viele Stunden dafür arbeiten.

            Was denkst du, von der Logik her und zu zwecken von späteren Auswertungen, ist es besser die Stunden der Tabelle ‘Mitarbeiter’ oder besser der Tabelle ‘Zeiterfassung’ hinzuzufügen?

            Hier was ich bisher gemacht habe:

            https://www.dropbox.com/s/kgxx8lr0g3p89gy/3_Zeiterfassung_tmp.ninox?dl=0

            Ein extremes Dankeschön für deine Hilfe bis anhin!!

  9. Guten Tag,
    folgende Situation. Es gibt eine Tabelle “Texte” und Tabelle “Schlagwörter” diese sind mittels n:m Beziehung über Tabelle “MULTIPLE TAGS” miteinander verknüpft.
    Wenn ich mich in einem Text befinde, sehe ich alle Schlagwörter die zu diesem Text gehören. Dazu präpariere ich die Tabelle MULTIPLE TAGS entsprechend. Genauso kann ich zu jedem Schlagwort die Texte anschauen. Die Datensätze in der Tabelle Texte bestehen aber aus mehreren Felder. Um alle diese Felder anzuschauen muss ich den Datensatz öffnen. Bei n:m Beziehung verhält sich Ninox aber stufenweise und konsequent :
    wenn ich auf einen Datensatz “Texte” in dem Formular “Schlagwörter” klicke, lande ich erstmal in der Tabelle”MULTIPLE TAGS”, dann muss ich nochmal auf mein Text klicken um den Datensatz zu öffnen. So lange man die Datenbank für sich selbst programmiert und alleine nutzt, kann man damit leben. Wenn man aber unerfahrene Leute ins Team einlädt oder sogar die Datenbank als Leistung verkaufen möchte, ist dieses Verhalten für Endanwender schwierig zu verstehen, einfach ein Klick zu viel. Hier wäre ein Trigger “bei Klick” angebracht in dem man z.B. ein popup Fenster aus der m-Tabelle geöffnet wird, ohne nm Formular zu öffnen.

    Grüße
    Leo

      1. Hallo Birger,
        wir reden aneinander vorbei. Hier ist eine Beispieldatenbank.

        https://www.dropbox.com/s/rckrrg4oza9ydfj/MULTIPLE%20TAGS.ninox?dl=0

        Wenn du in der Tabelle MATERIALIEN bist, siehst du ein Material und dazugehörigen Schlagwörter. Nehmen wir z.B. Zement aus. Dort ist “Putz” als einer der Schlagwörter eingetragen, und ich möchte wissen, was es noch zum “Putz” gehört. Ich klicke auf “Putz” und lande erstmal in der Zwischentabelle (MULTIPLE TAGS). Da die Beziehungen als Komposition eingestellt sind, sehe ich hier nur einen Eintrag (Putz) und muss darauf klicken um weiter zu kommen. Jetzt bin ich in der Tabelle TAGS gelandet und sehe alle Materialien, die zu dem Schlagwort “Putz” gehören. Dort sehe ich noch “Sand” und möchte alles über Sand wissen. Ich klicke auf Sand und lande wieder in der Zwischentabelle, wo ich erneut auf Sand klicken muss um zu den Inhalten zu kommen. As meiner Sicht zwei Klicks zu viel.
        Viel eleganter wäre es, wenn ich beim Klick auf Putz direkt in der Tabelle TAGS lande und von dort aus direkt in der Tabelle Materialien.

        Grüße
        Leo

  10. Hallo Ninox-Team,

    ich habe mir nun eine Datenbank “Kunden” erstellt, die mir als CRM-Tool sehr gute Dienste leistet.

    Ich habe eine Tabelle “Projektliste”, die ich über eine 2. Tabelle “Projektzuordnung” mit der Kundendatei verknüpft habe:
    Projektliste Kunde

    Also eine N:M-Beziehung ähnlich Ihrem Beispiel oben bei
    Person Firma.

    Nun will ich diese Tabelle “Projektzuordnung” natürlich mit den bereits bestehenden Daten aus der “Projektliste” und den verknüpften “Kunden” füllen.
    Als Verknüpfungsfeld steht mir im Moment nur der Kundenname zur Verfügung, der in der Datei “Kunden” und in der “Projektliste” identisch ist.
    Wie gehe ich hier vor? Über die Massendatenänderung oder oder doch eher über die Importfunktion, so dass ich alle vorhandenen Projekte aus der Projektliste in dieser Datei habe? Für Ihre Hilfestellung wäre ich sehr dankbar!
    Viele Grüße
    Wolf

    1. Hallo,
      wenn ich es richtig verstehe, dann kann es für einen Kunden ein oder mehrere Projekte geben und andererseits kann ein Projekt einem oder mehreren Kunden zugeordnet sein. Oder ist es doch so, dass es immer genau einen Kunden pro Projekt gibt? Dann wäre eine M:N-Verknüpfung nicht richtig.

      Schreiben Sie mir doch, dann klären wir das: support@ninoxdb.de
      Birger – Ninox Support

Hinterlasse eine Antwort