![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%) ![]() ![]() |
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 1 Dołączył: 25.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 144 Dołączył: 22.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%) ![]() ![]() |
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... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Jakie dane powiela tabela results? A raczej: gdzie indziej przechowujesz wyniki?
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%) ![]() ![]() |
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. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
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. -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%) ![]() ![]() |
okej, dzięki.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 00:55 |