Учебники

MongoDB — Моделирование данных

Данные в MongoDB имеют гибкие schema.documents в той же коллекции. Им не обязательно иметь один и тот же набор полей или структуру, а общие поля в документах коллекции могут содержать данные разных типов.

Некоторые соображения при разработке схемы в MongoDB

  • Создайте свою схему в соответствии с требованиями пользователя.

  • Объедините объекты в один документ, если вы будете использовать их вместе. В противном случае разделите их (но убедитесь, что нет необходимости в соединениях).

  • Дублируйте данные (но ограниченно), потому что дисковое пространство дешевое по сравнению с временем вычислений.

  • Не присоединяйся, а пиши, а не читай.

  • Оптимизируйте свою схему для наиболее частых случаев использования.

  • У сложной агрегации в схеме.

Создайте свою схему в соответствии с требованиями пользователя.

Объедините объекты в один документ, если вы будете использовать их вместе. В противном случае разделите их (но убедитесь, что нет необходимости в соединениях).

Дублируйте данные (но ограниченно), потому что дисковое пространство дешевое по сравнению с временем вычислений.

Не присоединяйся, а пиши, а не читай.

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

У сложной агрегации в схеме.

пример

Предположим, клиенту нужен дизайн базы данных для его блога / веб-сайта, и вы увидите различия между дизайном схемы RDBMS и MongoDB. Сайт имеет следующие требования.

  • Каждый пост имеет уникальный заголовок, описание и URL.
  • Каждый пост может иметь один или несколько тегов.
  • Каждый пост имеет название своего издателя и общее количество лайков.
  • В каждом сообщении есть комментарии пользователей, а также их имя, сообщение, время и лайки.
  • На каждый пост может быть ноль или более комментариев.

В схеме RDBMS проект для вышеуказанных требований будет иметь минимум три таблицы.

Разработка схемы РСУБД

Находясь в схеме MongoDB, дизайн будет иметь одну коллекционную запись и следующую структуру:

{
   _id: POST_ID
   title: TITLE_OF_POST, 
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES, 
   comments: [	
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES 
      },
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   ]
}

Таким образом, при отображении данных в РСУБД необходимо объединить три таблицы, а в MongoDB данные будут отображаться только из одной коллекции.