Могу ли я создать отношения «многие ко многим» во встроенных документах в MongoDB? - PullRequest
0 голосов
/ 03 марта 2012

Учитывая следующую диаграмму классов: Class Diagram

Как мне подходить, какие должны быть коллекции, а какие должны быть встроены? Поскольку между Play / Scene и Play / Character существует отношение 1..N, я обычно вставляю эти документы в Play. Но случай использования заключается в том, что мне также нужно отслеживать, какие символы появляются в какой сцене. Будет ли это диктовать, что теперь Scene и Character должны быть их собственной коллекцией, или есть лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 03 марта 2012

Я думаю, что краткий ответ на ваш главный вопрос - нет. Вы не можете иметь документ, который встроен в нескольких местах. Это все равно что пытаться получить яйцо внутри двух скорлуп одновременно. В моей голове я считаю отношения mongodb луком (layer = embeds) с потоками, которые соединяются с другими луками (thread = reference). Это может быть странная аналогия, но она работает для меня.

Допустим, что персонажи - даже те, у которых одинаковые имена - уникальны для игры, в которой они находятся. Так что они будут встроены.

Сцены выглядят как яркий пример встроенного массива. У вас никогда не было бы сцены, которая появлялась в нескольких пьесах.

Внешний вид должен быть встроен в сцену по тем же причинам, что и сцены, встроенные в пьесы. Внешний вид также будет ссылаться на персонажа. Есть ли явление, которое не ссылается на персонажа? Я думаю, что нет, но не уверен.

Итак, я бы сделал это так (псевдомоделирование):

Play { 
  embeds-many Characters 
  embeds-many Scenes }  

Scene { embeds-many Appearances }

Appearance { references a Character } 

Character { }

Я думаю, что можно определенно ссылаться на Персонажа из Внешности, вам просто нужно сохранить идентификатор персонажа внутри Внешности. Следующий вопрос - на каком языке вы работаете ... Если вы в Rails, мне лично нравится Mongoid.

0 голосов
/ 03 марта 2012

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

Однако, чтобы ответить на ваш вопрос.Делать много-много на встроенном не было бы мудрой идеей, скорее всего, это повлияло бы на плохую (может быть, даже ужасную) идею.

Я бы разделил обычно включаемые объекты в отдельные таблицы.

...