Projektowanie bazy danych dla aplikacji rzadko jest kompletne bez tworzenia relacji między tabelami. Edytor bazy danych AppMaster umożliwia stworzenie takiej relacji jednym prostym ruchem. Wystarczy narysować linię łączącą tabele, a następnie wybrać typ relacji (jeden do jednego, jeden do wielu, wiele do wielu) i ewentualnie nazwy pól. Co jednak w sytuacji, gdy tabela musi odnosić się do samej siebie?

Przeanalizujmy sytuację, gdy konieczne jest utrzymanie pewnego dziennika rekordów. Jednocześnie jest on zorganizowany w taki sposób, że rekordy tworzone są ściśle w łańcuchu. Każdy wpis musi być powiązany z poprzednim i kolejnym (oczywiście poza pierwszym i ostatnim wpisem). W ten sposób można śledzić cały łańcuch dla każdego pojedynczego rekordu, a system otrzymuje dodatkową ochronę przed nieautoryzowanymi zmianami.

Projektowanie bazy danych

Najpierw musimy stworzyć sam model w projektancie bazy danych. Nazwijmy go Journal i dodajmy jedno pole tekstowe, record.

Kolejnym krokiem jest utworzenie połączenia. Aby to zrobić, kliknij prawym przyciskiem myszy w dowolnym miejscu na płótnie i wybierz Create relation.

Następnym krokiem jest skonfigurowanie połączenia. Aby to zrobić, musisz wybrać ten sam model co Source i Target (w tym przypadku Journal), ustawić nazwy pól (next i previous) oraz typ połączenia (has_one).

Konfiguracja tabeli samoreferencyjnej jest zakończona. Możesz rozpocząć tworzenie projektu front-end i procesów biznesowych.

Tworzenie procesu biznesowego

Utwórzmy backendowy proces biznesowy, który będzie dodawał nowe wpisy do dziennika. Otrzyma on tekst nowego wpisu jako parametr wejściowy. Wyszuka on w bazie danych najnowszy wpis, aby powiązać go z nowym wpisem. Dla wyszukiwania można ustawić _Limit = 1 (ponieważ potrzebny jest tylko jeden ostatni rekord), co wystarczy, ponieważ domyślnie rekordy będą uporządkowane według ID i wystawione w kolejności dodania ich do bazy danych, zaczynając od ostatniego rekordu.

Wynikiem wyszukiwania będzie tablica składająca się z jednego elementu. Musimy go wyodrębnić za pomocą Array Element bloku z index 0 i utworzyć nowy wpis w dzienniku (Make Journal). Ostatnim krokiem jest już tylko zapis do bazy danych (DB: Create Journal) i zakończenie procesu biznesowego.

Ten proces biznesowy może być wykorzystany dla domyślnego punktu końcowego do tworzenia nowych rekordów bazy danych.

Projekt front-endu

W przypadku front-endu aplikacji internetowej wystarczy dodać do strony trzy elementy.

  1. Pole tekstowe do wpisania treści nowego wpisu
  2. Przycisk do dodania wpisu
  3. Tabela do wyświetlania wszystkich wpisów.

Dla przycisku "ADD Journal Record" należy również stworzyć prosty proces biznesowy. Po kliknięciu przycisku tekst z pola wejściowego powinien zostać wysłany do endpointa w celu utworzenia nowych wpisów, a kolejny przycisk do kliknięcia w celu aktualizacji zawartości tabeli jako ostatnia akcja.

Dla samej tabeli warto też ustawić procesy biznesowe, ale w tej lekcji nie będziemy się nad tym rozwodzić. Wszystkie niezbędne informacje znajdziesz w lekcji poświęconej ustawianiu tabel. Warto jedynie zwrócić uwagę, że przy pobieraniu danych należy określić m.in. _with parametr, aby uzyskać dane z powiązanych tabel (mimo że w naszym przypadku tabela jest powiązana sama ze sobą).

Możemy opublikować aplikację, dodać kilka wpisów i sprawdzić, czy wszystko działa poprawnie. Każdy wpis jest tak naprawdę powiązany z wpisami w tej samej tabeli. Na przykład dla wpisu o ID 3 istnieje powiązanie z poprzednim wpisem (ID 2) i następnym wpisem (ID 4).

Was this article helpful?

AppMaster.io 101 Kurs zderzeniowy

10 moduły
2 Tygodnie

Nie wiesz, od czego zacząć? Rozpocznij z naszym szybkim kursem dla początkujących i poznaj AppMaster od A do Z.

Rozpocznij kurs
Development it’s so easy with AppMaster!

Potrzebujesz więcej pomocy?

Rozwiąż każdy problem z pomocą naszych ekspertów. Oszczędzaj czas i skup się na tworzeniu aplikacji.

headphones

Skontaktuj się z pomocą techniczną

Opowiedz nam o swoim problemie, a my znajdziemy dla Ciebie rozwiązanie.

message

Czat społeczności

Omów pytania z innymi użytkownikami na naszym czacie.

Dołącz do społeczności