2012-08-04 10 views
5

Mi chiedo,
in molti siti web c'è la possibilità di gradire/non gradire un post.
anche qui ovviamente, a stackoverflow.database-design: tabella dei mi piace?

quindi, tecnicamente si tratta di un grande tavolo?

user_id post_id 

id_utente - che hanno votato
post_id - che post è che

è che tutto questo?
un grande tavolo dei like?
non c'è qualcosa di più efficiente/sofisticato?

+0

Su quale base si suppone che sia un grande tavolo? –

+0

Se è necessario conservare le informazioni su chi ha gradito/non gradire un post, questa è la quantità minima di dati che è necessario memorizzare. – JJJ

risposta

5

Al livello di base, sì, è tutto.

Ma poi si inizia ad espandersi, cercando di rispondere a domande come:

  • Quanto ha fatto l'utente piaciuto questo post?
  • Quando gli è piaciuto il post?
  • Come hanno trovato il post?
  • Hanno commentato il post?
  • Come funziona l'intero gruppo/comunità come il palo

poi si inizia a voler rispondere a più domande di profondità circa gli amici e la comunità.

1

Penso di poter capire la tua preoccupazione. Dovendo emettere un COUNT() ogni volta che la pagina deve essere presentata.

È sicuramente necessario disporre di questa tabella di base, che costituirà la base per un COUNT(), ma non è necessario COUNT() per ogni accesso.

Creare una tabella di totalizzazione e aggiornarla quando la pagina riceve un mi piace o non piace, utilizzando un trigger o chiama una procedura memorizzata per aggiornarla di volta in volta.

Direi che ogni metodo è più indicato per diverse personalità del sito, cioè più letture o più scritti, ma sai già che quando si tratta di "Mi piace" o "Non mi piace" niente è previsibile.

+0

così praticamente, supponiamo di avere un tavolo Post che può essere apprezzato. dovrebbe avere un campo "likes_counter" che conta il numero di Mi piace quindi non devo usare COUNT(). destra? – socksocket

+0

corretto. Utilizzando la tabella di destinazione, l'aggiunta di una colonna è un approccio che salva una tabella aggiuntiva nel server. Se ti è permesso cambiare la struttura della tabella di destinazione, bene. In caso contrario, creare una tabella separata che conterrà due colonne: targetTableName, totalLikes. Suppongo che tu abbia pieno accesso al db. Le mie considerazioni meritavano di richiamare l'attenzione sulle diverse alternative di progettazione. –

Problemi correlati