В целом, я согласен с концепцией, согласно которой при хранении реляционных данных в NoSQL подход с одним документом имеет смысл на первый взгляд.Однако, когда вы начинаете копаться в этом немного больше, вы сталкиваетесь с довольно большим количеством проблем.
Первый и самый большой для меня вопрос - насколько легко запрашивать данные.В вашем примере списки сотрудников распределены по нескольким документам, достаточно глубоко вложенным в документы.Это может усложнить (и замедлить) запрос этой информации.Многие решения NoSQL обеспечивают индексацию дочерних ключей, но даже это может быть сложно для правильной настройки.
Очевидно, что вы можете настроить иерархию вложенности и переместить данные Employee на корневой уровень, как вы упомянули в ваших комментариях.,Это значительно упростит запрос сотрудников.Однако сейчас вы дублируете данные.Дублирование не является серьезной проблемой из-за дополнительных данных, это главным образом проблема согласованности данных.Что делать, если вам нужно обновить информацию для отдела или компании?Нужно ли вам просматривать все документы сотрудников и обновлять их отделы?Вы разделяете идентификаторы между этими отделами, чтобы знать, какие из них одинаковы?Как объединить данные, как только вы получите их из базы данных?
Для этого примера это абсолютно реляционные данные.Лучшее место для его хранения - реляционная база данных.Если вас беспокоит доступность, масштабируемость и т. Д. Почему бы не использовать Amazon RDS и Amazon Aurora?Конечно, стоимость будет немного выше для начала, чем для DynamoDB, но это будет отличное долгосрочное решение для реляционных данных.
Если вы настроены на использование DynamoDB, я бы сохранил данныев отдельных таблицах.Это будет самым чистым в долгосрочной перспективе.Это будет означать, что в некоторых случаях вам нужно запрашивать несколько таблиц, но вы должны быть в состоянии уменьшить это, используя BatchGetItem , который согласно документации:
возвращает атрибуты одного илибольше предметов из одной или нескольких таблиц
Надеюсь, это понимание поможет.Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь комментировать, и я сделаю все возможное, чтобы ответить!