В чем причина того, что у Django есть SmallIntegerField?

Существующие ответы устарели. Это теперь можно сделать из меню:

Окно -> Восстановить макет по умолчанию (shift + f12)

Убедитесь, что в данный момент ничего не выполняется, поскольку макет окна «Выполнить / отладка» не будет сбросить в противном случае.

30
задан odinho - Velmont 4 October 2009 в 14:55
поделиться

4 ответа

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

Я бы использовал такое маленькое целое число, например, для первичного ключа в таблице, которая всегда будет иметь <100 строк, особенно когда он хранится как внешний ключ в таблице, я ожидаю, что он станет очень большим. Хотя размер определяется реализацией, можно с уверенностью предположить, что он как минимум больше 127.

33
ответ дан 27 November 2019 в 23:55
поделиться

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

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

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

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

7
ответ дан 27 November 2019 в 23:55
поделиться

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

2
ответ дан 27 November 2019 в 23:55
поделиться

Простой способ копирования содержимого из одной таблицы в другую состоит в следующем:

UPDATE table2 
SET table2.col1 = table1.col1, 
table2.col2 = table1.col2,
...
FROM table1, table2 
WHERE table1.memberid = table2.memberid

Можно также добавить условие для копирования определенных данных.

-121--1764731-

Лично я думаю, что на этот вопрос следует ответить скорее как на вопрос о конструкции, а не как на вопрос о технологиях.

Я бы спросил: «Какой пункт в первую очередь в защищенном методе?» Был ли метод, который должны вызывать только подклассы, или же он должен переопределять подклассы? Однако это может быть метод, который не ожидается в базовом классе, но может ожидаться в подклассе. Клиенту базового класса они никогда не знали об этом защищенном методе. Создатель подкласса решил расширить контракт и теперь этот защищенный метод является общедоступным. Вопрос действительно должен быть не C++ позволяет это, но это правильно для вас класс, контракт и будущих сопровождающих. Конечно, это может быть плохой запах, но на самом деле вы должны сделать это правильно для случая использования.

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

В целом, в целях безопасности, как уже упоминался предыдущий участник, вероятно, в подклассе необходимо использовать функцию делегата (с другим именем). Так что вместо «get (int)» может быть «getAtIndex (int)» или что-то в этом роде. Это позволяет упростить рефакторинг/защиту/аннотацию/документ, который в будущем.

-121--3207963-

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

13
ответ дан 27 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: