Я работаю над проектом, в котором пользователи могут бросать пулы кубиков. Пулом костей является, например, бросок с 3 красными кубиками, 2 синими и 1 зелёным . Пул состоит из нескольких кубиков и модификаторов.
У меня есть 3 модели, связанные таким образом:
class DicePool(models.Model):
# some relevant fields
class DiceRoll(models.Model):
pool = models.ForeignKey(DicePool, on_delete=models.CASCADE)
# plus a few more information fields with the type of die used, result, etc
class Modifier(models.Model):
pool = models.ForeignKey(DicePool, on_delete=models.CASCADE)
# plus about 4 more information fields
Теперь, когда я загружаю историю DicePool
, мне нужно предварительно выбрать обеDiceRoll
и Modifier
.
Сейчас я рассматриваю замену модели Modifier
на текстовое поле, содержащее JSON в DicePool
. Просто чтобы уменьшить количество запросов к базе данных.
Часто ли используется текстовое поле json вместо связи с базой данных?
Или я считаю, что это неправильнои это совершенно нормально делать дополнительные запросы к prefetch_related каждый раз, когда я загружаю свои пулы?
Я лично нахожу, что использую очиститель ForeignKey, и это позволит мне при необходимости вносить изменения в данные в БД. Но мой код делает слишком много запросов к базе данных, и я пытаюсь понять, где я могу его улучшить.
К вашему сведению: я использую MySQL