Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] struktura bazy, system oceniania
bliitz
post 1.05.2008, 00:44:23
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

Ostrzeżenie: (0%)
-----


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?questionmark.gif?

Ten post edytował bliitz 3.05.2008, 14:28:01


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 5.05.2008, 20:50:45
Post #2





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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)


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
bliitz
post 6.05.2008, 00:29:45
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 6.05.2008, 06:42:14
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
  1. 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.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
bliitz
post 6.05.2008, 10:13:10
Post #5





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 6.05.2008, 11:14:13
Post #6





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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)


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 02:50