Sistema di voto come Stack Exchange

3

Sto cercando di creare un sistema di voto come Stack Exchange. Devo creare una tabella e inserire valori come segue e quindi riassumere il "voto" o ci sono alcuni modi migliori per farlo?

Nome tabella: vota

id  userid   article_id  vote
 1    1001      12       1
 2    1002      12      -1
 3    1003      12       1
 4    1002      10      -1 

Nome tabella: articoli

 article_id     article_title   article_content  article_author
   12              something       something       something     
   10              something       something       something      

Dall'esempio sopra il voto totale per l'articolo 12 è 1+(-1)+1 = 1

    
posta black_belt 20.05.2012 - 14:24
fonte

1 risposta

4

" Like Stack Exchange " è un requisito di riepilogo che implica una serie di dettagli. Uno di questi dettagli è la possibilità per gli utenti di cambiare i loro voti. Quindi hai certamente bisogno di una tabella come vote , con un meccanismo per sostituire il valore vote.vote . Un altro dettaglio implicito è un'interfaccia web ad alte prestazioni, che porta al caching e / o alla denormalizzazione di alcuni cambiamenti non frequenti dati, come il totale dei voti per un articolo (come suggerisce Alex). Garantire che i valori memorizzati nella cache / denormalizzati siano accurati può essere difficile. I sistemi di caching sono notoriamente complessi se hai sempre bisogno di dati accurati, ma potresti considerare di invalidare l'articolo memorizzato nella cache su ogni inserimento / aggiornamento alla tabella vote . Allo stesso modo, potresti voler utilizzare un trigger del database per applicare i delta di voto alla tabella articles su ogni inserimento / aggiornamento alla tabella vote .

Alcune osservazioni non correlate:

  • Avere colonne con lo stesso nome delle loro tabelle è un odore di codice , che spesso indica una mancanza di pianificazione dei modelli di dati .
  • Non hai bisogno di una colonna id nella tabella dei voti. Le colonne Id dovrebbero esistere solo nelle tabelle in cui non esiste un'altra chiave primaria. La chiave primaria della tabella vote deve essere un composto di userid e article_id .
  • Non mostri i vincoli del database, ma vote dovrebbe richiedere la combinazione di userid e article_id per essere univoci. Non vuoi più voti da un singolo utente sullo stesso articolo.
risposta data 20.05.2012 - 17:44
fonte

Leggi altre domande sui tag