Подтвердить что ты не робот

Основной вопрос дизайна NoSQL

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

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

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

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

Спасибо, Д.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Это значительно помогло решить мой вопрос!