Советую рейтинг, выставленный пользователями, хранить в виде как минимум двух чисел: total_rating, voters_count
total_rating - суммарное кол-во пойнтов (звезд), поставленных пользователями
voters_count - кол-во проголосовавших
При таком способе мы можем корректно обновлять средний рейтинг.
Можно еще задуматься о том, чтобы хранить рейтинг в виде массива из N чисел - количество пользователей, поставивших ту или иную оценку, чтобы производить более хитрые вычисления над этими данными, например, учитывать экстремальные оценки (слишком плохие и слишком хорошие) с меньшим весом.
Далее, вычисленный рейтинг можно умножать на 1, если поле заполнено, и на 0.9, если поле пусто.
visits - тут нужно калибровать, так, книга с самым высоким показателем visits - ее рейтинг умножаем на 1, а рейтинг книги с самым низким visits умножаем на число K, где 0 <= K < 1
все остальные книги получают множитель в интервале от K до 1
Как-то так.