Вопрос с собеседования · Базы данных

Почему в документных БД схему проектируют от запросов, а не нормализуют как в реляционной?

MiddleДокументные БДMongoDB
Ещё спрашивают так:
  • Почему в MongoDB не нормализуют данные?
Коротко

В документной базе нет дешёвых JOIN, поэтому схему денормализуют под основные запросы: так, чтобы запрос обслуживался одним документом.

  • Начинают со списка запросов, а не с сущностей
  • Плата — дублирование и синхронизация копий
  • Нормализация остаётся там, где данные часто меняются и читаются отдельно

А ещё Тот же принцип в Cassandra и DynamoDB

Подробно

В реляционной модели нормализация убирает дублирование, а join-ы дёшевы. В документной БД join-ов между коллекциями либо нет, либо они дороги ($lookup), поэтому оптимизируют под чтение: связанные данные дублируют/вкладывают так, чтобы основной запрос обслуживался одним документом. Плата — контролируемая денормализация: при изменении продублированных данных их надо обновлять в нескольких местах (или мириться с устареванием). Поэтому сначала определяют ключевые запросы, потом схему — это обратный порядок относительно реляционного дизайна.

Что хотят услышать

  • Почему проектирование от запросов.
  • Цена денормализации.
  • Где нормализация всё ещё уместна.

Частые ошибки

  • Слепо нормализовать документную схему «как в SQL» и упереться в дорогие $lookup.
  • Забывать про стоимость обновления продублированных данных.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Потому что документные БД не умеют хранить связи в принципе
  • ✗Движок сам денормализует данные при записи, поэтому ручная нормализация лишь дублирует его работу и мешает
  • ✗Потому что документы всегда меньше реляционных строк
  • ✓Join-ы между коллекциями дороги, поэтому данные раскладывают под типовой запрос, допуская денормализацию

Что спросят дальше

  • Что такое $lookup и почему он дорог?
  • Как бороться с устареванием продублированных данных?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования