Module Verknüpfungen Geschätzte Lektüre: 16 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. 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 -> Verknüpfungseditor (siehe Zeichen 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 -> Verknüpfungseditor (siehe Zeichen 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. Beipsiel: 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. 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. Beispiel: 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. Beispiel: 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. Beispiel: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üpfen des DMS mit einer Tabelle Es ist möglich das Datei-Management-System (DMS) mit einer Tabelle zu verknüpfen, um Dateien (wie Dokumente und Bilder) in eine Tabelle einzufügen und dort anzuzeigen. DMS-Verknüpfung hinzufügen Das Hinzufügen einer DMS-Verknüpfung zu einer Tabelle erfolgt genauso wie das Hinzufügen einer normalen Verknüpfung zu einer Tabelle. Abb. dms_1 Abb. dms_2 Unter [Admin -> Tabellen -> „Tabellenname“] kann ein neues Feld mit dem Typ „Verknüpfung“ hinzugefügt werden. Je nach Bedarf kann zwischen „Verknüpfung 1:n“, „Verknüpfung 1:n direkt“ oder „Verknüpfung n:m“ ausgewählt werden. Um die Tabelle nun mit dem DMS zu verknüpfen, muss in dem Verknüpfungseditor unter [Allgemein -> zu verknüpfende Tabellen -> Limbassys -> Files(ldms_files)] ausgewählt werden (siehe Abb. dms_1). Nun erscheint ein Fenster in welchem ausgewählt werden muss welche der Variablen der verknüpften Datei in der Bearbeitungs- und Detailansicht die verknüpfte Datei darstellt. Sinnvollerweise sollte hier ein Feld mit aussagekräftigen Inhalten gewählt werden, wie zum Beispiel der Name der Datei. Das Feld hat keinen Einfluss auf die echte Verknüpfung, sondern legt fest welchen Inhalt das Tabellenfeld der Verknüpfung hat. Bei den restlichen Variablen sollte nichts verändert werden. Alle Einstellungen der Variablen können jederzeit geändert werden. Zum Schluss muss auf „übernehmen“ geklickt und das Fenster geschlossen werden. Außerdem muss in dem Feld Erweiterung „extendedFileManager“ ausgewählt werden. (Falls dies nicht automatisch geschieht.) Nun gibt es in der Tabelle eine neue Verknüpfung mit speziellen Funktionen und zusätzlichen Informationen und im DMS befindet sich ein neuer Ordner „Tabellen“ mit einem Unterordner mit Namen der Tabelle in der sich die Verknüpfung zum DMS befindet. Es können zusätzlich aber auch Dateien aus anderen (schon bestehenden) Ordnern geladen/verknüpft werden. Funktionen des DMS in einer Tabelle Abb. Funktionen des DMS DetaildarstellungDurch Doppelklick auf eine Datei öffnet sich eine Detaildarstellung der Datei. Dort sind allgemeine Daten, Metadaten, Duplikate und Abhängigkeiten vermerkt.mini Datei-ManagerEs öffnet sich ein Fenster mit allen Ordnern und Dateien, die zu dieser Verknüpfung gehören. Dort können auch alle Felder durchsucht werden.Datensatz suchenIn jedem Feld kann nach einem bestimmten Wert gesucht/gefiltert werden.neuen Ordner erstellenEs kann ein neuer Unterordner erstellt werden.neue Datei erstellenEs kann eine Datei vom Computer in LIMBAS hochgeladen werden.Dateien/Ordner löschenAusgewählte Dateien und Ordner können gelöscht werden. Sie werden auch im DMS unwiderruflich entfernt.Verknüpfung entfernenDie Verknüpfung ausgewählter Dateien kann gelöst werden. Die Dateien sind weiterhin im DMS vorhanden, jedoch sind sie nicht mehr mit der Tabelle verknüpft und sind somit auch nicht mehr in der Tabelle zu sehen.zeige FelderEs kann ausgewählt werden welche Felder angezeigt werden sollen. Alle Fleder, die angezeigt werden, sind mit einem Haken markiert. Um eine Markierung hinzuzufügen oder zu entfernen, muss man auf den entsprechenden Namen klicken.zeige alle DateienAlle Dateien aus jedem Unterordner werden angezeigt.einfache DarstellungDateien und Ordner werden in einer Liste dargestellt.BildershowDateien werden als kleine Bildchen angezeigt. Unterordner und die darin enthaltenen Dateien werden nicht angezeigt.BildergalerieDie Dateien werden einzeln als große Bilder angezeigt und man kann mit Hilfe von Pfeilen jede Datei ansehen. Unterordner und die darin enthaltenen Dateien werden nicht angezeigt. Anzeigemodus Dropdown (Detaildarstellung)Unter [Admin -> Tabellen -> „Tabellenname“ -> Verknüpfungseinstellungen -> Parameter -> „Anzeigemodus“] kann die Art der Darstellung ausgewählt werden. Die default Darstellung ist die Detaildarstellung.Minimized (minimierte Darstellung)In einem Formular kann die minimierte Darstellung für das DMS ausgewählt werden. 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 1:n direkt Eine direkte 1:n Verknüpfung ist identisch zur 1:n Verknüpfung, jedoch wird keine zusätzliche Verknüpfungstabelle erstellt. Die Verknüpfungsinformationen werden in den Tabellen A und B in einem Feld gespeichert. Dies vereinfacht SQL-Argumente, jedoch können zusätzliche Informationen, wie die Verknüpfung wurde „erstellt am“ und „erstellt von“, nicht gespeichert werden. 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: Abb.: 1 Abb.: 2 Abb.: 3 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.