vonski
20.05.2010, 10:35:09
Witam.
Mam taki problem, albo raczej dylemat.
Sprawa przedstawia się mniej więcej tak:
W bazie danych będę przechowywał pewne wartości (typu float), np. w1, w2, w3, w4, w5. Potrzebuję również sumę tych wartości. I teraz moje pytanie - czy bardziej opłaca się dorobić dodatkowe pole w bazie, np. suma i w nim przechowywać sumę tych wartości, czy lepiej dodawać je za pomocą PHP już w skrypcie? Dodam, że baza danych będzie przechowywała dużo informacji, do kilku tysięcy rekordów.
wookieb
20.05.2010, 10:38:19
W oby przypadkach nie zaszkodzi dorzucić dodatkowego pola.
berbec
20.05.2010, 10:41:04
Wiesz, generalnie raczej idzie się w stronę wydajności, bazy mają tyle wolnej przestrzeni, że mało kto wykorzystuje je na maksa.
Ale..
z drugiej strony jeśli są to proste obliczenia typu dodawanie to nie wiem czy ma to sens.
Ostatnio robiłem taką tabele, która robiła cache pewnych wyliczeń bo wyliczenia na bieżąco trwały strasznie długo. Ale jeśli chodzi o dodawanie samo czy równie proste operacje to bym się nie przejmował.
Pozdr
phpion
20.05.2010, 10:45:01
Cytat(wookieb @ 20.05.2010, 11:38:19 )

W oby przypadkach nie zaszkodzi dorzucić dodatkowego pola.
Nie zgodzę się. Wszystko zależy od tego, do czego to pole sumy będzie wykorzystywane. Jeżeli będzie to jedno z pól w warunku WHERE lub będzie używane podczas sortowania to wówczas warto dodać go jako nową kolumnę (z racji użycia indeksu, który może być na niej założony). Jeśli natomiast suma ta będzie tylko wyświetlana w celu informacyjnym to dodatkowa kolumna wydaje się zbędna. Sumę pól można obliczać nie tylko w PHP, ale i bezpośrednio na poziomie SQLa.
vonski
20.05.2010, 10:51:37
Cytat(phpion @ 20.05.2010, 11:45:01 )

Jeżeli będzie to jedno z pól w warunku WHERE lub będzie używane podczas sortowania to wówczas warto dodać go jako nową kolumnę (z racji użycia indeksu, który może być na niej założony). Jeśli natomiast suma ta będzie tylko wyświetlana w celu informacyjnym to dodatkowa kolumna wydaje się zbędna.
Dokładnie suma będzie wyświetlana jedynie w celu informacyjnym. W takim razie będę obliczał ją w locie

Dzięki wszystkim za odpowiedzi.
pzdr
croc
20.05.2010, 11:25:19
Tu nie chodzi wcale o dylemat wydajność/oszczędność miejsca tylko o wydajność/spójność danych. Pole sumy jest w porządku o ile zagwarantujesz, że będzie zawsze aktualna, a tu już łatwo o błędy. Zauważ, że np. skrypty głosowania/oceniania na dużych portalach odświeżają wyniki np. co 3 minuty. Nie wyobrażam sobie żeby liczyły sumy co każde odświeżenie. Tak naprawdę na twoje pytanie nie ma jednoznacznej odpowiedzi - zależy od rozmiaru bazy i jej obciążenia.
wookieb
20.05.2010, 11:27:55
Cytat(vonski @ 20.05.2010, 11:51:37 )

Dokładnie suma będzie wyświetlana jedynie w celu informacyjnym. W takim razie będę obliczał ją w locie

Ok więc jak przyjdzie potrzeba zsumowania tych wszystkich rekordów plus trochę operacji grupowania bądź inne to się odezwij.
Sądzę, że zdarzy się tak NA PEWNO.
vonski
20.05.2010, 21:45:43
Cytat(wookieb @ 20.05.2010, 12:27:55 )

Ok więc jak przyjdzie potrzeba zsumowania tych wszystkich rekordów plus trochę operacji grupowania bądź inne to się odezwij.
Sądzę, że zdarzy się tak NA PEWNO.
Nie, nie zdarzy się - NA PEWNO.
Crozin
20.05.2010, 22:29:10
Taki lekki OT:
Cytat
Dodam, że baza danych będzie przechowywała dużo informacji, do kilku tysięcy rekordów.
Kilka tysięcy rekordów to bardzo niewielka ilość.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.