2013-10-26 1 views
2

У меня есть:MongoDB отношения данных

  • MongoDB База данных
  • REST API на NodeJS
  • Угловая JS FRONTEND

Теперь я хочу, чтобы создать schma базы данных , Это будет:

История - пользователь вставляет историю с описаниями.

Вопросы - отношение к истории. В одной истории может быть более 100 вопросов.

Ответы - отношение к вопросам. Один вопрос может иметь только один ответ.

Какое отношение я должен выбрать в MongoDb? Мне нужна более быстрая душа. Например:

{ 
title: "Story title", 
descr: "Story descr", 
questions: [ 
       {body: "Question body", user: "User} 
      ] 
} 
+0

Kudos для получения информации о дизайне схемы. Так много людей начинают с MongoDB и реализуют 3NF (к их возможному несчастью). +1 – SethO

ответ

2

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

stories { 
    _id 
    title 
    description 
} 

questions { 
    _id 
    storyId 
    user 
    body 
    answer { ... } 
} 

нахождение всех вопросов для истории проста (storyId должна иметь индекс), находя историю для данного вопрос тривиален. Я думаю, что answer может быть встроен. Тем не менее, будьте осторожны при одновременной записи, т. Е. Когда кто-то редактирует вопрос, а кто-то другой пишет ответ. Это намного проще при использовании одного встроенного документа, чем для массива, а количество одновременных авторов, вероятно, не более двух, а не потенциально сотни.

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

+0

Но если я хочу извлечь Историю и Вопросы, я должен сделать разлученные вызовы API? –

+0

Не обязательно. Я бы * сделал * это, чтобы все было просто (также вы могли бы сделать это параллельно, что в любом случае было бы поведением по умолчанию Углового). Но если вы действительно этого захотите, вы можете объединить результаты запроса на сервере и отправить объединенный DTO в интерфейс. Или вы имели в виду операции с базой данных с помощью «вызовов API»? В этом случае я не стал бы волноваться, они не должны быть намного медленнее, чем один звонок, и снова они могут быть распараллелены, потому что вы ссылаетесь на идентификатор истории из вопросов. – mnemosyn

+0

Я вижу, что у вас много опыта в Монго :) Я буду реализовывать этот способ, который вы предлагаете. Я также хочу внедрить систему голосования для рассказов, ответов, вопросов. Должен ли я создать для этого новый коллектив? –

Смежные вопросы