MongoDB: эффективный дизайн схемы со встроенными документами - PullRequest
1 голос
/ 25 августа 2011

Я очень новичок в NoSQL и пытаюсь обернуть голову вокруг него.В качестве примера я пытаюсь разработать схему для простого блога, авторы которого имеют посты с комментариями.Примерно так:

Author
name : String,
email : String,
posts : [Post]

Post
title : String,
body : String,
comments : [Comment]

Comment 
commenter : String,
comment : String

Так что, похоже, это самый ненормализованный способ проектирования схемы.Это прекрасно работает, когда я хочу получить список сообщений авторов, но у меня возникают проблемы, когда я пытаюсь запросить сообщение по его заголовку.Это возвращает объект автора и все сообщения этого автора.Затем я могу искать в сообщениях то, что хочу, но это кажется неэффективным.

Каков наиболее эффективный способ обработки схем такого типа?Должен ли я иметь только объект Posts и сделать автора полем (или встроенным документом) в объекте Post?Или, может быть, лучше хранить данные в нескольких местах?

Я потратил столько лет, пытаясь нормализовать реляционные базы данных, что, похоже, я не могу думать по-NoSQL.Любой совет будет оценен.

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Денормализация не означает, что внешние ключи запрещены.

Я думаю, у вас обязательно должна быть ссылка на вашего автора по Id. Тем не менее, и именно здесь начинается денормализация, вы хотите сохранить имя автора в Author и в Post объектах. Таким образом, вам не нужно присоединяться к коллекциям Author и Post.

Post
  title: string
  body: string
  authorName: string
  authorId: [id of author]
  comments: list of [Comment]
  created: date
  modified: date

Author
  name: string
  email: string

Comment
  subject: string
  body: string
  author: string (if you want anon comments)
0 голосов
/ 25 августа 2011
Post
 title: String
 author: String
 comment: String
 posted: Date

Author
 name: String
 email: String

Если «ядром» вашей модели здесь является пост, то почему бы не сделать это так, номер один . Вы можете искать сообщения по названию, автору и дате.

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