сущности - КНИГА и ЖАНР
У каждой книги есть жанр.
Задача: нужно получить все книги по жанру. Чтобы это сделать нужно с клиента отправлять id жанра, пусть оно равно genreID
Как я понимаю, чтобы реализовать это у нас есть два варианта:
1. Хранить в сущности Книги поле genreID
либо
2. Хранить в сущности Жанра поле books, хранящее массив из bookID, принадлежащие жанру.
Реализация:
// Напомню, genreID приходит с клиента.
1. Book.find({ genreID: genreID }) => выдаст все книги, у которых поле genreID === genreID
либо
2. Genre.findById(genreID) => выдаст один Жанр. Жанр имеет поле books => можно сделать
Book.find({ _id: books })
Оба варианта, по сути, должны вернуть одинаковый результат. Но какой подход будет проще с точки зрения расширения приложения и оптимизации?
если у вас нет плана по дальнейшему развитию - как первый так и второй, так тритий и даже четвертый, кторые решают конкретные проблемы на уже разросшихся проекта с зафиксированной функциональностью. Такчто выбирайте как вам сейчас удобнее и просто закладывайте время на полную перестройку структуры БД когда все неявное оперделится
спасибо! ответ в принципе логичный. но если все таки выбирать из двух зол оптимальное?
первое, это стандартный подход в реляционных БД, который уже полвека существует и до появления проблем с производительностью и менеджерством структуры бд очень удобен. Второй уже прямо сейчас может создать для вас проблемы, т.к. почемуто при добавлении книги вам зачемто нужно обновлять данные целого жанра
вы совершенно правы. огромное спасибо за развернутый ответ!)
еще можно посмотреть немного с другой стороны, отвлеченно от БД. Жанр книги - это ее свойство, причем субъективное, в первом варианте как раз так и описываете в БД. Во втором же получается что жанр знает о книгах, т.е. условно жанр определяет какие книги к нему относятся, а не по содержимому книги мы определяем к какому жанру его отнести.
да, это так правильно и очевидно. все это было в голове в похожем виде, но никак не мог объяснить почему второй вариант плох. очень рад, что есть такие чаты и люди, как вы, готовые помогать) 🙏🏼
Думаю, лучше наоборот, в коллекции books хранить список ganreIds.
Обсуждают сегодня