Нужна помощь Понимание организации данных Mongo DB - PullRequest
1 голос
/ 24 июня 2011

Я пытаюсь понять концепцию хранения документов и не понимаю, как это применимо к некоторым ситуациям.Например, в случае CMS / движка блога могут быть данные в виде:

  • Сообщений
  • Категории
  • Пользователи
  • Комментарии

В чем-то вроде MySQL можно иметь таблицу для каждого, а затем таблицу соединения для каждого набора связанных данных.то есть posts_table, categories_table, categories_posts_table

В этом случае posts_table будет содержать почтовые данные, categories_table будет содержать данные категорий, а categories_posts_table будет содержать 2 внешних ключа, используемых дляпривязать определенную категорию к определенному сообщению.

Как это переводится в нечто вроде mongodb?

Единственный способ увидеть, как эта установка структурирована в монго, это что-то вроде:

  • posts_collection

Вывод одного документа bson может выглядетьпохоже на:

  {
     "title" : "title",
     "body" : "blah body",
     "categories" : [
                 "category1",
                 "category2"
               ]
  }

Это имеет смысл, но кажется, что категории будут дублироваться повсюду.Без какого-либо отношения вы никогда не сможете просто изменить название категории и отразить его во всех ваших сообщениях в блоге (?).

Кроме того, что, если бы это были двоичные документы, занимающие много места?Вместо дублирования одного и того же изображения снова и снова кажется, что отношения будут работать лучше?

Думаю, это довольно открытый вопрос, но я искал чей-либо вклад в то, как я должен мысленно разобрать проблему, чтобыскажите, должно ли это соответствовать БД, как Монго или нет.И не менее важно, как правильно структурировать данные?

Я не затрагивал пользователей, но кажется, что ВСЕ в этом случае в конечном итоге окажется встроенным документом в коллекции пользователя, так как пользователь запускает все.

большое спасибо.

1 Ответ

3 голосов
/ 24 июня 2011

Что интересно в базах данных документов, так это то, что вам действительно нужно подумать о том, как будут использоваться ваши данные.Хранение одной и той же информации в нескольких местах (денормализация) прекрасно в базе данных документов.Таким образом, вы правы, когда говорите, что может иметь корневой User документ со всем остальным, встроенным в него.

Из моего ограниченного опыта не существует "правильного" способа моделированияконкретный набор данных, это больше о том, как эти данные будут использоваться в будущем.

Можно ссылаться на другие документы.Например, если вы хотите коллекцию Posts и каждая Post ссылается на документ User в коллекции Users.Взгляните на эту статью о Embed vs. Reference .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...