Булев атрибут или новая таблица (Django + PostgreSQL) - PullRequest
0 голосов
/ 12 марта 2019

Ситуация: у меня есть набор книг. Книга может быть одного из типов: «Тест», «Премиум» и «Общий». Данные пропорциональны: 2%, 15%, 83%. Запрос суммы за единицу времени (в процентах): 40%, 20%, 40%

Я вижу несколько способов разрешения проблемы в базе данных:

  1. Boolean: is_test, is_premium. Если нам нужна только книга «Тесты»: Book.objects.filter(is_test=True). Это может быть модель прокси, например. Аналогия для премиальных книг;
  2. Раздельные таблицы: books_test, books_premium, books_common.
  3. Поле выбора: строка в ['Test', 'Premium', 'Common'];
  4. Объедините 1 и 2: таблица books_test и таблица книг с атрибутом is_premium.

И нам нужно оптимально запросить эти данные! Все три варианта Книги нужны на одной странице. Существуют комбинации наборов запросов: только тесты, только общие, общие + премиум, только премиум.

  • Если мы используем 1,3 варианта: 1 конечная точка с определенным фильтром;
  • Если мы используем 2 варианта: одна из конечных точек дерева без фильтров (внешний интерфейс должен знать, какую конечную точку использовать). Или мы можем создать одну конечную точку с некоторыми условиями и проверить ее бэкэндом. В любом случае: нужно расширить логику;

Какой путь более правильный и почему?

1 Ответ

0 голосов
/ 12 марта 2019

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

Это оставляет вам поле выбора или отдельную модель BookType, содержащую варианты выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...