Cytat
2. Stworzenie zmiennej która będzie aktualizowana po każdej zmianie - możliwość pomyłki, krótszy czas (np kolumny `liczba ocen` w tabeli uczen)
To jest denormalizacja i stosuje się powszechnie w celach optymalizacyjnych. Wszystko zależy od rodzaju obliczeń, częstotliwości zmiany i tego jak czesto odczytujesz daną wartość. Przykładowo jeśli ktoś dodaje post na forum do tematu raz na kilka godzin, a wyświetlenie liczby postów w tematach odbywa się co parę minut, nie ma sensu tego za każdym razem obliczać.
Sama kwestia implementacji i pomyłek.
Po pierwsze możesz to wyrzucić poza logikę aplikacji i zrobić triggery w bazie, które będą aktualizować same wszystkie pola w zależności od zapytań idących do bazy.
Po drugie nie zawsze musisz inkrementować wartość o jeden po akcji dodającej. Jeśli zapis jest rzadki, odczyt częsty i nie do końca chcesz tworzyć całą logikę związaną z inkrementacją, zawsze możesz puścić COUNT po stworzeniu rekordu i zapisać tę wartość, co zwróci.