Ho un'applicazione in cui gli utenti possono valutare gli articoli da un elenco a loro piacimento o non piacere (gli utenti possono anche scegliere di non valutare un articolo).
Ci sono milioni di articoli che possono essere valutati dagli utenti in questo modo positivo / negativo / non classificato. Sto cercando una soluzione a quale tipo di database e design di database sarebbe appropriato per archiviare queste valutazioni, supponendo che ci possano essere migliaia di utenti e che altri dati vengano memorizzati sia sugli utenti che sugli articoli.
Mi piacerebbe essere in grado (preferibilmente in modo efficiente) di interrogare il database per trovare:
- un elenco di tutti gli elementi preferiti da due o più utenti
- un elemento casuale che un utente non ha valutato prima
- un elemento casuale che un utente non ha mai visto prima (non permettendo l'inclusione di quelli che l'utente ha lasciato senza rating)
- un elemento casuale che ha alcune proprietà specifiche, ad es. solo articoli con una posizione specifica in Europa
La casualità non deve essere molto casuale, ma solo lo stesso ordine per ogni utente.
Un ulteriore potenziale requisito futuro sarebbe quello di avere una funzione in cui un utente può essere presentato con gli elementi che ci si aspetta che gli piaccia, in base a ciò che è piaciuto prima e a ciò che altri utenti con gusti simili hanno gradito.
Ho usato per lo più database basati su documenti, e i requisiti suggeriscono di archiviare gli elenchi di elementi piacevoli e non voluti contro gli utenti, ma questo sembra molto inefficiente. Sono felice di utilizzare un database relazionale se fosse più adatto, o di imparare a utilizzare qualsiasi altro tipo di database. Sospetto che la mia mancanza di esperienza nel database mi impedisca di vedere un design chiaramente migliore.