Использование Textfield с JSON вместо отношения ForeignKey? - PullRequest
0 голосов
/ 04 октября 2019

Я работаю над проектом, в котором пользователи могут бросать пулы кубиков. Пулом костей является, например, бросок с 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

1 Ответ

1 голос
/ 04 октября 2019

Распространено ли использовать текстовое поле JSON вместо связи с базой данных?

Я так не думаю. Кроме того, я не верю, что это целесообразно, потому что (особенно с использованием MySQL, который не поддерживает такие вещи, как JSONField), вы в конечном итоге получите текст, который вам затем нужно будет как-то проанализировать, а затем поискать вещи, которые выхочу.

Лично (и я предполагаю, что большинство людей) будет придерживаться отношений ФК. Кроме того, делая prefetch_related или select_related, вы уже избегаете ненужных запросов.

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