Verknuepfungen

Aus Limbas Wiki

Wechseln zu: Navigation, Suche

<-- zurück zu Admin-Dokumentation / <-- zurück zur Hauptseite


Einführung

Eine Verknüpfung ermöglicht es, Datensätze zweier Tabellen miteinander zu verknüpfen.

Limbas legt für 1:n und m:n Verknüpfungen immer eine zusätzliche interne Verknüpfungstabelle an, dessen Name bei den Tabelleneinstellungen ([admin]->[Tabellen]) im Feld "Zusatz" angezeigt wird. Zusätzlich werden in dieser Tabelle Statusinformationen (erstellt von wem und wann) gespeichert.

Verknüpfung erstellen

Eine Verknüpfung erzeugt man durch hinzufügen eines Feldes des Typs "Verknüpfung 1:n" oder "Verknüpfung m:n" in der gewünschten Tabelle.

Verknüpfung Abb.1.png

Zum erstellen einer 1:1 Verknüpfung muss bei der Erstellung einer Tabelle die zu verknüpfende Tabelle ausgewählt werden.

Über den Verknüpfungs-Editor Verknuepfungseditor.png ([Admin]->beliebige Tabelle) kann man die Tabelle auswählen, die verknüpft werden soll.

Der Inhalt des neuen Feldes mit dem Typ "Verknüpfung 1:n" oder "Verknüpfung m:n" ist im Hintergrund eine numerische Zahl, welche die Anzahl der momentanen Verknüpfungen des jeweiligen Datensatzes beinhaltet. Der Inhalt wird bei Änderungen der Verknüpfung (hinzufügen oder entfernen) über einen Datenbanktrigger aktualisiert. Dieses Verfahren hat den Vorteil, dass die Darstellung in der Tabellenliste nicht jede Verknüpfung einzeln auflösen muß, sondern direkt die Anzahl der Verknüpfungen anzeigen kann und somit deutlich schneller ist. Eine mögliche Inkonsistenz über die Zeit kann über die Systemtools händisch erneuert werden.

Verknüpfung administrieren

Mittels drei Reitern im Verknüpfungseditor Verknuepfungseditor.png ([Admin]->beliebige Tabelle) können weitere Einstellungen für die Verknüpfung vorgenommen werden.

Allgemein

Verknüpfung Abb.2.png
  Abb.: Verknüpfungseditor

Verknüpft

Aus den Tabellenfeldern der verknüpften Tabelle ist eines auszuwählen, welches in der Bearbeitungs- und Detailansicht den verknüpften Datensatz darstellt. Sinnvollerweise sollte hier ein Feld mit aussagekräftigen Inhalten gewählt werden. Das Feld hat keinen Einfluss auf die echte Verknüpfung und kann jederzeit geändert werden.

Durchsucht

Aus den Tabellenfeldern der verknüpften Tabelle können beliebig viele Felder ausgewählt werden, deren Inhalte überprüft werden, wenn in der Tabelle nach Datensätzen gesucht wird.

Verknupfungen Abb7.png
  Abb.: Es kann nach dem Vornamen gesucht werden, obwohl nur der Nachname angezeigt wird

Suchergebnis

Jeder Benutzer kann individuell aus den Tabellenfeldern der verknüpften Tabelle beliebig viele Felder auswählen, die in der Bearbeitungs- und Detailansicht der eigentlichen Tabelle angezeigt werden. Die hier vorgenommene Einstellung wird als Default verwendet.

Verknupfungen Abb6.png
  Abb.: Es werden Name und Vorname angezeigt

Angezeigt

Es kann ausgewählt werden, welche Felder der verknüpften Tabelle bei der Schnellsuche angezeigt werden. Die Schnellsuche ist nur möglich, falls bei der Tabellenfeld-Einstellung für die Verknüpfung die ajaxsuche aktiviert ist.

Verknupfungen Abb8.png
  Abb.: Bei der Ajaxsuche werden Name und Vorname angezeigt

Trennzeichen

Der Benutzer hat die Möglichkeit, 2 Trennzeichen anzugeben:

Verknüpfung Abb.6.png
  Abb.: Das erste Trennzeichen trennt die Werte, die bei der Schnellsuche erscheinen.

