@Igorello74

Choices или ForeignKey: что использовать?

Добрый день! Подскажите, пожалуйста, люди добрые, что лучше использовать: choices или ForeignKey? Представим ситуацию, есть у объекта Item (вещь) поле unit (единица измерения), каким мне надо его сделать?
Если я сделаю при помощи choices, то, как по мне, будет неудобно редактировать название уже существующей единицы измерения или добавлять новую.
Если же я сделаю это при помощи ForeignKey, то, мне кажется, понизится производительность из-за дополнительных запросов в базу.
Объясните, пожалуйста, какое из двух зол меньшее?

Код с choices
#...
class Item(models.Model):
    #...
    UNIT = (
        ("кг", "килограммы"),
        ("м", "метры"),
        ("мм", "миллиметры")
    )
    #...
    unit = models.CharField(choices = UNIT)
    #...
Код с ForeignKey
#...
class Item(models.Model):
    #...
    unit = models.ForeignKey("Unit")
    #...
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@pyHammer
Если считаете, что будете довольно часто изменять или добавлять единицы измерения, то используйте ForeignKey. По части производительности, добавляйте к запросам prefetch_related, очень хорошая вещь, + 1 запрос ни как не повлияет на производительность. Но там тоже есть свои нюансы, это нужно учитывать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
OnYourLips
@OnYourLips
Преждевременная денормализация - антипаттерн.
Судя по вашему описанию задачи, вам нужен ForeignKey, просто жадно подтягивайте связанную сущность.
Ответ написан
alternativshik
@alternativshik
я лично вообще не вижу смысла держать в базе choices если они постоянны и максимум - это через год вы добавите там километры...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы