Данные в 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 данные будут отображаться только из одной коллекции.