Verknüpfung Abb.7.png
  Abb.: Das zweite Trennzeichen trennt die Werte, die in der Tabellenansicht angezeigt werden.

Referentielle Integrität

Die referentielle Integrität (auch Beziehungsintegrität) besagt, dass Attributwerte eines Fremdschlüssels auch als Attributwert des Primärschlüssels vorhanden sein müssen. Ist eine referentielle Integrität ausgewählt wird in der Datenbank ein entsprechender "Foreign Key" erstellt (Siehe Constraints).

Verknüpfungsparametrisierung

Über die Verknüpfungsparametrisierung ist es dem Benutzer möglich, zu Verknüpfungen zusätzlich Inhalte zu speichern. Nach Aktivierung der Funktion (Häkchen gesetzt) und einem reset, können in der automatisch veröffentlichten Tabelle "ursprüngl. Tabellenname_params" neue Felder angelegt werden. Die Feldtypen hierfür sind jedoch begrenzt.

Die Werte sind in dieser Limbas-Version vorerst noch nicht exportierbar und stehen noch nicht über die SOAP-Schnittstelle zur Verfügung.

Example:

Angenommen es existiert eine Tabelle Projekt und eine Tabelle Mitarbeiter. Ein Projekt besteht aus mehreren Mitarbeitern, ein Mitarbeiter kann jedoch auch in mehreren Projekten mitarbeiten. Man möchte nun die Funktion des Mitarbeiters in dem jeweiligen Projekt speichern. Dies wird ermöglicht durch die Verknüpfungsparametrisierung:

Nach der Aktivierung der Verknüpfungsparametrisierung und einem reset wird die Verknüpfungstabelle durch Limbas automatisch veröffentlicht und ist unter "Mitarbeiter_params" zu erreichen (Abb. 1-2).

Zuerst muss ein neues Feld in der Tabelle Mitarbeiter_params erzeugt werden (Abb. 3).

Dieses Feld kann in der Detailansicht eines Projektes bei den Mitarbeitern aktiviert und bearbeitet werden (Abb. 4).

Somit kann der Mitarbeiter "Sepp Unterseer" sowohl in Projekt 1 der Projektleiter, als auch in Projekt 2 der Mitarbeiter sein (Abb. 5-6).

Sieht man sich den Mitarbeiter in der Detailansicht an, ist natürlich keine Funktion gespeichert, da seine Funktion ja abhängig von dem jeweiligen Projekt ist.

Verknüpfung Abb.8.png
  Abb.: 1

Verknüpfung Abb.9.png
  Abb.: 2

Verknupfungen Abb15.png
  Abb.: 3

Verknüpfung Abb.11.png
  Abb.: 4

Verknüpfung Abb.12.png
  Abb.: 5

Verknüpfung Abb.13.png
  Abb.: 6

Hierarchische Verknüpfung

Bei hierarchischen Verknüpfungen handelt es sich um tabellenübergreifende Verknüpfungen. Sobald eine derartige Verknüpfung möglich ist, erscheint die Option automatisch in den Verknüpfungseinstellungen.

Möglich ist sie, wenn die Tabelle, die verknüpft werden soll, bereits mit einem Feld in der bestehenden Tabelle verknüpft ist.

Zu beachten ist, dass auf diese Weise verknüpfte Felder nur lesend, aber sonst wie gewohnt verwendet werden können.

Example:

Ausgangslage sind die im vorherigen Beispiel verwendeten Tabellen "Projekt" und "Mitarbeiter". Zusätzlich existiert nun eine Tabelle "Kunden". Einem Kunden sind ein oder mehrere Projekte zugeordnet.

Nun möchte man wissen, welche Mitarbeiter für einen Kunden zuständig sind, sprich welche Mitarbeiter die Projekte des Kunden betreuen.

Die Vorgehensweise ist ähnlich zum Erstellen einer normalen Verknüpfung.

Es wird das gewünschte Verknüpfungsfeld "Mitarbeiter" in Kunden angelegt und anschließend im Verknüpfungsfenster die Tabelle "MITARBEITER" ausgewählt.

In diesem Fenster gibt es nun eine Auflistung möglicher hierarchischer Verknüpfungen, für dieses Beispiel muss ein Haken bei folgender Zeile gesetzt werden:

