Salut,
Comme ça, à froid, je dirais que le seul moyen d'arriver à bout de la question 1 est de permettre à l'utilisateur de "lier" ses comptes lui même, automatiser la tâche est tout simplement impossible pour les raisons que tu cites.
En plus de ça, même si les noms et prénoms sont les mêmes, ça peut très bien être deux personnes différentes, "il n'y a pas qu'un âne qui s'appelle Martin".
Le seul moyen d'être sur que la personne est bien la même est de se fier à l'adresse eMail.
Donc, ce que je propose ;
Si l'adresse eMail est la même :Automatiser la liaison (ou du moins, proposer une liaison automatique des comptes).
Sinon : Proposer une option pour le faire manuellement.
Pour la 2, ce que moi je ferais;
Créer une table Votes avec l'adresse eMail de l'utilisateur, l'id de la Pizza et la date du vote, ce qui te permettra ensuite de faire un truc du genre;
Si la personne a déjà voté pour une pizza durant le mois en cours, lui interdire de re-voter, jusqu'au mois prochain par exemple.
Tu peux donc permettre aux utilisateurs de voter pour plusieurs pizzas mais jamais deux fois pour la même, même si ses comptes ne sont pas liés.
Par contre, tu ne seras jamais à l'abris d'une même personne qui crée deux comptes avec deux adresse eMail différentes mais cela restera suffisamment peu fréquent pour ne pas affecter les statistiques.
Donc, couplé à la solution 1, je pense que c'est un bon moyen pour rendre les votes les plus fiables possibles.