Сразу о границе, чтобы не тратить ваше время: SQL-запросов, схем и индексов в Table-vakas нет, и программист для работы не нужен. Если вы искали СУБД, это не она. База здесь собирается из таблиц, которые связаны между собой, и настраивается мышкой.
Чем база отличается от отдельных таблиц
Одна таблица это список. Список заказов, список клиентов, список задач. Пока список один, все хорошо. Проблемы начинаются на втором.
Заказы ведут в одном файле, клиентов в другом. Телефон клиента приходится копировать в каждый его заказ, потому что иначе непонятно, кому звонить. Клиент меняет телефон, и старые заказы остаются со старым. Через полгода никто не скажет, какой из двух номеров правильный.
В Table-vakas списки связываются между собой. Телефон хранится один раз, в карточке клиента, а заказ связан с этой карточкой и показывает актуальный номер. Поменяли в одном месте, изменилось везде.
Связанные таблицы на паре «заказы и клиенты»
В Table-vakas связь это тип поля, он так и называется: «Связь с таблицей». В таблице заказов добавляете поле «Клиент», указываете, что оно ведет на таблицу клиентов, и дальше в каждом заказе выбираете клиента из списка, а не вписываете руками.
Сколько записей можно выбрать, решаете вы, и отдельно для каждой стороны. У заказа один клиент, у клиента много заказов: это самый частый случай. Можно и многие ко многим, например товары и поставщики, когда один товар возят несколько поставщиков, а каждый поставщик возит много товаров.
Одна деталь, на которой легко споткнуться: обратное поле само не появляется. Когда вы в заказах создаете связь с клиентами, поле «Заказы» в таблице клиентов возникнет только если вы поставите галочку «Создать обратное поле». Забыли поставить: связь работает, но со стороны клиента вы его заказов не увидите, и сводку по ним не посчитаете.
Связывать можно и таблицу саму с собой. Сотрудники и их руководители, категории и подкатегории, задачи и подзадачи живут в одной таблице с полем на себя же.
Подстановка и сводка: то, чего нет в обычной таблице
Связь сама по себе дает немного: вы видите название связанной записи. Настоящая польза начинается дальше, и это два типа полей.
Подстановка в Table-vakas показывает значение из связанной записи. В заказе появляется почта клиента, хотя хранится она в таблице клиентов. Вы ничего не копируете: поменялась почта в карточке клиента, она обновилась во всех его заказах. Руками такое поле не заполнить, оно только читается.
Сводка в Table-vakas считает по всем связанным записям. В карточке клиента появляется сумма его заказов, их количество, дата последнего. Способов подсчета одиннадцать: сумма, среднее, минимум, максимум, количество записей, количество непустых значений, склейка значений через запятую, список уникальных значений, список всех значений, проверки «все истинны» и «хотя бы одно истинно».
У сводки можно поставить условие, и это важнее, чем кажется. Сумма всех заказов клиента вам, скорее всего, не нужна. Нужна сумма оплаченных. Условие ставится по полям связанной таблицы, и тогда в карточке клиента считается именно то, что вы имели в виду.
Разницу между «количеством записей» и «количеством непустых значений» стоит увидеть на примере. У клиента три заказа, но сумма проставлена в двух: первое даст три, второе два. Обе цифры верные, просто отвечают на разные вопросы.
Типы полей вместо ячеек
В Table-vakas тип задается один раз на весь столбец, и дальше поле держит структуру само: в поле даты не окажется строчки «на следующей неделе», а в числовом поле текста. Проверки значений есть и в обычных редакторах таблиц, разница в том, что здесь это не дополнительная настройка, а само устройство столбца.
Типов восемнадцать. Текст и длинный текст, число, флажок, дата, дата со временем, один из списка и несколько из списка, почта, телефон, ссылка, автономер, время создания и время изменения записи. И четыре, ради которых все затевалось: связь, подстановка, сводка и формула.
Список вариантов, кстати, тоже дисциплинирует. Когда статус выбирается из готовых значений, а не печатается, в базе не заводятся «оплачен», «Оплачен» и «оплачн» как три разных статуса.
Одна база, разные представления
Те же записи показываются по-разному, и переключение не копирует данные. Таблица для работы со списком, канбан по статусам, когда заказы двигают из «нового» в «оплачен», календарь по датам, если у записей есть сроки. Плюс форма, через которую данные принимают снаружи.
Представлений на таблицу может быть до пятидесяти, у каждого свои фильтры и сортировки, и никто друг другу вид не сбивает: заказы одного менеджера, все заказы, только оплаченные. Важная оговорка: представление это способ показа, а не ограничение доступа. Права выдаются на таблицу целиком, и человек, видящий вид «только оплаченные», может открыть вид со всеми.
Перенести то, что уже есть в файлах
База редко начинается с нуля: обычно уже есть Excel, который перерос себя.
Table-vakas принимает данные из CSV, TSV и XLSX. Ограничения одного импорта: файл до 20 МБ и до 100 000 строк, в книге Excel читается первый лист. Второй и третий листы придется загружать отдельными файлами, и это как раз повод развести их в разные связанные таблицы, а не сваливать в одну.
Эти ограничения действуют на один импорт и не описывают проверенный объем базы. Сколько данных выдержит именно ваш сценарий, проверяйте на своих данных.
Где заканчивается таблица и начинается СУБД
Разработчиков, дочитавших до сюда, надо отпустить с чистой совестью, а остальным полезно знать границу заранее.
SQL-запросов и выгрузки в SQL в Table-vakas нет. Схемами, индексами и ограничениями целостности управлять нельзя. Выгрузка идет в CSV и XLSX. Соединить две таблицы «по ключу», как это делает JOIN, тоже нельзя: чтобы достать данные соседней таблицы, сначала создают связь, потом настраивают подстановку или сводку.
Формулы в Table-vakas считают по полям одной записи. Функций шестьдесят девять, от арифметики и текста до дат и регулярных выражений, но адресов вроде A1, диапазонов и ссылок на соседнюю строку не поддерживается. Посчитать сумму заказов клиента формулой не выйдет, для этого есть сводка по связанным заказам.
Цепочка вычислений ограничена тремя переходами по связям. Заказ берет данные клиента, клиент берет данные города, город берет данные региона: это предел. Кольцевые зависимости, когда поле считает само себя через соседнее, система не даст сохранить вовсе.
Из структурных пределов до переноса стоит знать два: до 200 полей в таблице и до 1 000 связанных записей в одном поле связи.
Что происходит при удалении
Удаленная запись уходит в корзину на 30 дней, и связи с ней сохраняются, но перестают учитываться: сводки у связанных записей сразу пересчитываются. Каскада нет, удаление заказа не тронет клиента.
Одна тонкость при восстановлении. Если у связи был единственный слот и за время в корзине его занял кто-то другой, то при восстановлении такая связь отбрасывается, и продукт об этом честно сообщает, а не делает вид, что все вернулось.
Кто что видит
Доступ выдается на таблицу, ролей четыре: наблюдатель, редактор, администратор, владелец. Подробный разбор с правами каждой роли, публичными ссылками и формами это отдельная статья о совместной работе.
Но одну вещь, связанную именно с базой, надо сказать здесь, потому что больше ее сказать негде. Подстановка и сводка показывают данные связанной таблицы как поля исходной. Это значит, что человек, получивший доступ к заказам, увидит подставленные в них данные клиентов, даже если в саму таблицу клиентов вы его не пускали. Проектируя доступ, смотрите не только на таблицу, но и на то, что в нее подтянуто.
С чего начать
Начните с двух таблиц, а не с пятнадцати. Заказы и клиенты, задачи и проекты, товары и поставщики: любая пара, где одно принадлежит другому. Свяжите их полем, поставьте галочку обратного поля, добавьте одну подстановку и одну сводку. Проверьте схему на небольшом куске своего процесса, и только если она легла, переносите остальное.
Пока идет обкатка, Table-vakas бесплатен, тарифы еще не утверждены. Данные лежат на российских серверах, работа идет в браузере, устанавливать нечего.