Основной вопрос оформления документа NoSQL - PullRequest
12 голосов
/ 25 января 2011

Я пытаюсь выяснить, как наилучшим образом реализовать это для моей системы ... и вывести свою голову из пространства СУБД на данный момент ...

Часть моей нынешней БД имеет три таблицы:Show, ShowEntry и Entry.По сути, ShowEntry - это объединяющая таблица «многие ко многим» между Show и Entry.По моему мнению, СУБД вполне логично, поскольку любые изменения в Show details могут быть сделаны в одном месте, и то же самое с Entry.

Как лучше всего отразить это в хранилище на основе документов?Я уверен, что нет единого способа сделать это, но я не могу не подумать, подходит ли хранилище на основе документов для этого случая.

К вашему сведению, в настоящее время я рассматриваю возможность внедрения RavenDB.Хотя обсуждения общего дизайна NoSQL будут хорошими, более сфокусированный на RavenDB будет фантастическим!

Спасибо, Д.

Ответы [ 2 ]

21 голосов
/ 31 января 2011

При моделировании отношения «многие ко многим» в базе данных документов вы обычно сохраняете коллекцию внешних ключей только в одном из документов. Выбранный вами документ в значительной степени зависит от того, в каком направлении вы намереваетесь пройти отношения. Обход одного пути тривиален, обход другого требует индекса.

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

Вы по-прежнему можете просматривать отношения в противоположном направлении (например, находить корзины, содержащие определенный элемент), используя индекс, но индекс будет обновляться в фоновом режиме, поэтому он не всегда будет точным на 100%. (Вы можете подождать, пока индекс станет точным с помощью WaitForNonStaleResults, но эта задержка будет отображаться в вашем пользовательском интерфейсе.)

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

7 голосов
/ 27 января 2011

Это прошло долгий путь к решению моего вопроса!

...