Pour la modélisation de données, il est généralement important de savoir ce que les choses signifient.
Est-ce qu'un vote up ET un vote négatif sur la même chose par la même personne sont les mêmes que l'absence de vote du tout par une personne sur une chose?
Dans tous les cas, il est certainement possible (avec une indexation appropriée pour les performances) de l'avoir dans une seule table pour faciliter la gestion. En plus de cette table de base, vous pouvez ajouter des vues UpVote et DownVote.Ou vous pouvez aller dans l'autre sens et avoir deux tables de base avec une seule vue Votes pour plus de commodité.
Généralement, avoir deux tables signifie maintenant deux ensembles d'intégrité référentielle, deux schémas de table semi-identiques à maintenir, et une vue pas tout à fait unifiée des données. Cela signifie également que vous devrez avoir deux plans d'archivage et/ou de partitionnement pour gérer l'historique, etc.
Cela ne veut pas dire que c'est faux, mais si les entités sont très similaires, les modéliser dans une seule table fait souvent beaucoup de sens.
Parfois, les entités peuvent sembler similaires, mais en réalité, elles ne le sont pas vraiment et elles devraient être modélisées dans des tables séparées. Citations, bons de commande et factures me viennent à l'esprit ici. Beaucoup de gens aiment mettre deux ou plusieurs de ces choses dans la même table, et c'est vraiment une mauvaise idée.
Je ferais: PK ID, FK utilisateur, Vote BIT (où 1 est en hausse de vote et 0 est en baisse de vote) – BrunoLM
@BrunoLM: Vous êtes autorisé à faire les deux, c'est le catch. –
Eh bien, vous ne devriez pas le faire dans deux tables, IMO c'est juste inutile et ne ferait qu'accumuler le même type de données à différents endroits, je ne vois pas comment cela pourrait être utile du tout. – BrunoLM