Foreign Key в документных СУБД

Как современная документная база данных решает проблему целостности данных, сохраняя гибкость NoSQL
Как современная документная база данных решает проблему целостности данных, сохраняя гибкость NoSQL

В мире enterprise-разработки мы часто сталкиваемся с дилеммой: выбрать между гибкостью документных баз данных и строгой структурированностью реляционных СУБД. Soberis представляет инновационное решение, которое объединяет лучшее из обоих миров — предлагая нативную поддержку Foreign Key в документной модели данных.

Проблема: Потерянные связи в документном мире

Традиционные документные базы данных отлично справляются с хранением денормализованных данных, но когда дело доходит до поддержания целостности связей между коллекциями, начинаются сложности:

  • Отсутствие автоматической валидации ссылок
  • Ручное управление целостностью данных
  • Сложность поддержания консистентности при изменениях
  • Риск "висячих" ссылок и некорректных данных

Решение Soberis: Foreign Key как First-Class Citizens

Два типа ссылок для разных задач

  • Document FK — для прямых ссылок на документы:
{ "userId": { "type": "string", "x-document-collection": "users" } }
  • Directory FK — для ссылок на справочные значения:
{ "status": { "type": "string", "x-directory-collection": "statuses", "x-directory-param": "code" } }

Автоматическая валидация в реальном времени

При каждой операции создания или обновления документа Soberis:

  • Проверяет существование referenced документов в коллекциях
  • Валидирует формат ObjectId для Document FK
  • Сверяет значения с параметрами Directory FK
  • Выполняет проверки асинхронно для максимальной производительности

UI Schema Builder

Frontend предоставляет визуальный инструмент для создания схем с Foreign Key:

  • Автодополнение коллекций — система автоматически предлагает доступные коллекции
  • Валидация в UI — мгновенная проверка корректности настроек
  • Типизированные поля — поддержка string, number, integer для Directory FK
  • Визуальные индикаторы — цветовые badge для быстрой идентификации типов связей

Производительность

Система оптимизирована для высоких нагрузок:

  • Параллельная валидация — все ссылки проверяются одновременно
  • Умное кэширование схем — Redis-кэш для быстрого доступа к метаданным
  • Bulk-операции — оптимизированная обработка массивов ссылок
  • Асинхронная архитектура — CompletableFuture для неблокирующих операций

Практический пример: E-commerce система

Представьте интернет-магазин с такой структурой:

Схема заказа:

{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Order", "type": "object", "properties": { "customerId": { "type": "string", "x-document-collection": "customers", "x-index": "single_field" }, "status": { "type": "string", "x-directory-collection": "order_statuses", "x-directory-param": "code" }, "products": { "type": "array", "items": { "type": "string", "x-document-collection": "products" } } }, "required": ["customerId", "status"] }

Что происходит при создании заказа:

  • Система проверяет существование клиента в коллекции `customers`
  • Валидирует статус против справочника `order_statuses`
  • Проверяет каждый товар в массиве `products`
  • Отклоняет операцию при любой некорректной ссылке

Бизнес-преимущества

Для продакт-команд:

  • Быстрая разработка — не нужно писать код валидации вручную
  • Надежность данных — гарантированная целостность на уровне СУБД
  • Простота изменений — схемы можно обновлять через UI
  • Прозрачность — все связи видны в документации API

Для бизнеса:

  • Снижение рисков — исключение ошибок целостности данных
  • Ускорение TTM — меньше времени на разработку валидации
  • Качество продукта — стабильная работа приложений
  • Масштабируемость — готовность к росту нагрузки

Заключение

Soberis доказывает, что документные СУБД могут быть такими же надежными, как реляционные, не теряя при этом свою гибкость. Foreign Key functionality в документной модели — это не просто фича, это новый стандарт для enterprise-приложений, которым нужна скорость NoSQL и гарантии ACID.

Начать дискуссию