Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyniki egzaminów
Forum PHP.pl > Forum > PHP
Omenomn
Cześć, potrzebuję wyświetlić na stronie wyniki testów rozwiązywanych w aplikacji i zastanawiam się, czy zapisywać je po rozwiązaniu testu przez użytkownika do bazy danych, czy dynamicznie je wyliczać?

Aktualnie mam tabelę z results z różnymi polami, np. ilość pytań łączna, ilość pytań poprawnych poprawnych, ilość pytań błędnych, zdany (true/false), wynik w procentach itd.

Rozwiązanie to jest pod względem szybkości dość dobre według mnie, bo przy wyświetlaniu po prostu pobieram rekordy z bazy.
Natomiast jest to jednak powielanie danych w bazie, bo wszystkie te pola mógłbym wyliczać dynamicznie w mysql i pytanie do Was, które rozwiązanie jest lepszą praktyką, wiem, że powielanie danych w bazie, nie jest dobrą praktyką, jak sądzicie?
charzak
Nie wiem czy inni się ze mną zgodzą ale jeśli nie jest to duży projekt to ja bym dodał kolejną kolumnę z obliczonym wynikiem egzaminu. Gdy potrzebny jest sam wynik pobieramy tylko wynik, natomiast gdy zajdzie potrzeba wyświetlenia szczegółowych informacji pobieramy cały rekord lub interesujące kolumny.
ohm
Jeśli nie masz zmieniających się warunków do wyliczeń, to jak najbardziej zapisuj wyniki i wyświetlaj tylko wyniki. Ewentualnie, jak nie chcesz zapisywać tego w bazie, to użyj jakiegoś memcache'a.
Omenomn
Charzak, nie w tym tkwi rzecz tak mi się zdaje, bo przechowuję wynik egzaminu w tabeli results, tylko kwestia tego, że tabela result tak na prawdę powiela dane, bo mógłbym te wszystkie kolumny generować sobie dynamicznie selectem zaawansowanym i wtedy nie ma powielania danych w bazie i mniejsze ryzyko błędów, sam nie wiem.

Może ten temat w bazach danych powinienem był umieścić, a nie w php...
trueblue
Jakie dane powiela tabela results? A raczej: gdzie indziej przechowujesz wyniki?
Omenomn
wyniki zliczane są na podstawie tego czy ilość poprawnych odpowiedzi udzielonych przez usera na pytanie jest równa ilości poprawnych odpowiedzi zaznaczonych przez tworzącego test i czy ilość niepoprawnych odpowiedzi jest równa zero.

Relacje w bazie danych są dość skomplikowane, ale w każdym razie po zakończeniu testu mam zapytanie, które podsumowuje wszystkie pytania i dodaje wyliczone pole correct, którego wartość to 1 - poprawne, 0 - niepoprawne lub null, jeśli pytanie wymaga sprawdzenia przez admina.

Na podstawie tego zapytania tworzę rekord w tabeli results, gdzie przechowuję ilość pytań, aktualny wynik, czy zdany, czy nie itd.

Mógłbym selectem obliczać na podstawie udzielonych odpowiedzi przez użytkownika, czy zaliczył, czy nie i resztę kolumn, a w results przechowywać jedynie id testu i id użytkownika, żeby mieć informacje o zakończonym teście.

Sam nie wiem.
trueblue
Czyli Twoje pytanie sprowadza się do tego, czy przechowywać końcowy wynik, tak?
Jeśli ten wynik jest gdzieś wykorzystywany/wyświetlany po teście, to nie zaszkodzi go przechowywać, tym bardziej, że, jak piszesz, procedura jego wyliczania jest dosyć skomplikowana.
Omenomn
okej, dzięki.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.