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 - два один для многих отношений.
ключевое различие заключается в том, что у вас есть многозначные поля, поэтому вместо третьего документа/таблицы, записывающего одиночные соединения как пару идентификаторов, у вас есть список идентификаторов в каждом документе.
Если вы запустите в случаях, когда этот список становится слишком длинным, вы, скорее всего, смотрите на то, что было бы лучше обработано индексированием поиска, чем отношениями.