Я бы не стал хранить взвешенные значения в БД, вместо этого я бы использовал БД в качестве системы подсчета для 3 различных типов голосов. Вы можете иметь 1 таблицу с 3 полями в ней
Поля: Да, Нет, Может быть, все целые числа. Изначально начинайте значения полей с 0. Каждый раз, когда приходит голос, увеличивайте значение соответствующего поля.
После, сделайте взвешенную математику в вашем коде. Так же просто, как умножение числа, скажите в поле «да» на 2, чтобы получить взвешенный результат, например.
Это, конечно, если итоги голосования имеют значение, и вы не заботитесь о сохранении предпочтений каждого отдельного избирателя в отдельности.
Чтобы обеспечить уникальность, я бы сначала сделал так, чтобы пользователь зарегистрировался, чтобы вы могли пометить пользователя как уже проголосовавшего за этот конкретный опрос, чтобы он не мог голосовать снова. Они всегда могут зарегистрироваться снова, хотя. К сожалению, это сложно обойти, так как они могут просто использовать другой компьютер, прокси-сервер, или у многих людей есть динамические IP-адреса, которые просто потребуют перезагрузки модема для повторного голосования, даже если вы хранили IP-адреса, чтобы ограничить такие ситуации.