PROJEKTE --> MITARBEITER

Nach der Bestätigung, wird wie gewohnt das Feld gewählt, das verknüpft werden soll, in diesem Beispiel "Name".

Erweiterte Filter

(siehe auch Beispiel Verknüpfung)

Wenn eine Verknüpfung zu einem bestehenden Datensatz erstellt werden soll, werden dem Benutzer ohne erweiterten Filter alle Datensätze der verknüpften Tabelle aufgelistet. Um diese möglicherweise sehr große Anzahl von Datensätzen besser zu überschauen, können im erweitertem Filter Bedingungen gesetzt werden, die von den für die Verknüpfung in Frage kommenden Datensätzen erfüllt werden müssen. Dazu gibt es folgende Möglichkeiten:

  • Setzen der den SQL-Klauseln entsprechenden Variablen "$where[]" und "$from[]". Als Eingabehilfe lassen sich bei Mausklick auf den Pfeil die Beziehungen aller für die aktuelle Verknüpfung relevanten Tabellen paarweise anzeigen. Durch Mausklick auf solch eine Tabellen-Beziehung erhält man einen Vorschlag für eine mögliche Abfrage.
  • Setzen von Filter-Einstellungen über den "$gsr"-Parameter (siehe Funktionsbeschreibung "get_gresult").
  • Ersetzen des ursprünglichen SQL-Statements durch eine eigene Funktion. "return myExt_function($gtabid,$utyp,$filter,$gsr,$verkn,$onlyfield=null,$single=null,$extension=null)". Durch ein "return" wird die ursprüngliche Funktion "get_sqlquery()" abgebrochen und durch eine Eigene ersetzt. Dadurch kann ein angepasstes SQL-Statement erzeugt werden. Es ist ratsam die ursprüngliche Funktion selbst noch einmal aufzurufen um das erwartete Ergebnis entweder zu ändern oder zu ersetzen.

Generator

Hier können Verknüpfungen für aus fremden Datenbanken importierte Tabellen generiert werden. Dazu muß aus zwei Tabellen je ein Tabellenfeld ausgewählt werden. Bei gleichem Inhalt legt Limbas eine Verknüpfung der zugehörigen Datensätze an. Diese Funktion ist sehr hilfreich wenn aus externen Datenbanken 1:n Beziehungen in Limbas übernommen werden sollen. Der Generator füllt dabei die dritte Verknüpfungstabelle automatisch mit der Beziehung der angegebenen Felder. Schon vorhandene Verknüpfungseinträge werden gelöscht. Alle Verknüpfungen werden in die zugehörige Zwischentabelle "VERK_*" geschrieben.

Example: Zwei Tabellen Kunde (enthält Feld "KEY_ID") und Kontakte (enthält Feld "KUNDE_ID") sollen so mit dem Generator verknüpft werden, dass alle Kontakte, die die gleiche "KUNDEN_ID" wie "KEY_ID" in Kunden besitzen, eine Verknüpfung beschreiben.

Nach dem Import beider Tabellen muss für die Tabelle Kunden eine neue Verknüpfung erstellt (Typ: "1:n Verknüpfung", Name z.B: "Kundenkontakte") und administriert (Verknüpfungstabelle: "Kontakte") werden. Die erstellte Verknüpfung ist jetzt noch leer.

Im Generator wird nun auf der Kunden-Seite das Feld "KEY_ID", auf der Kontakte-Seite das Feld "KUNDE_ID" gewählt. Über den Punkt "Verknüpfungen neu eintragen!" wird versucht für jede gefundene Übereinstimmung der beiden Felder eine Verknüpfung einzutragen.

Die beiden Felder "KEY_ID" und "KUNDE_ID" können nach dem Verknüpfen gelöscht werden, falls man sie nicht anderweitig benötigt.

Rückwärtige Verknüpfung

Eine rückwärtige Verknüpfung ermöglicht es, eine Verknüpfung in beide Richtungen anzuzeigen.

Dazu erstellt Limbas eine Viewtabelle, bei der "ID" und "VERKN_ID" der Verknüpfungstabelle vertauscht sind.

Example:

