Как база данных на основе документа и CouchDB в частности обрабатывают ссылки на идентификаторы? - PullRequest
0 голосов
/ 07 марта 2012

Мне очень нравится основанный на документе подход хранения данных, таких как сообщения в блоге, как целого документа со всей необходимой информацией, сохраненной в нем.Поэтому имя пользователя автора хранится в виде простого текста.У самого автора есть собственный документ с прикрепленной к нему личной информацией.Что происходит, когда автор решает сменить имя пользователя?Нужно ли обновлять каждый документ, содержащий сообщение в блоге этого автора, или это только один из недостатков использования базы данных на основе документов?

Спасибо за любые предложения!

1 Ответ

1 голос
/ 09 марта 2012

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

если имя предназначено только для информации (я имею в виду, что вы не запрашиваете содержание блога, например ключевые слова и имя автора), вы можете добавить идентификатор в документ блога (и, конечно, теперь можете запрашивать содержимое блога).AND author-id) и emit {'_id': doc.author_id} в качестве значения.include_docs=true затем дает вам документ автора (и больше не blogpost-doc .. вы должны называть его явным с идентификатором, который находится в строках результата). Нет необходимости обновлять посты блога.

Пример: Случай 1: При использовании Автор по имени необходимо указать имя и, следовательно, обновить ВСЕ документы.

{
 "_id":"blogpost1",
 "author":"Oliver",
 "keyword":"couchDB"
}

для поиска всех сообщений couchdb от oliver:

emit ([doc.author,doc.keyword],1) 

вызов:

&key=["Oliver","couchDB"]

Случай 2: Нет необходимости запрашивать поимя

    {
     "_id":"blogpost1",
     "author_id":"author-123",
     "keyword":"couchDB"
    }

   emit (doc.keyword,{'_id':doc.author_id})

и авторы документа:

{
"_id":"author-123",
"name":"Oliver"
}

звонок:

?key=["couchDB"]&include_docs=true

результат:

...
{"id":"blogpost1","key":"couchDB","value":{"_id":"author-123"},"doc":{"_id":"author-123","_rev":"xxx","name":"Oliver,....
...