Проектирование базы данных для приложений редко обходится без создания связей между таблицами. Редактор базы данных AppMaster позволяет создать такую связь в одно простое движение. Достаточно лишь провести линию связи между таблицами, а затем выбрать тип связи (один-к-одному, один-ко-многим, многие-ко-многим) и, при необходимости, названия полей. Но как быть в том случае, если таблица должна ссылаться на саму себя?

Разберем ситуацию, когда необходимо вести определенный журнал записей. При этом он организован так, что записи создаются строго по цепочке. Каждая запись должна быть связана с предыдущей и последующей записью (естественно, кроме самой первой и последней записи). Таким образом по каждой отдельной записи можно отследить всю цепочку, а сама система получает дополнительную защиту от несанкционированных изменений.

Проектирование базы данных

Для начала необходимо создать саму модель в дизайнере базы данных. Назовем ее Journal и добавим одно текстовое поле Record.


Следующий шаг - создание связи. Для этого необходимо нажать правой кнопкой мыши в любом свободном месте холста и выбрать пункт Create relation.


Следующий шаг - настройка связи. Для этого в качестве Source и Target нужно выбрать одну и ту же модель (в данном случае Journal), установить названия полей (next и previous) и тип связи (has_one).


Готово! Настройка самоссылающейся таблицы закончена. Можно приступать к созданию фронтенда и бизнес-процессов.


Создание бизнес-процесса

Создадим бизнес-процесс бэкенда для добавления новых записей в журнал. В качестве входного параметра он будет получать текст новой записи. При этом в базе данных будет осуществлен поиск последней записи, чтобы связать ее с новой записью. Для поиска можно установить _Limit = 1 (ведь нужна только одна последняя запись) и этого будет достаточно, так как по умолчанию записи будут упорядочены по ID и выдаваться в порядке их добавления в базу, начиная с последней записи.

В результате поиска будет получен массив состоящий из одного элемента. Нужно извлечь его с помощью блока Array Element с индексом 0 и сформировать новую запись журнала (Make Journal). Последним шагом остается только выполнить запись в базу данных (DB: Create Journal) и завершить бизнес-процесс.


Данный бизнес-процесс можно использовать в стандартном эндпойнте для создания новых записей базы данных.


Дизайн фронтенда

Для фронтенда веб-приложения достаточно добавить три элемента на страницу.

  1. Текстовое поле для ввода содержимого новой записи
  2. Кнопка для добавления записи
  3. Таблица для отображения всех записей.


Для кнопки добавления записей также необходимо создать простой бизнес-процесс. По нажатию на кнопку текст из поля ввода должен быть отправлен в эндпойнт для создания новых записей, а последним действием нажата кнопка, обновляющая содержимое таблицы.


Для самой таблицы тоже стоит настроить бизнес-процессы, но в данном уроке мы не будем останавливаться на этом. Всю необходимую информацию можно найти в уроке посвященном настройке таблиц. Стоит отметить только то, что при получении данных нужно указать параметр _with для получения данных из связанных таблиц (несмотря на то, что в нашем случае таблица связана сама с собой).

Можно опубликовать приложение, добавить несколько записей и убедиться, что все работает корректно. Каждая запись действительно связана с записями в той же таблице. Например, для записи с ID 3, имеется связь с предыдущей (ID 2) и следующей записью (ID 4).


Was this article helpful?

AppMaster.io 101 Полный курс

10 модулей
2 недели

Не знаете с чего начать? Начните с нашего ускоренного курса для начинающих и изучите AppMaster от А до Я.

Начать обучение
Development it’s so easy with AppMaster!

Остались вопросы?

Наши эксперты с радостью ответят на все ваши вопросы о платформе AppMaster и помогут вам в создании приложений.

headphones

Служба поддержки

Поделитесь своей проблемой с нашими специалистами.

message

Комьюнити AppMaster

Обсудите вопросы с другими пользователями в нашем чате.

Присоединиться