bliitz
1.05.2008, 00:44:23
Witam
Mam problem z zaprojektowanie struktury bazy w taki sposób aby można było głosować na dodany materiał. Głosować mogą tylko zalogowaniu użytkownicy. Nie mam pomysłu jak zaprojektować tabele żeby nie było redundacji danych w tej chwili ma ona taką postać i działa wszystko dobrze oprócz głosowania, czy mogłby ktoś podsunąć pomysł z tabelą do głosowania.

obecnie tabela marks ma przechowywać głosy ale chyba jednak nie pasuje do tego
ps.
to może ktoś ma jakiś link do stronki gdzie jest przedstawiony podobny problem, jak powinna wyglądać tabela takiego systemu co przechowuje oceny?

?
Sedziwoj
5.05.2008, 20:50:45
Czy ja dobrze rozumiem user może głosować na record, tak?
No to masz tabelę
user_id
record_id
ocena
UNIQUE( user_id, record_id )
Jeśli to ma być szybkie, to dodajesz statystyczną tabelę, z głosami na poszczególne pozycje i co jakiś czas aktualizujesz, bo wyliczanie średniej za każdym razem zabije serwer.
(chyba że ja nie rozumiem problemu)
bliitz
6.05.2008, 00:29:45
tak user może głosować na record, ale jak powinna wyglądać ta tabela oceny, bo to musi być tabela czy ustawić to jako pole w tabeli records, ale wtedy gdzie zapisywać ilość głosów oddanych i jak zablokować możliwość ponownego głosowania przez tego samego użytkownika?
Sedziwoj
6.05.2008, 06:42:14
Przecież podałem jak ma wyglądać taka tabela?
Masz w niej id record, user i ocenę jaką wystawiła ta osoba na ten record. Ile głosów na dany record to
SELECT count(*) FROM vote WHERE record_id = 1 GROUP BY record_id
tu na record o id = 1.
Masz też informację kto głosował na co. Cały problem to wydajność, ale na to są już różne rozwiązania.
bliitz
6.05.2008, 10:13:10
ok, a ta tabela statystyczna o której wspomniałeś wyżej i "wyliczanie co jakiś czas" czyli trzeba użyć crona do tego? czy jakiś inny sposób żeby sumowanie odbywało się co jakiś czas?
Sedziwoj
6.05.2008, 11:14:13
Można Crona, można trigger ale to przy małym obciążeniu, można też to i to, czyli triggery które robią z grubsza, wiedzą ile było głosów i jak jest średnia więc mogą aktualizować na tych informacjach, z małą dokładnością, ale wynik miej więcej będzie od razu widoczny, a Cron potem zlicz dokładniej.
(bo mi nic nie wiadomo o tym aby odpalały się jakieś rzeczy automatycznie co jakiś czas na bazie)
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.