NoSQL-это многие-ко-многим

каков принятый шаблон для обработки отношений "многие ко многим" в дизайне базы данных документов?

2 ответов


как вы хотите, чтобы модель "многие ко многим" будет зависеть от того, какие запросы вы хотите спросить, как вы хотите обновлять данные и т. д... Скажем, у нас есть foos, связанные с барами во многих и многих моде.

вы могли бы моделировать foo как

{
   'bars': ['bar1', 'bar2', 'bar3']
}

и моделируйте бар как

{
   'foos': ['foo_x', 'foo_y', 'foo_z']
}

или вы можете смоделировать график или отношения между foo и bar как отдельные документы сами

{
    from: 'foo1',
    to: 'bar1'
}

{
   from: 'foo1',
   to: 'bar2'
}

{  
   from: 'foo2',
   to: 'bar3
}

{
  from 'foo3',
  to: 'bar3'
}

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


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

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

Если вы запустите в случаях, когда этот список становится слишком длинным, вы, скорее всего, смотрите на то, что было бы лучше обработано индексированием поиска, чем отношениями.