Как лучше всего организавать хранение &quot;нравица&quot;-&quot;не нравица&quot; для статей или постов в базе данных?
Ну если нужно только считать, то вполне достаточно просто добавить поле rating в таблицу со статьей и увеличивать / уменьшать ее значение программным образом.

Таблица нужна только тогда, когда требуется накладывать ограничения по времени, ай-пи адресу и пр. Хорошим тоном считается не хранить ай-пи адрес в виде строки, а записывать его числовое значение (если пишете на php — php.net/manual/en/function.ip2long.php).

Причем при выводе ленты новостей весьма полезно аггрегированное значение рейтинга таки хранить в отдельном поле в таблице статей — что бы не пересчитывать его каждый раз. Обновлять его можно триггером на стороне СУБД или программно.
по ip не очень хорошо т.к. некоторые провайдеры на кучу пользователей сразу вешают 1 ip, а у пользвателей мобильного интернета так вообще часто 1 ip на всех

Имхо дучше ставить куку с каким-нибудь уникальным токеном и по ней смотреть, чем по ip