Прошу прощения, если об этом спрашивали раньше, но я не могу найти ответа на свой вопрос о вычислении на лету и хранении полей в базе данных.
Я прочитал несколько статей, в которых говорилось, что предпочтительнее вычислять, когда это возможно, но я просто хотел бы знать, применимо ли это к следующим двум примерам.
Пример 1. Допустим, вы храните данные об автомобиле. Вы храните размер топливного бака в литрах и сколько литров он расходует на 100 км. Вы также хотите знать, сколько километров он может проехать, что можно рассчитать, исходя из размера бака и экономичности. Я вижу 2 способа сделать это:
Поскольку экономичность автомобилей / размер бака не меняется (хотя его можно редактировать), KM - довольно статичное значение. Я не понимаю, почему мы должны рассчитывать его каждый раз при доступе к машине. Разве это не трата времени центрального процессора вместо того, чтобы просто хранить его в отдельном поле в базе данных и вычислять только при добавлении или обновлении автомобиля?
Мой следующий пример, Это почти совершенно другой вопрос (но на ту же тему), связанный с подсчетом детей.
Допустим, у нас есть приложение, в котором есть категории и элементы. У нас есть представление, в котором мы отображаем все категории и количество всех элементов внутри каждой категории. Опять же, мне интересно, что лучше. Чтобы выполнить запрос MySQL для подсчета всех элементов в каждой категории каждый раз при доступе к странице? Или сохранить счетчик в поле в таблице категорий и обновлять его при добавлении / удалении элемента?
Я знаю, что хранить все, что можно вычислить, излишне, но меня беспокоит, что вычисление полей или подсчет записей может быть медленным, как в отличие от хранения данных в поле. Если это не так, дайте мне знать, я просто хочу узнать, когда использовать тот или иной метод. Думаю, в малом масштабе это не имело бы значения, но такие приложения, как Facebook, действительно ли они будут считать количество друзей, которые у вас есть каждый раз, когда кто-то просматривает ваш профиль, или они просто сохранят его как поле?
Я был бы признателен за любые ответы на оба этих сценария и любой ресурс, который может объяснить преимущества вычислений и хранения.
Заранее спасибо,
Кристиан