в MongoDB и стоит ли вообще.
Предположим, у меня есть пользователь, он может создавать публикации. На публикации можно реагировать(лайк) и писать комментарии, на которые тоже можно реагировать(лайк).
Насколько я понимаю, в нереляционных документоориентированных базах данных является нормальной практикой вставлять некоторых данные прямо в документ. Однако я читал также данную доку, вроде бы реализуется вполне реляционный подход: https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
Я сначала рассматривал мысль о том, чтобы сделать в документе пользователя массив ссылок на посты, но теперь склоняюсь к тому, чтобы у каждого поста была ссылка на пользователя. Думаю, это достаточно логично. Но теперь есть другой вопрос: стоит ли так делать с комментариями/лайками?
На данный момент я предполагаю в документе поста сделать массив ссылок на пользователей, который будет обозначать лайки, а также массив объектов комментариев, с точно таким же полем массивом ссылок на пользователей для лайков, не выделяя комментарий в отдельную коллекцию.
Стоит ли делать так или всё же создать отдельную коллекцию для комментариев?
для начала определитесь что к чему принадлежит и что будет происходить когда чтото будет удаляться, думаю тут все встанет свои места само собой. Могу сказать что лишний раз работать с массивами, тем более вложенными в другие массивы будет не всегда просто, а то и невозможно для некоторых вещей, которые захочется провернуть, поэтому массивами не увлекайтесь. В вашем случае органичным видятся три коллекции - юзеры, посты, комменты. У поста есть автор, у коммента есть автор и ссылка на пост + возможно на родительский коммент, если будете деревья строить - чистая реляционщина. А вот лайки уже можно в виде массивов в постах и комментах для упрощения жизни (хотя упрощение только таким кажется)
Ну, на самом деле это не слишком серьёзный проект и ни посты, ни комментарии удаляться не будут. :) Посты меняются комментариями и лайками, так что это точно хорошая идея отделить их от пользователя, хотя это и так понятно, был вопрос лишь как. А так, комментарии, к примеру, даже меняться не будут, не то что удаляться. Но в принципе, меня всё равно больше интересовала правильная структура для документоориентрованной бд, нежели использовать отсутствие необходимости в определённой функциональности в проекте. В любом случае спасибо за развёрнутый ответ
Заюзать трай кэтч и асинк авэит
Обсуждают сегодня