Der Entwurf einer Datenbank für Anwendungen ist selten vollständig ohne die Erstellung von Beziehungen zwischen Tabellen. Mit dem Datenbank-Editor AppMaster können Sie eine solche Beziehung mit einem einfachen Handgriff herstellen. Sie müssen lediglich eine Verbindungslinie zwischen den Tabellen ziehen und dann die Art der Beziehung (eins-zu-eins, eins-zu-viele, viele-zu-viele) und, falls erforderlich, die Namen der Felder auswählen. Was aber, wenn sich die Tabelle auf sich selbst beziehen muss?
Analysieren wir die Situation, in der es notwendig ist, ein bestimmtes Protokoll von Datensätzen zu führen. Gleichzeitig ist es so organisiert, dass die Datensätze streng in einer Kette erstellt werden. Jeder Eintrag muss mit dem vorhergehenden und dem nachfolgenden Eintrag verknüpft sein (mit Ausnahme des allerersten und letzten Eintrags natürlich). Auf diese Weise kann die gesamte Kette für jeden einzelnen Datensatz nachvollzogen werden, und das System erhält einen zusätzlichen Schutz gegen unbefugte Änderungen.
Entwurf der Datenbank
Zunächst müssen wir das Modell selbst im Datenbankdesigner erstellen. Wir nennen es Journal und fügen ein Textfeld hinzu, record.
Der nächste Schritt besteht darin, eine Verbindung zu erstellen. Klicken Sie dazu mit der rechten Maustaste auf eine beliebige Stelle des Canvas und wählen Sie Create relation.
Der nächste Schritt besteht darin, die Verbindung einzurichten. Dazu müssen Sie dasselbe Modell auswählen wie Source und Target (in diesem Fall Journal), legen Sie die Feldnamen (next und previous) und die Art der Verbindung (has_one) fest.
Die Einrichtung der selbstreferenzierenden Tabelle ist damit abgeschlossen. Sie können mit der Erstellung des Frontend-Designs und der Geschäftsprozesse beginnen.
Erstellen von Geschäftsprozessen
Lassen Sie uns einen Backend-Geschäftsprozess erstellen, um neue Einträge zum Journal hinzuzufügen. Er erhält den Text des neuen Eintrags als Eingabeparameter. Dieser Prozess sucht in der Datenbank nach dem letzten Eintrag, um ihn mit dem neuen Eintrag zu verknüpfen. Für die Suche können Sie _Limit = 1 (da nur ein letzter Eintrag benötigt wird), was ausreicht, da die Einträge standardmäßig nach ID geordnet und in der Reihenfolge ausgegeben werden, in der sie der Datenbank hinzugefügt wurden, beginnend mit dem letzten Eintrag.
Das Ergebnis der Suche wird ein Array sein, das aus einem einzigen Element besteht. Wir müssen es mit Hilfe des Array Element Block mit index 0 extrahieren und einen neuen Journaleintrag bilden (Make Journal). Der letzte Schritt besteht lediglich darin, in die Datenbank zu schreiben (DB: Create Journal) und schließt den Geschäftsprozess ab.
Dieser Geschäftsprozess kann für den Standard-Endpunkt verwendet werden, um neue Datenbankeinträge zu erstellen.
Front-End-Entwurf
Für das Frontend einer Webanwendung genügt es, der Seite drei Elemente hinzuzufügen.
- Textfeld zur Eingabe des Inhalts des neuen Eintrags
- Schaltfläche zum Hinzufügen eines Eintrags
- Tabelle zur Anzeige aller Einträge.
Für die Schaltfläche "ADD Journal Record" müssen Sie außerdem einen einfachen Geschäftsprozess erstellen. Beim Anklicken der Schaltfläche sollte der Text aus dem Eingabefeld an den Endpunkt gesendet werden, um neue Einträge zu erstellen, und eine weitere Schaltfläche sollte angeklickt werden, um den Inhalt der Tabelle als letzte Aktion zu aktualisieren.
Für die Tabelle selbst lohnt es sich auch, Geschäftsprozesse einzurichten, aber in dieser Lektion werden wir uns damit nicht näher befassen. Alle notwendigen Informationen finden Sie in der Lektion zum Einrichten von Tabellen. Es ist nur erwähnenswert, dass Sie beim Abrufen von Daten den Parameter _with angeben müssen, um Daten aus Bezugstabellen zu erhalten (obwohl die Tabelle in unserem Fall mit sich selbst verbunden ist).
Wir können die Anwendung veröffentlichen, ein paar Einträge hinzufügen und überprüfen, ob alles korrekt funktioniert. Jeder Eintrag steht in Wirklichkeit in Beziehung zu Einträgen in derselben Tabelle. Zum Beispiel gibt es für einen Eintrag mit der ID 3 eine Verknüpfung zum vorherigen Eintrag (ID 2) und zum nächsten Eintrag (ID 4).