Одна большая модель против маленьких моделей с отношением по внешнему ключу - Django

Простите за глупый вопрос, но я не могу понять, что я должен здесь использовать. Кроме того, я новичок в этом.

База данных - это своего рода страница профиля спортивного игрока в целом, что-то вроде Википедии.

Поля типа 1, такие как имя, команда, DOB, роль, страна, общий выигрыш, игрок матча (раз), и все эти основные поля Char и Int.

Поля типа 2: Ранняя жизнь, история карьеры, чистый капитал, история матчей, и все эти поля, для которых требуется текстовое поле (каждое в отдельном поле для повторного использования в других местах).

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

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

Прием 2: Создайте небольшие модели для каждого типа TextField, например, история карьеры в разных моделях и чистая стоимость в разных моделях, а затем свяжите их с иностранными. (Кажется нормальным для их собственных отдельных страниц, но когда они вызывают все эти 15-20 моделей на профиле с таким количеством запросов, не повредит ли это производительности?)

Есть ли что-то еще, что я могу или должен реализовать для бэкапа или UI, чтобы уменьшить нагрузку (если есть что-то?), например, react и rest framework, или что-то еще

Вы можете использовать второй упомянутый вами подход.

Для уменьшения запросов можно использовать select_related и указывать при фильтрации внешние ключи, связанные с моделью.

Подробнее вы можете прочитать в документах Django: https://docs.djangoproject.com/en/4.0/ref/models/querysets/

Вернуться на верх