[mysql/php] Tabela do głosowania

0

Zakładam taką tabele na głosy:

CREATE TABLE `votes` (
`v_id` MEDIUMINT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`a_id` MEDIUMINT( 8 ) UNSIGNED NOT NULL ,
`mark` TINYINT( 1 ) UNSIGNED NOT NULL ,
`ip` VARCHAR( 15 ) NOT NULL ,
`time` DATETIME NOT NULL ,
PRIMARY KEY ( `v_id` ) ,
INDEX ( `a_id` ) 
) TYPE = MYISAM ;

oraz tabela z artykułami:

CREATE TABLE `arts` (
`a_id` VARCHAR( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`mark_sum` INT( 11 ) UNSIGNED NOT NULL ,
`votes` INT( 11 ) UNSIGNED NOT NULL ,
`mark` FLOAT( 4 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `a_id` ) 
) TYPE = MYISAM

Głosy w zakresie 1-5, głosowanie raz na 24 godziny

Przy głosowaniu sprawdzam czy głosowano dzisiaj (SELECT IP ... WHERE time>NOW()-86400)
Jesli IP istnieje to wyswietlam komunikat ze juz glosowano, w przeciwnym wypadku dodaję głos
do 'votes' oraz wykonuję update 'arts' dodaję głos do sumy głosów i ilości (posiadam te dwa pola, bo chyba nie można po prostu dodwać do oceny głosu i dzielić przez 2 ;)

Czy można to optymalniej zrobić? Może typy pół w mysql mogłyby być bardziej optymalne? Albo jeszcze jakieś inne pomysły...?

0

Srednio to przydatne, bo srednia ocena artykulu to nie srednia arytmetyczna, a wazona. Lepiej liczyc na biezaco z tabeli votes. Chyba, ze przewidujesz, ze glosow bedzie mnostwo i liczenie na biezaco obciazy znacznie baze. Ale wtedy lepiej wyliczac ocene raz na jakis czas (scheduler w nocy lub co pare godzin?)

0

Nowa ocena musi pojawiać się od razu po zagłosowaniu, czyli liczenie co jakiś czas odpada

Dlaczego średnia ocena to wazona - czy dla czytelnika zrobi to az tak wielka roznice? Do tej pory zawsze liczyłem arytmetyczną...

0

A sorry, nie srednia wazona - wszystkie glosy sa rownie wazne - czyli jednak zwykla :)

Ogolnie takie rozwiazanie jak podales ma sens, jezeli tych glosow bedzie naprawde sporo (milion? 10 milionow?) - chociaz i wtedy nie wprowadzalbym osobnego pola na sama ocene (bo latwo wyliczyc z ilorazu dwoch innych pol) - zupelnie niepotrzebna redundancja.

Jezeli natomiast glosow nie bedzie tak duzo i wyliczanie ich za kazdym razem to drobiazg dla bazy, to uznalbym, ze te 2 dodatkowe pola (trzecie juz wykluczylem) sa zbytecznym utrudnieniem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1