Подтвердить что ты не робот

Какая причина, почему Django имеет SmallIntegerField?

Мне интересно, почему это было сделано. Поле зависит от базы данных, не делает ли это полностью ненадежным использование?

Я хочу хранить год рождения в модели, вроде как

class Person(models.Model):
  name = models.CharField(max_length=256)
  born = models.IntegerField()

Конечно, это требует очень мало места, оно должно всегда быть 4 "символами" длинным, поэтому PositiveSmallIntegerField мог бы поместиться, но почему я должен выбирать его вместо обычного IntegerField?

4b9b3361

Ответ 1

Производительность многих RDBM может сильно зависеть от размера строки. В то время как "пуристский" подход может сказать, что приложение должно быть полностью независимым от базовой структуры данных, во многих улучшениях строк, таких как использование меньшего целого числа, можно бреять гигабайты с размера таблицы, что делает большую часть таблицы подходящей в памяти, что резко улучшает представление. Это B часть

Ответ 2

Это не совсем ненадежно. SMALLINT является частью стандарта SQL, и, конечно, MySQL и PostgreSQL имеют небольшие целые типы, которые идут от -32768 до +32767.

Ответ 3

Это одна из тех вещей, которая так и есть, потому что это так.

Django поддерживает SmallIntegerField, потому что Django вырос на PostgreSQL, а PostgreSQL поддерживает smallint. Документы PosgreSQL говорят

Тип smallint обычно используется только в том случае, если пространство на диске превзошло.

Пока это кажется странным, когда в магазине углов можно хранить 1 ТБ диски, это было не так давно, когда диски были намного меньше, стоимость которых значительно превышала байт. Память тоже. Использование небольшого интервала (в случае необходимости) в индексе означает установку большего количества индексов строк в кеш оперативной памяти, что означает лучшую производительность.

Ответ 4

Вы выбрали SmallIntegerField, если хотите сохранить место в базе данных. Предел для значения зависит от базы данных, но это не делает его ненадежным. Это просто означает, что вам нужно знать, какую систему баз данных вы используете, и выяснить, какой предел для этой системы.

Ответ 5

Год - дата, не заботясь о месяцах и днях. Выберите DateField и, следовательно, наслаждайтесь всеми возможностями, которые предоставляет Django. Поскольку вы храните рожденные да, это также позволяет вам в будущем просто принимать месяцы и дни.