Хранение количеств базы данных рекордное избыточный?

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

можно сделать собственный виджет формы и переопределить поле в форме, определив собственный виджет как в ответе Soviut.

существует также более короткий путь:

class ArticleForm(ModelForm):
     pub_date = DateField(widget=MyDateWidget())

     class Meta:
         model = Article

существует пример того, как записать виджеты формы, это находится где-нибудь в пакете форм Django. Это - datepicker с 3, выпадает.

, Что я обычно делаю, когда я просто хочу добавить, некоторый JavaScript к стандартному элементу ввода HTML является отпуском это способ, которым это, и измените его путем ссылки, это - идентификатор позже с JavaScript. Можно легко поймать соглашение о присвоении имен для идентификаторов полей ввода, которые генерирует Django.

можно также просто обеспечить класс для виджета при переопределении его в форме. Тогда поймайте их всех с jQuery именем класса.

6
задан nfm 4 October 2009 в 04:26
поделиться

5 ответов

Чтобы ответить на заглавный вопрос. Да, это избыточно, но нужно ли это делать, зависит от вашей ситуации.

Если у вас нет известных проблем с производительностью, подсчитывайте подсчеты и итоги на лету в своем приложении и не сохраняйте их. То есть не храните вычисленные значения, если у вас нет другого выбора.

В большинстве ситуаций вам не придется прибегать к этому и не следует.

Если вы должны сохранить вычисленные значения, сделайте следующее:

  • Не обновляйте его, увеличивая его. Пересчитывайте счетчик / общую сумму для всех данных каждый раз, когда вы их обновляете.
  • Если у вас мало обновлений, поместите код в триггер обновления, чтобы постоянно обновляйте счетчик / итоги.
  • Проблема с избыточностью в databases is that when the numbers disagree, you are unsure of which is authoritative. Add to the documentation a note that the source data is the authoritative source if they disagree and can be overwritten.
11
ответ дан 8 December 2019 в 02:53
поделиться

While it depends on the size of your database, these are the kinds of operations that databases specialize in, so they should be fast. It's probably a case of premature optimization here - you should start by not storing the totals, thus making it simpler - and optimize later if necessary.

7
ответ дан 8 December 2019 в 02:53
поделиться

Запомните изречение «Человек с одними часами всегда знает время. Человек с двумя часами никогда не уверен». Я бы сохранил производное число только в том случае, если:

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

или

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

7
ответ дан 8 December 2019 в 02:53
поделиться

Ответы Peter и JohnFx верны, вы предлагаете денормализацию вашей базы данных схемы, которая может улучшить производительность чтения, но в ущерб записи, дополнительно возлагая на разработчика (или дополнительных умников СУБД) ответственность за предотвращение несоответствий в вашем наборе данных.

ActiveRecord имеет некоторые встроенные функции для автоматического управления счетчиками на has_many отношения. Посмотрите этот Railscast на счетчиках .

4
ответ дан 8 December 2019 в 02:53
поделиться

Знаете ли вы, что простой флаг творит чудеса ActiveRecord?

class ThingOwner

# it has a column like
# t.integer things_count, :default => 0

has_many :things, :counter_cache => true

end

Что касается вопроса - да, конечно, он избыточен, я бы добавил такой счетчик, если и только if things.count доля времени слишком велика.

В противном случае это преждевременная оптимизация.

3
ответ дан 8 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

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