Sub-Suche
Einschränkung - Kurzfassung
Zweck: Eine Sub-Suche prüft als Einschränkung, ob mindestens eine Instanz für die ausgewählte Entität existiert, die die konfigurierte Bedingung erfüllt.
Eine Sub-Suche prüft als Einschränkung, ob mindestens eine Instanz für die ausgewählte Entität existiert, die die konfigurierte Bedingung erfüllt.
Analog zur Subselect Projektion kann formal eine Tupel-Suche mit einer einzigen Projektion konfiguriert werden, die auch Joins und Kriterien für eine Gruppierung beinhalten kann.
Projektionen innerhalb der Sub-Suche beziehen sich primär auf die für die Sub-Suche ausgewählte Entität als Datenquelle.
Das Präfix _parentQuery ermöglicht Bezüge zur übergeordneten Suche. Es kann bei Bedarf kaskadierend (_parentQuery._parentQuery.[...]) eingesetzt werden, um eine bestimmte Ebene einer mehrstufigen Hierarchie zu adressieren.
Im Unterschied zu einer Subselect Projektion liefert die Sub-Suche allerdings, wie alle anderen Einschränkungen, nur einen Booleschen Rückgabewert und stellt keinerlei Details zum Suchergebnis bzw. dem Wert der ggf. konfigurierten Projektion bereit:
Der Rückgabewert lautet true, wenn mindestens eine Instanz für die Entität existiert, die die Bedingung erfüllt.
Der Rückgabewert lautet false, wenn keine Instanz für die Entität existiert, die die Bedingung erfüllt.
►WICHTIG◄ Die Sub-Suche ignoriert Zugriffsbeschränkungen. Sie berücksichtigt sämtliche Instanzen der ausgewählten Entität ohne Rücksicht auf Besitz, Beteiligung oder Firmenfreigaben.
Konfiguration
Parameter |
Typ |
Beschreibung |
Entität |
Entitätstyp |
Die Auswahl für den Parameter Entität bestimmt die primäre Datenquelle für die Sub-Suche. Es können nur die im Dropdown angebotenen Entitätstypen ausgewählt werden. Für eine Sub-Suche können dabei auch Entitätstypen ausgewählt werden, die in der übergeordneten Suche nicht direkt als "Entität" verfügbar sind (z. B. Attribute). ►HINWEIS◄ Optional können über Joins weitere Datenquellen in die Sub-Suche eingebunden werden. |
Projektion |
Projektion |
Auf die Konfiguration einer Projektion kann verzichtet werden, da für die Sub-Suche als Einschränkung nur die Existenz einer "Ergebniszeile" ausschlaggebend ist.
|
Joins |
Join |
Der Sub-Suche können über Joins weitere Datenquellen hinzugefügt werden, die dann für Projektionen in anderen Bereichen innerhalb der Sub-Suche zur Verfügung stehen. |
Bedingung |
Einschränkung |
Der Parameter Bedingung ermöglicht die Konfiguration von Einschränkungen für die Akzeptanz von Instanzen der Entität innerhalb der Sub-Suche.
|
►WICHTIG◄ Wird im Kontext einer Sub-Suche komplett auf die Konfiguration einer Bedingung verzichtet, dann wird die Sub-Suche beim Zusammenstellen der Datenbankabfrage komplett ignoriert. |
||
Gruppierung |
Projektion |
Die Konfiguration von Kriterien für eine Gruppierung stellt für die Wirkung einer Sub-Suche als Einschränkung im Allgemeinen keinen Mehrwert dar, da diese nur die Existenz von mindestens einer Ergebniszeile überprüft. |
Beispiele
Einfacher Anwendungsfall: Verwaiste schwache Referenzen erkennen
Als "schwache Referenz" werden Verweise auf Entitäten bezeichnet, deren Bestehen nicht als Hindernis für das Löschen der betreffenden Entität gewertet wird.
Alle Entitäten nutzen z. B. eine "schwache Referenz", um über das Feld "Besitzer" (ownerId) auf die ID (id) eines Firmenkontos zu verweisen. Ein Firmenkonto, das andere Entitäten "besitzt", kann also gelöscht werden, ohne dass die besessenen Entitäten zuvor einem neuen Besitzer zugeordnet werden müssten.
Eine Suche soll Benutzer auflisten, für die das als "Besitzer" (ownerId) referenzierte Firmenkonto nicht mehr exisitert.
Konfiguration:
In einer Suche für Benutzer wird die Bedingung wie rechts abgebildet als UND-Verknüpfung konfiguriert:
Effektiv wird die Bedingung der übergeordneten Suche also bestanden, wenn das "Besitzer"-Feld des Benutzerkontos eine ID angibt, zu der die Sub-Suche keinen Treffer untern allen Firmenkonten findet. Da die Sub-Suche jegliche Zugriffsbeschränkungen ignoriert, impliziert das, dass das als |
|
Typischer Anwendungsfall: Eingehende Referenz(en) als Einschränkung
Eine Eigene Übersicht (s. Eigene Übersichten) soll nur solche Benutzer auflisten, denen mindestens ein Dokument (s. Dokumente) mit dem Dokumententyp "Lebenslauf" (CV) zugewiesen ist.
►HINWEIS◄ Zugewiesene Dokumente verweisen auf das "Referenzierte Objekt" und nicht umgekehrt (s. Dokumente zuweisen). Deshalb müssen die für die Referenz relevanten Felder aller Dokumente ausgewertet werden, um "zugewiesene Dokumente" zu identifizieren.
Konfiguration:
Für die Eigene Übersicht wird als Einschränkung eine Sub-Suche wie rechts abgebildet konfiguriert:
|
|
|
►HINWEIS◄ Sofern im Ausführungskontext Zugriffbeschränkungen wirksam sind, berücksichtigt die Eigene Übersicht nur Benutzer, für die Lesezugriff gegeben ist. Entsprechend werden auch nur für diese die eingehenden Referenzen von Dokumenten geprüft. Ob im Ausführungskontext Zugriff auf das ggf. "qualifizierende" Lebenslauf-Dokument besteht, ist dagegen nicht entscheidend, da die Sub-Suche Zugriffsbeschränkungen ignoriert. Die Übersicht zeigt daher ggf. auch Benutzerkonten an, für deren "Lebenslauf"-Dokument kein Lesezugriff besteht.
Besonderer Anwendungsfall: Duplikate identifizieren
Eine Suche soll alle Firmen auflisten, deren Adresse eine "Kontonummer" (address.accNumber) verwendet, die "mehrdeutig" - also auch noch an mindestens eine andere Firma vergeben - ist.
Konfiguration:
Innerhalb einer Suche für Firmen wird als einzige Einschränkung in der Bedingung eine Sub-Suche wie rechts abgebildet konfiguriert:
►HINWEISE◄
|
|
►ANMERKUNG◄ Die Suche liefert in einem Ausführungskontext mit wirksamen Zugriffsbeschränkungen alle Firmen, deren "Kontonummer" mehrdeutig vergeben ist UND für die Lesezugriff besteht. Im Suchergebnis erscheinen deshalb nicht unbedingt immer alle Firmen, die sich auf dieselbe mehrdeutig vergebene Kontonummer beziehen, sondern nur diejenigen, für die außerdem im Ausführungskontext Lesezugriff besteht. Überschneidungen zwischen den Kontonummern von Firmen, für die im Ausführungskontext kein Lesezugriff besteht, werden nicht ausgewertet.