FunDB - это база данных, которая является "сердцем" нашего продукта. Она обеспечивает выполнение запросов, сохранение данных, проверку прав доступа и многое другое. Важным принципом её работы является наш подход к настройке. Все ваши метаданные это тоже данные - вся информация о схемах, таблицах, колонках, правах доступа и.т.д. является такими же таблицами и редактируется на общих принципах. При их редактировании база данных автоматически обновляется в соответствии с вашими изменениями.
У каждой сущности есть системные поля, значения которых не может быть установлено или изменено и назначается автоматически:
id
. Имеется всегда. Является главным ключом в терминах SQL;sub_entity
. Имеется у сущностей, у которых есть родительские или унаследованные сущности. Хранит название подвида сущности для конкретной записи в виде JSON. Внимание: внутреннее представление этой колонки отличается от JSON и запрос её значения - это медленная операция. По возможности используйте вместо этого операторы OFTYPE
и INHERITED FROM
, или виртуальные поля.Данные таблицы хранятся в схеме public
. Они описывают текущие настройки базы данных. У некоторых таблиц также имеется колонка allow_broken
- при её выставлении ошибки в настройке данной сушности не являются критической ошибкой и приводят лишь к неработоспособности данной сущности.
Содержит созданные схемы.
Колонка | Описание |
---|---|
name |
Название схемы. Не может быть пустым, содержать пробелы, строки / и __ . |
Содержит созданные сущности.
Колонка | Описание |
---|---|
name |
Название сущности. Не может быть пустым, содержать пробелы, строки / и __ . |
schema_id |
Схема, к которой привязана данная сущность. |
main_field |
У каждой сущности определена "главная колонка", которая используется для краткого описания данной записи, напр. при выборе из списков или для отображения в таблицах. При пустом значении main_field используется id . |
forbid_external_references |
Запретить ссылаться на записи в данной таблицы из других схем. |
is_frozen |
Все изменения для этой сущности запрещены. |
is_abstract |
Сущность является абстрактной, т.е. создавать новые записи для этой сущности нельзя. Используется в связке с наследованием. |
parent_id |
Сущность наследуется от другой сущности. При запросах по сущностям-родителям записи сущностей-детей также будут видны. У сущностей-детей присутствуют все поля сущностей-родителей, а так же их собственные поля. |
Содержит колонки с данными для таблиц.
Колонка | Описание |
---|---|
name |
Название колонки. Не может быть пустым, содержать пробелы, строки / и __ , называться id или sub_entity . |
entity_id |
Сущность, к которой относится поле. |
type |
Тип данных. См. типы данных. |
default |
Значение по умолчанию. Задаётся на языке FunQL. Может отсутствовать. |
is_nullable |
Могут ли данные в колонке отсутствовать. |
is_immutable |
Могут ли данные в колонке меняться после создания. |
Содержит вычисляемые колонки, т.е. колонки которые автоматически вычисляются из значений других колонок.
Колонка | Описание |
---|---|
name |
Название колонки. Не может быть пустым, содержать пробелы, строки / и __ , называться id или sub_entity . |
entity_id |
Сущность, к которой относится поле. |
expression |
Выражение для вычисляемой колонки. Задаётся как выражение языка FunQL (напр. "name" || "surname" ). |
is_virtual |
Разрешено ли переопределять выражение поля в дочерних сущностях. Используется для возвращения результатов в зависимости от подтипа записи. |
Содержит ограничения уникальности, т.е. наборы колонок, значения в которых должны быть уникальны во всей таблице.
Колонка | Описание |
---|---|
name |
Название ограничения. Не может быть пустым, содержать пробелы, строки / и __ . |
entity_id |
Сущность, к которой относится ограничение. |
columns |
Массив названий колонок с данными, кортежи из которых должны быть уникальны. |
Содержит ограничения на данные, т.е. проверки, которые должна проходить каждая строка в таблице.
Колонка | Описание |
---|---|
name |
Название ограничения. Не может быть пустым, содержать пробелы, строки / и __ . |
entity_id |
Сущность, к которой относится ограничение. |
expression |
Выражение, результат которого должен быть true или null . Задаётся как выражение языка FunQL. Не может использовать подвыражения и оператор => . |
Содержит именованные запросы, которые можно вызывать.
Колонка | Описание |
---|---|
name |
Название запроса. Не может быть пустым, содержать пробелы, строки / и __ . |
schema_id |
Схема, к которой привязан данный запрос. |
query |
Запрос на языке FunQL. |
Содержит список триггеров, которые выполняются при заданных операциях. Триггером является модуль ECMAScript, экспортирующий функцию-обработчик. Сигнатуры триггеров и API, доступный для вызовов, можно изучить в виде сигнатур TypeScript здесь. Триггеры, выполняющиеся до операции, могут модифицировать аргументы операции, возвращая новое значение args
. Если модификации не нужны, возвращать необходимо true
. При возврате false
операция считается отменённой; дальнейшие триггеры не запускаются, однако транзакция выполняется до конца.
Колонка | Описание |
---|---|
name |
Название триггера. Не может быть пустым, содержать пробелы, строки / и __ . |
schema_id |
Схема, к которой привязан данный триггер. |
trigger_entity_id |
Сущность, на события которой реагирует триггер. |
time |
Время выполнения триггера (до или после операции). |
priority |
Приоритет выполнения триггера, при наличии нескольких триггеров для одной операции. |
on_insert |
Триггер реагирует на вставку записей. |
on_update_fields |
Триггер реагирует на изменение записей. Массив, в котором могут быть перечислены названия полей или * . чтобы реагировать на изменения любого поля. |
on_delete |
Триггер реагирует на удаление записей. |
procedure |
Код триггера на JavaScript. |
Содержит список пользователей, которым разрешён доступ к базе данных.
Колонка | Описание |
---|---|
name |
Идентификатор пользователя (электронная почта, для которой был создан аккаунт). |
is_root |
Является ли пользователь администратором базы данных (полный доступ, включая служебные операции). |
role_id |
Роль, к которой принадлежит пользователь. Может отсутствовать (возможно, когда пользователь - администратор). |
Содержит лог событий в базе данных.
Колонка | Описание |
---|---|
transaction_time |
Время транзакции. |
transaction_id |
Локально уникальный идентификатор транзакции. Вместе с "transaction__time" уникально идентифицирует транзакцию в базе данных. |
timestamp |
Время операции. Уникально в пределах одной транзакции. |
source |
Источник события. JSON, в котором поле "source" принимает значения "api" (для операций, выполняемых пользователем) или "trigger" (для операций, выполняемых триггерами). |
user_name |
Пользователь, начавший транзакцию. |
type |
Тип события. |
error |
Тип произошедшей ошибки, если операция завершилась неудачно. |
schema_name |
Название схемы, для которой произошло событие. |
entity_name |
Название сущности, для которой произошло событие. |
entity_id |
Идентификатор записи, для которой произошло событие. |
details |
Детали события в произвольном формате. |
У вашей базы данных есть публичный API, через который вы можете взаимодействовать напрямую с вашими данными. Базой можно пользоваться для ваших собственных решений: она не содержит привязки к FunApp (нашему продукту-конструктору), наоборот - FunApp построен поверх базы, и мы пользуемся теми же публичными вызовами.
API в настоящий момент не имеет стабильной версии.
Детали: FunDB API