¿Cómo modelo una base de datos donde cada objeto tiene votos?

Según su descripción, usted (generalmente) solo necesita una columna de “votos” en cada una de esas tablas. No hay razón para hacerlo más complejo que eso. Sin embargo, cómo materializas eso es un poco más interesante.

Suponiendo que necesita asociaciones de usuario-> voto, las cosas se ponen un poco más interesantes (pero no realmente). Lo mejor que puede hacer es tener una mesa de votación para cada entidad que le interese. Puede parecer demasiado normalizado al principio, pero si está utilizando una base de datos madura como Postgres, puede crear una vista que le brinde alguna forma de unificación de todas las tablas de votos dispares (si lo necesita).

La alternativa a lo anterior es tener una única tabla de votación, donde una votación tiene un tipo de entidad para que sepa a qué tabla se refiere el PK. Sin embargo, eso es bastante retorcido, y en la práctica no es muy portátil.

La otra alternativa es tener entidades polimórficas; entonces solo tiene una tabla de entidad única y una tabla de votación única. También retorcido aunque …