Verknüpfungen

Geschätzte Lektüre: 13 Minuten

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 ([Admin]->beliebige Tabelle; siehe rechts) 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 muss, 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 ([Admin]->beliebige Tabelle; siehe rechts) können weitere Einstellungen für die Verknüpfung vorgenommen werden.

Allgemein

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.

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.

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.

Abb.: Bei der Ajaxsuche werden Name und Vorname angezeigt

Trennzeichen

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

Abb.: Das erste Trennzeichen trennt die Werte, die bei der Schnellsuche erscheinen.
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.

Abb.: 1

Abb.: 2
Abb.: 3
Abb.: 4
Abb.: 5
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.

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.

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.

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.

Abb.: Tabellenfeldeinstellungen

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

  • Standard
Abb.: Standarddarstellung
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
Abb.: Auswahlfeld
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
Abb.: Ajaxsuche, man sieht die ausgewählten Datensätze
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
Abb.: 1
Verknupfungen Abb2.png
Abb.: 2
Verknupfungen Abb3.png
Abb.: 3
Verknupfungen Abb4.png
Abb.: 4

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.