Angenommen es existiert eine Verknüpfung vom Feld "KONTAKTE" in der Tabelle Kunde zur Tabelle Kontakt. Die rückwärtige Verknüpfung wird erstellt, indem eine neue m:n-Verknüpfung in der Tabelle Kontakt zum Feld "KONTAKTE" in der Tabelle Kunde erstellt wird.

Die rückwärtige Verknüpfung ist unabhängig von der Art der Verknüpfung: Es können n:m zu n:m genauso wie 1:n zu n:m erstellt werden. Eine Besonderheit ist lediglich die "unique"-Einstellung, welche im Prinzip - je nach dem von welcher Tabelle aus betrachtet - eine m:n-Verknüpfung in eine 1:n-Verknüpfung konvertiert.

Verknüpfungsarten

Verknüpfung 1:n

Eine 1:n-Verknüpfung ist der häufigste Verknüpfungstyp. In einer 1:n-Verknüpfung können einem Datensatz in Tabelle A mehrere passende Datensätze in Tabelle B zugeordnet sein, aber einem Datensatz in Tabelle B ist nie mehr als ein Datensatz in Tabelle A zugeordnet. Um zusätzliche Informationen wie "erstellt am" und "von wem" speichern zu können, nutzt Limbas wie für m:n-Verknüpfungen eine dritte Tabelle.

Verknüpfung m:n

In einer m:n-Verknüpfung können jedem Datensatz in Tabelle A mehrere passende Datensätze in Tabelle B zugeordnet sein und umgekehrt. Dies ist nur möglich, indem eine dritte Tabelle definiert wird (die als Verbindungstabelle bezeichnet wird), deren Primärschlüssel aus zwei Feldern besteht: Den Fremdschlüsseln aus den Tabellen A und B. Eine m:n-Verknüpfung besteht eigentlich aus zwei 1:n-Beziehungen mit einer dritten Tabelle.

Verknüpfung 1:1

In einer 1:1-Beziehung ist jedem Datensatz in Tabelle A nur ein passender Datensatz in Tabelle B zugeordnet und umgekehrt. Diese Art von Beziehung ist nicht sehr häufig, weil die meisten Informationen, die auf diese Weise in Beziehung stehen, sich in einer einzigen Tabelle befinden. LIMBAS nutzt 1:1-Beziehung, um eine Tabelle mit vielen Feldern zu teilen, um einen Teil der Tabelle aus Gründen der Zugriffsrechte abzutrennen oder um Informationen zu speichern, die sich nur auf eine Untergruppe der Haupttabelle beziehen. Ein Beispiel sind die Systemtabellen "ldms_files" und "ldms_meta", welche das Dokumenten Management System abbilden.

Darstellung

Die Darstellung der Verknüpfungen kann in den Tabellenfeldeinstellungen ([Admin]->best. Tabelle->Stift-Symbol) geändert werden.

Verknuepfungen Abb28.png
  Abb.: Tabellenfeldeinstellungen

Es gibt verschiedene Ansichten, wie die Verknüpften Datensätze in der Detailansicht aufgelistet werden:

  • Standard

Verknupfungen Abb11.png
  Abb.: Standarddarstellung

Verknupfungen Abb10.png
  Abb.: Standarddarstellung unique

In dieser Darstellung werden die Verknüpfungen detailliert in einer Tabelle aufgelistet. Ist zudem der Punkt "ajaxsuche" aktiviert wird ein Eingabefeld (rechts oben) angezeigt über das Datensätze der verknüpften Tabelle schnell gesucht und verknüpft werden können. Ist die Option 'unique' aktiviert, kann maximal ein Datensatz ausgewählt werden.
  • Auswahlsuche

Verknupfungen Abb12.png
  Abb.: Auswahlfeld

Verknupfungen Abb13.png
  Abb.: Auswahlfeld unique

Ist in den Feldoptionen (Tabellen) der Punkt "Auswahlsuche" aktiviert, wird die Verknüpfung als einfaches Auswahlfeld angezeigt.
Man kann dann aus einer Liste den gewünschten Datensatz auswählen. Ist die Option 'unique' aktiviert, kann maximal ein Datensatz ausgewählt werden.
  • Ajaxsuche

Verknüpfung Abb.19.png
  Abb.: Ajaxsuche, man sieht die ausgewählten Datensätze

Verknupfungen Abb14.png
  Abb.: Ajaxsuche unique, man sieht die Vorschlagliste

Aktiviert man nun zusätzlich zu "Auswahlsuche" auch noch "Ajaxsuche", erhält man ein Eingabefeld, dass bereits während man tippt Vorschläge anzeigt, welche man auswählen kann.
Die Eingabe "*" zeigt alle möglichen Datensätze in einer Vorschlagliste an. Ist die Option 'unique' aktiviert, kann maximal ein Datensatz ausgewählt werden.

Klickt man bei letzteren Darstellungen auf den kleinen schwarzen Pfeil öffnet sich ebenfalls das neue Fenster in dem man die Details zum verlinkten Datensatz vorfindet.

Außerdem kann man auswählen, ob die verknüpften Datensätze in der Listenansicht einer verknüpfenden Tabelle durch den angegebenen Listentrenner ausführlich (Abb1), in Kurzform (Abb2) oder nur der Erste (Abb3) bzw. Letzte (Abb4) angezeigt werden sollen:

Verknuepfungen Abb29.png Verknupfungen Abb2.png Verknupfungen Abb3.png Verknupfungen Abb4.png

Parameter

Wird eine Verknüpung in einem eigenen Formular dargestellt sind über das Kontextmenü und den Punkt "Parameter" zusätzliche Einstellungen möglich:

Anzeigen definierter Felder (falls Rechte)

$filter["ext_RelationFields"][$vuniqueid] = array(10,7,15,13,14,16,19,23);

Editieren definierter Felder (falls Rechte)

$filter["ext_RelationFields"]["edit"][$vuniqueid] = array(16,19,23);

Spaltenbreiten definieren in (px)

$gfield[$vgtabid]["rowsize"][16] = 20;

Ergebniss eingrenzen (Suchparameter)

$gsr[$vgtabid][22][0] = $ID;
$filter["ext_RelationFields"]["searchval"][$vuniqueid] = $gsr;

Sortieren

$filter["ext_RelationFields"]["order"][$vuniqueid][0] = array(4,13,"ASC");
$filter["ext_RelationFields"]["order"][$vuniqueid][1] = array($vgtabid,4,'DESC');

Funktionen ausblenden

return array('no_search' => 1,'no_add' => 1,'no_edit' => 1,'no_delete' => 1,'no_link' => 1,'no_sort' => 1,'no_openlist' => 1,'no_fieldselect' => 1);

Zeige alle Ergebnisse

$filter["ext_RelationFields"]["showall"][$vuniqueid] = 1;

Zeige Inhalt aus Longfeldern

$filter["ext_RelationFields"]["getlongval"][$vuniqueid] = 1;


Verknüpfungstabelle

Wie im Abschnitt „Einführung“ bereits beschrieben wird in Limbas eine Verknüpfung von zwei Tabellen immer über eine Verknüpfungstabelle („verkn_md5“) gelöst, unabhängig davon, ob es sich um eine 1:n oder um eine n:m Beziehung handelt. Diese Tabelle enthält eine eigene ID die KEYID, dann die ID der einen Tabelle als ID, sowie die ID der anderen Tabelle als "VERKN_ID" . Zusätzlich enthält diese Verknüpfungstabelle Informationen wie zum Beispiel wann und von wem der Datensatz erstellt wurde. Außerdem kann der Administrator der Tabelle neue Felder hinzufügen, die speziell für den verknüpften Datensatz relevant sind. In einem Beispiel kann man sich das wie folgt vorstellen. Es gibt die Tabelle Projekt und die Tabelle Mitarbeiter, die über eine n:m Beziehung miteinander verknüpft sind. Das bedeutet ein Projekt hat verschiedene Mitarbeiter und ein Mitarbeiter arbeitet in verschiedenen Projekten. Die Verknüpfungstabelle in diesem Beispiel enthält nun die eigene ID als KEYID, die ID der Tabelle Projekt als ID, die ID der Tabelle Mitarbeiter als VERKN_ID sowie das Feld Projektrolle. In diesem Feld wird die Rolle die ein Mitarbeiter in einem bestimmten Projekt hat festgehalten. Beispielsweise arbeitet er in einem Projekt als Systemarchitekt und im anderen als Softwareentwickler. Verknüpfung Abb.23.png