Ситуация: у меня есть набор книг. Книга может быть одного из типов: «Тест», «Премиум» и «Общий». Данные пропорциональны: 2%, 15%, 83%. Запрос суммы за единицу времени (в процентах): 40%, 20%, 40%
Я вижу несколько способов разрешения проблемы в базе данных:
- Boolean: is_test, is_premium. Если нам нужна только книга «Тесты»:
Book.objects.filter(is_test=True)
. Это может быть модель прокси, например. Аналогия для премиальных книг;
- Раздельные таблицы: books_test, books_premium, books_common.
- Поле выбора: строка в
['Test', 'Premium', 'Common']
;
- Объедините 1 и 2: таблица books_test и таблица книг с атрибутом is_premium.
И нам нужно оптимально запросить эти данные! Все три варианта Книги нужны на одной странице. Существуют комбинации наборов запросов: только тесты, только общие, общие + премиум, только премиум.
- Если мы используем 1,3 варианта: 1 конечная точка с определенным фильтром;
- Если мы используем 2 варианта: одна из конечных точек дерева без фильтров (внешний интерфейс должен знать, какую конечную точку использовать). Или мы можем создать одну конечную точку с некоторыми условиями и проверить ее бэкэндом. В любом случае: нужно расширить логику;
Какой путь более правильный и почему?