Привет! Подскажите пожалуйста, как будет корректнее: к примеру, есть две

сущности - КНИГА и ЖАНР

У каждой книги есть жанр.
Задача: нужно получить все книги по жанру. Чтобы это сделать нужно с клиента отправлять id жанра, пусть оно равно genreID

Как я понимаю, чтобы реализовать это у нас есть два варианта:
1. Хранить в сущности Книги поле genreID
либо
2. Хранить в сущности Жанра поле books, хранящее массив из bookID, принадлежащие жанру.

Реализация:
// Напомню, genreID приходит с клиента.
1. Book.find({ genreID: genreID }) => выдаст все книги, у которых поле genreID === genreID
либо
2. Genre.findById(genreID) => выдаст один Жанр. Жанр имеет поле books => можно сделать
Book.find({ _id: books })

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

7 ответов

13 просмотров

если у вас нет плана по дальнейшему развитию - как первый так и второй, так тритий и даже четвертый, кторые решают конкретные проблемы на уже разросшихся проекта с зафиксированной функциональностью. Такчто выбирайте как вам сейчас удобнее и просто закладывайте время на полную перестройку структуры БД когда все неявное оперделится

Амир- Автор вопроса
Nick
если у вас нет плана по дальнейшему развитию - как...

спасибо! ответ в принципе логичный. но если все таки выбирать из двух зол оптимальное?

Амир
спасибо! ответ в принципе логичный. но если все та...

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

Амир- Автор вопроса
Nick
первое, это стандартный подход в реляционных БД, к...

вы совершенно правы. огромное спасибо за развернутый ответ!)

Амир
вы совершенно правы. огромное спасибо за развернут...

еще можно посмотреть немного с другой стороны, отвлеченно от БД. Жанр книги - это ее свойство, причем субъективное, в первом варианте как раз так и описываете в БД. Во втором же получается что жанр знает о книгах, т.е. условно жанр определяет какие книги к нему относятся, а не по содержимому книги мы определяем к какому жанру его отнести.

Амир- Автор вопроса
Nick
еще можно посмотреть немного с другой стороны, отв...

да, это так правильно и очевидно. все это было в голове в похожем виде, но никак не мог объяснить почему второй вариант плох. очень рад, что есть такие чаты и люди, как вы, готовые помогать) 🙏🏼

Амир
да, это так правильно и очевидно. все это было в г...

Думаю, лучше наоборот, в коллекции books хранить список ganreIds.

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта